ignore from open-source master
Change-Id: Ic5531553969e0eb1190f22d6db416499df178946
diff --git a/Android.mk b/Android.mk
index 2632f47..d574b3f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,15 +1,17 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_MODULE_TAGS := user
+LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := googlelogin-client
+LOCAL_STATIC_JAVA_LIBRARIES := com.android.phone.common
LOCAL_PACKAGE_NAME := Contacts
LOCAL_CERTIFICATE := shared
+LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
+
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9d6ff4b..1fae984 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -19,6 +19,8 @@
android:sharedUserId="android.uid.shared"
>
+ <original-package android:name="com.android.contacts" />
+
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
@@ -28,6 +30,7 @@
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.mail" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.VIBRATE" />
@@ -60,7 +63,7 @@
</intent-filter>
</activity>
- <!-- Tab container for TwelveKeyDialer and RecentCallsList -->
+ <!-- Tab container for all tabs -->
<activity android:name="DialtactsActivity"
android:label="@string/launcherDialer"
android:theme="@style/DialtactsTheme"
@@ -112,7 +115,7 @@
</intent-filter>
</activity>
- <!-- Tab container for Activity Stream and Contacts -->
+ <!-- Tab container for all tabs -->
<activity-alias android:name="DialtactsContactsEntryActivity"
android:targetActivity="DialtactsActivity"
android:label="@string/contactsList"
@@ -132,9 +135,21 @@
<data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
</intent-filter>
+ </activity-alias>
+
+ <!-- Main launch Intent to open the Contacts app. This will open the app in its last manual
+ state. This is the state that has been explicitly set by the user (e.g. by clicking a tab).
+ States configured via other Intents (e.g. CallLog after Call) are not considered manual
+ state. At the moment, the Intent always goes to the DialtactsActivity, but this might later
+ be changed to also include sub-activities like Edit or View if they were left open -->
+
+ <activity-alias android:name="ContactsLaunchActivity"
+ android:targetActivity="DialtactsActivity"
+ >
<intent-filter>
- <action android:name="com.android.contacts.action.FILTER_CONTACTS" />
+ <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity-alias>
@@ -225,14 +240,6 @@
<data android:mimeType="vnd.android.cursor.item/postal-address" android:host="contacts" />
</intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.SEARCH" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
-
- <meta-data android:name="android.app.searchable"
- android:resource="@xml/searchable"
- />
</activity>
<!-- An activity for joining contacts -->
@@ -246,9 +253,35 @@
</intent-filter>
</activity>
+ <!-- The contacts search/filter UI -->
+ <activity android:name="ContactsListActivity$ContactsSearchActivity"
+ android:theme="@style/ContactsSearchTheme"
+ android:windowSoftInputMode="stateAlwaysVisible|adjustPan"
+ >
+ <intent-filter>
+ <action android:name="com.android.contacts.action.FILTER_CONTACTS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
+ </intent-filter>
+ </activity>
+
+ <!-- The contacts search/filter UI -->
+ <activity android:name="SearchResultsActivity"
+ android:theme="@style/TallTitleBarTheme"
+ android:label="@string/contactsList"
+ >
+ <intent-filter>
+ <action android:name="android.intent.action.SEARCH" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
+ <meta-data android:name="android.app.searchable"
+ android:resource="@xml/searchable"
+ />
+ </activity>
<!-- Used to select display and sync groups -->
- <activity android:name=".ui.DisplayGroupsActivity" android:label="@string/displayGroups" />
+ <activity android:name=".ui.ContactsPreferencesActivity" android:label="@string/displayGroups" />
<activity
android:name=".ui.ShowOrCreateActivity"
@@ -269,12 +302,15 @@
android:theme="@style/FullyTranslucent.QuickContact"
android:launchMode="singleTop"
android:excludeFromRecents="true"
- android:taskAffinity="android.task.quickcontact">
+ android:taskAffinity="android.task.quickcontact"
+ android:windowSoftInputMode="stateUnchanged"
+ >
<intent-filter>
<action android:name="com.android.contacts.action.QUICK_CONTACT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/contact" android:host="com.android.contacts" />
+ <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts" />
</intent-filter>
</activity>
@@ -298,6 +334,7 @@
<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" />
</intent-filter>
</activity-alias>
@@ -342,7 +379,6 @@
<!-- Edit or insert details for a contact -->
<activity
android:name=".ui.EditContactActivity"
- android:label="@string/editContactDescription"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter android:label="@string/editContactDescription">
@@ -392,8 +428,9 @@
</activity>
<!-- Makes .ContactsListActivity the search target for any activity in Contacts -->
- <meta-data android:name="android.app.default_searchable"
- android:value=".ContactsListActivity" />
+ <meta-data
+ android:name="android.app.default_searchable"
+ android:value=".ContactsListActivity" />
<!-- LIVE FOLDERS -->
@@ -428,7 +465,14 @@
</activity>
<activity android:name=".ImportVCardActivity"
- android:theme="@style/BackgroundOnly" />
+ android:theme="@style/BackgroundOnly">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <data android:mimeType="text/directory" />
+ <data android:mimeType="text/x-vcard" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
<activity android:name=".ExportVCardActivity"
android:theme="@style/BackgroundOnly" />
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000..b84e1b6
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,49 @@
+# 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.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list. These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list. E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
diff --git a/proguard.flags b/proguard.flags
new file mode 100644
index 0000000..6cc704c
--- /dev/null
+++ b/proguard.flags
@@ -0,0 +1,14 @@
+-keep class com.android.contacts.model.Sources {
+ public <init>(...);
+}
+
+# TODO: Instead of keeping the following two functions we could as well just remove them completely
+# as they are only used in test code
+
+-keep class com.android.contacts.model.EntityDelta {
+ public com.android.contacts.model.EntityDelta$ValuesDelta getSuperPrimaryEntry(java.lang.String,boolean);
+}
+
+-keep class com.android.contacts.model.EntityDelta$ValuesDelta {
+ public android.content.ContentValues getAfter();
+}
diff --git a/res/anim/search_bar_enter.xml b/res/anim/search_bar_enter.xml
new file mode 100644
index 0000000..f0ee241
--- /dev/null
+++ b/res/anim/search_bar_enter.xml
@@ -0,0 +1,26 @@
+<?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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:anim/decelerate_interpolator">
+ <translate android:fromYDelta="-32" android:toYDelta="0"
+ android:duration="@android:integer/config_shortAnimTime"/>
+ <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime" />
+</set>
diff --git a/res/anim/search_bar_exit.xml b/res/anim/search_bar_exit.xml
new file mode 100644
index 0000000..c0eff2b
--- /dev/null
+++ b/res/anim/search_bar_exit.xml
@@ -0,0 +1,26 @@
+<?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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:anim/accelerate_interpolator">
+ <translate android:fromYDelta="0" android:toYDelta="-32"
+ android:duration="@android:integer/config_shortAnimTime"/>
+ <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@android:integer/config_shortAnimTime" />
+</set>
diff --git a/res/drawable-finger/ic_dial_number.xml b/res/drawable-finger/ic_dial_number.xml
deleted file mode 100644
index 1ba449e..0000000
--- a/res/drawable-finger/ic_dial_number.xml
+++ /dev/null
@@ -1,25 +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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true"
- android:drawable="@drawable/ic_dial_number_blk" />
- <item android:state_focused="true"
- android:drawable="@drawable/ic_dial_number_blk" />
- <item
- android:drawable="@drawable/ic_dial_number_wht" />
-</selector>
-
diff --git a/res/drawable-hdpi-finger/bg_blk_search_contact.9.png b/res/drawable-hdpi-finger/bg_blk_search_contact.9.png
new file mode 100644
index 0000000..db83477
--- /dev/null
+++ b/res/drawable-hdpi-finger/bg_blk_search_contact.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_normal_blue.9.png b/res/drawable-hdpi-finger/btn_dial_normal_blue.9.png
deleted file mode 100644
index ddad155..0000000
--- a/res/drawable-hdpi-finger/btn_dial_normal_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_normal_green.9.png b/res/drawable-hdpi-finger/btn_dial_normal_green.9.png
deleted file mode 100644
index dbb0f97..0000000
--- a/res/drawable-hdpi-finger/btn_dial_normal_green.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_search_dialog_default.9.png b/res/drawable-hdpi-finger/btn_search_dialog_default.9.png
new file mode 100644
index 0000000..f65fa14
--- /dev/null
+++ b/res/drawable-hdpi-finger/btn_search_dialog_default.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_search_dialog_pressed.9.png b/res/drawable-hdpi-finger/btn_search_dialog_pressed.9.png
new file mode 100644
index 0000000..17cc0dd
--- /dev/null
+++ b/res/drawable-hdpi-finger/btn_search_dialog_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_search_dialog_selected.9.png b/res/drawable-hdpi-finger/btn_search_dialog_selected.9.png
new file mode 100644
index 0000000..0509e14
--- /dev/null
+++ b/res/drawable-hdpi-finger/btn_search_dialog_selected.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/contact_picture_border_in_list.9.png b/res/drawable-hdpi-finger/contact_picture_border_in_list.9.png
deleted file mode 100755
index 8166d4f..0000000
--- a/res/drawable-hdpi-finger/contact_picture_border_in_list.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_btn_round_less.png b/res/drawable-hdpi-finger/ic_btn_round_less.png
new file mode 100644
index 0000000..819440e
--- /dev/null
+++ b/res/drawable-hdpi-finger/ic_btn_round_less.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_call_log_list_incoming_call.png b/res/drawable-hdpi-finger/ic_call_log_list_incoming_call.png
index 9c016fa..15b5e44 100755
--- a/res/drawable-hdpi-finger/ic_call_log_list_incoming_call.png
+++ b/res/drawable-hdpi-finger/ic_call_log_list_incoming_call.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_call_log_list_outgoing_call.png b/res/drawable-hdpi-finger/ic_call_log_list_outgoing_call.png
index 256de19..160c707 100755
--- a/res/drawable-hdpi-finger/ic_call_log_list_outgoing_call.png
+++ b/res/drawable-hdpi-finger/ic_call_log_list_outgoing_call.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_list_split.png b/res/drawable-hdpi-finger/ic_list_split.png
deleted file mode 100644
index 92f486b..0000000
--- a/res/drawable-hdpi-finger/ic_list_split.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_menu_export_contact.png b/res/drawable-hdpi-finger/ic_menu_export_contact.png
deleted file mode 100755
index c9781f7..0000000
--- a/res/drawable-hdpi-finger/ic_menu_export_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_menu_import_contact.png b/res/drawable-hdpi-finger/ic_menu_import_contact.png
deleted file mode 100755
index 18de61f..0000000
--- a/res/drawable-hdpi-finger/ic_menu_import_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_menu_show_barcode.png b/res/drawable-hdpi-finger/ic_menu_show_barcode.png
deleted file mode 100755
index e36efdd..0000000
--- a/res/drawable-hdpi-finger/ic_menu_show_barcode.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/quickcontact_frame_divider_med.png b/res/drawable-hdpi-finger/quickcontact_frame_divider_med.png
deleted file mode 100644
index e0e9ca4..0000000
--- a/res/drawable-hdpi-finger/quickcontact_frame_divider_med.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/sym_ringtone.png b/res/drawable-hdpi-finger/sym_ringtone.png
deleted file mode 100755
index ad103e8..0000000
--- a/res/drawable-hdpi-finger/sym_ringtone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/sym_send_to_voicemail.png b/res/drawable-hdpi-finger/sym_send_to_voicemail.png
deleted file mode 100755
index ac43473..0000000
--- a/res/drawable-hdpi-finger/sym_send_to_voicemail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_sources.png b/res/drawable-hdpi/ic_menu_sources.png
deleted file mode 100644
index 45355e2..0000000
--- a/res/drawable-hdpi/ic_menu_sources.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/magnifying_glass.png b/res/drawable-hdpi/magnifying_glass.png
new file mode 100755
index 0000000..ac88fb4
--- /dev/null
+++ b/res/drawable-hdpi/magnifying_glass.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/bg_blk_search_contact.9.png b/res/drawable-mdpi-finger/bg_blk_search_contact.9.png
new file mode 100644
index 0000000..2694b5c
--- /dev/null
+++ b/res/drawable-mdpi-finger/bg_blk_search_contact.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_normal_blue.9.png b/res/drawable-mdpi-finger/btn_dial_normal_blue.9.png
deleted file mode 100644
index 7c8c2ca..0000000
--- a/res/drawable-mdpi-finger/btn_dial_normal_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_normal_green.9.png b/res/drawable-mdpi-finger/btn_dial_normal_green.9.png
deleted file mode 100644
index b220650..0000000
--- a/res/drawable-mdpi-finger/btn_dial_normal_green.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_search_dialog_default.9.png b/res/drawable-mdpi-finger/btn_search_dialog_default.9.png
new file mode 100644
index 0000000..7275231
--- /dev/null
+++ b/res/drawable-mdpi-finger/btn_search_dialog_default.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_search_dialog_pressed.9.png b/res/drawable-mdpi-finger/btn_search_dialog_pressed.9.png
new file mode 100644
index 0000000..50a9209
--- /dev/null
+++ b/res/drawable-mdpi-finger/btn_search_dialog_pressed.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_search_dialog_selected.9.png b/res/drawable-mdpi-finger/btn_search_dialog_selected.9.png
new file mode 100644
index 0000000..14b774a
--- /dev/null
+++ b/res/drawable-mdpi-finger/btn_search_dialog_selected.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/contact_picture_border_in_list.9.png b/res/drawable-mdpi-finger/contact_picture_border_in_list.9.png
deleted file mode 100644
index e10b676..0000000
--- a/res/drawable-mdpi-finger/contact_picture_border_in_list.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_btn_round_less.png b/res/drawable-mdpi-finger/ic_btn_round_less.png
new file mode 100644
index 0000000..a9b5bed
--- /dev/null
+++ b/res/drawable-mdpi-finger/ic_btn_round_less.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_call_log_list_incoming_call.png b/res/drawable-mdpi-finger/ic_call_log_list_incoming_call.png
index db74c8f..c7eec52 100644
--- a/res/drawable-mdpi-finger/ic_call_log_list_incoming_call.png
+++ b/res/drawable-mdpi-finger/ic_call_log_list_incoming_call.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_call_log_list_outgoing_call.png b/res/drawable-mdpi-finger/ic_call_log_list_outgoing_call.png
index b47e022..041d086 100644
--- a/res/drawable-mdpi-finger/ic_call_log_list_outgoing_call.png
+++ b/res/drawable-mdpi-finger/ic_call_log_list_outgoing_call.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_list_split.png b/res/drawable-mdpi-finger/ic_list_split.png
deleted file mode 100644
index cbaab12..0000000
--- a/res/drawable-mdpi-finger/ic_list_split.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_menu_export_contact.png b/res/drawable-mdpi-finger/ic_menu_export_contact.png
deleted file mode 100644
index d5b7554..0000000
--- a/res/drawable-mdpi-finger/ic_menu_export_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_menu_import_contact.png b/res/drawable-mdpi-finger/ic_menu_import_contact.png
deleted file mode 100755
index fcb16db..0000000
--- a/res/drawable-mdpi-finger/ic_menu_import_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_menu_show_barcode.png b/res/drawable-mdpi-finger/ic_menu_show_barcode.png
deleted file mode 100755
index cb66ae5..0000000
--- a/res/drawable-mdpi-finger/ic_menu_show_barcode.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/quickcontact_frame_divider_med.png b/res/drawable-mdpi-finger/quickcontact_frame_divider_med.png
deleted file mode 100644
index 3b24f95..0000000
--- a/res/drawable-mdpi-finger/quickcontact_frame_divider_med.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/sym_ringtone.png b/res/drawable-mdpi-finger/sym_ringtone.png
deleted file mode 100644
index cb2a65b..0000000
--- a/res/drawable-mdpi-finger/sym_ringtone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi-finger/sym_send_to_voicemail.png b/res/drawable-mdpi-finger/sym_send_to_voicemail.png
deleted file mode 100644
index 8743115..0000000
--- a/res/drawable-mdpi-finger/sym_send_to_voicemail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_sources.png b/res/drawable-mdpi/ic_menu_sources.png
deleted file mode 100644
index 78cdaca..0000000
--- a/res/drawable-mdpi/ic_menu_sources.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/magnifying_glass.png b/res/drawable-mdpi/magnifying_glass.png
new file mode 100755
index 0000000..2592ae0
--- /dev/null
+++ b/res/drawable-mdpi/magnifying_glass.png
Binary files differ
diff --git a/res/drawable-finger/ic_tab_friends.xml b/res/drawable/call_background_secondary.xml
similarity index 60%
copy from res/drawable-finger/ic_tab_friends.xml
copy to res/drawable/call_background_secondary.xml
index 58234ae..b784862 100644
--- a/res/drawable-finger/ic_tab_friends.xml
+++ b/res/drawable/call_background_secondary.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!-- 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.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/ic_tab_selected_friends_list" />
- <item android:drawable="@drawable/ic_tab_unselected_friends_list" />
-</selector>
+ <item android:state_window_focused="false"
+ android:drawable="@android:color/transparent" />
+ <item android:state_focused="false" android:state_pressed="true"
+ android:drawable="@*android:drawable/list_selector_background_transition" />
+ <item android:state_focused="false" android:state_pressed="false"
+ android:drawable="@color/background_secondary"/>
+
+</selector>
diff --git a/res/drawable/ic_launcher_folder_live_contacts.png b/res/drawable/ic_launcher_folder_live_contacts.png
deleted file mode 100644
index 5e222ec..0000000
--- a/res/drawable/ic_launcher_folder_live_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts_phone.png b/res/drawable/ic_launcher_folder_live_contacts_phone.png
deleted file mode 100644
index 02637da..0000000
--- a/res/drawable/ic_launcher_folder_live_contacts_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts_starred.png b/res/drawable/ic_launcher_folder_live_contacts_starred.png
deleted file mode 100644
index 927b343..0000000
--- a/res/drawable/ic_launcher_folder_live_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_phone.png b/res/drawable/ic_launcher_phone.png
deleted file mode 100644
index 4e613ec..0000000
--- a/res/drawable/ic_launcher_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_shortcut_contact.png b/res/drawable/ic_launcher_shortcut_contact.png
deleted file mode 100644
index ed7025c..0000000
--- a/res/drawable/ic_launcher_shortcut_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/ic_tab_friends.xml b/res/drawable/list_item_background_secondary.xml
similarity index 68%
rename from res/drawable-finger/ic_tab_friends.xml
rename to res/drawable/list_item_background_secondary.xml
index 58234ae..0a27206 100644
--- a/res/drawable-finger/ic_tab_friends.xml
+++ b/res/drawable/list_item_background_secondary.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!-- 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.
@@ -15,7 +15,7 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/ic_tab_selected_friends_list" />
- <item android:drawable="@drawable/ic_tab_unselected_friends_list" />
+ <item android:state_pressed="true" android:drawable="@android:color/transparent"/>
+ <item android:state_selected="true" android:drawable="@android:color/transparent"/>
+ <item android:drawable="@color/background_secondary"/> <!-- not selected -->
</selector>
-
diff --git a/res/drawable/quickcontact.9.png b/res/drawable/quickcontact.9.png
deleted file mode 100644
index fa0b917..0000000
--- a/res/drawable/quickcontact.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/section_dark.9.png b/res/drawable/section_dark.9.png
deleted file mode 100644
index 5d1e1ae..0000000
--- a/res/drawable/section_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-finger/all_tab_indicator.xml b/res/layout-finger/all_tab_indicator.xml
deleted file mode 100644
index 25294c4..0000000
--- a/res/layout-finger/all_tab_indicator.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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="40dip"
- android:layout_weight="1"
- android:layout_marginLeft="-3dip"
- android:layout_marginRight="-3dip"
- android:minWidth="72dip"
- android:background="@+drawable/tab_indicator_bg">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:text="@string/all_tab_label"
- android:textColor="@color/tab_indicator_text"
- android:textSize="20dip"
- />
-
-</RelativeLayout>
diff --git a/res/layout-finger/call_detail.xml b/res/layout-finger/call_detail.xml
index ad151c1..3b230b5 100644
--- a/res/layout-finger/call_detail.xml
+++ b/res/layout-finger/call_detail.xml
@@ -15,13 +15,13 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/title_bar_tall"
android:orientation="horizontal"
@@ -70,22 +70,22 @@
<FrameLayout
android:layout_height="0dip"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_weight="1"
>
<ListView android:id="@android:id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:scrollbarStyle="outsideOverlay"
/>
<ScrollView android:id="@android:id/empty"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:fillViewport="true">
<TextView android:id="@+id/emptyText"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/unknown"
android:textSize="20sp"
@@ -99,7 +99,7 @@
</ScrollView>
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_bar_shadow"
/>
diff --git a/res/layout-finger/call_detail_list_item.xml b/res/layout-finger/call_detail_list_item.xml
index 6c61690..78a5294 100644
--- a/res/layout-finger/call_detail_list_item.xml
+++ b/res/layout-finger/call_detail_list_item.xml
@@ -18,7 +18,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
@@ -27,19 +27,11 @@
android:gravity="center_vertical"
>
- <ImageView android:id="@+id/icon"
- android:layout_width="32dip"
- android:layout_height="32dip"
- android:layout_marginRight="5dip"
- android:gravity="center"
- android:scaleType="centerInside"
- />
-
<LinearLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:layout_marginLeft="5dip"
+ android:layout_marginRight="5dip"
android:paddingTop="5dip"
android:paddingBottom="7dip"
android:orientation="vertical"
@@ -75,4 +67,12 @@
</LinearLayout>
+ <ImageView android:id="@+id/icon"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_marginLeft="5dip"
+ android:gravity="center"
+ android:scaleType="centerInside"
+ />
+
</LinearLayout>
diff --git a/res/layout-finger/contact_card_layout.xml b/res/layout-finger/contact_card_layout.xml
index 6e70561..38ce17e 100644
--- a/res/layout-finger/contact_card_layout.xml
+++ b/res/layout-finger/contact_card_layout.xml
@@ -17,27 +17,27 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_root_view"
android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<com.android.internal.widget.ContactHeaderWidget
android:id="@+id/contact_header_widget"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ListView android:id="@+id/contact_data"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:background="@drawable/title_bar_shadow"
/>
<ScrollView android:id="@android:id/empty"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:fillViewport="true"
>
<TextView android:id="@+id/emptyText"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/no_contact_details"
android:textSize="20sp"
diff --git a/res/layout-finger/contact_options.xml b/res/layout-finger/contact_options.xml
index e484324..5bd8836 100644
--- a/res/layout-finger/contact_options.xml
+++ b/res/layout-finger/contact_options.xml
@@ -15,14 +15,14 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
>
- <include layout="@layout/edit_contact_entry_ringtone" android:id="@+id/ringtone" />
+ <include layout="@layout/preference_with_more_button" android:id="@+id/ringtone" />
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider"
/>
diff --git a/res/layout-finger/contacts_list_content.xml b/res/layout-finger/contacts_list_content.xml
index f736efd..36c03ce 100644
--- a/res/layout-finger/contacts_list_content.xml
+++ b/res/layout-finger/contacts_list_content.xml
@@ -14,32 +14,22 @@
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
+<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"
+ >
- <com.android.contacts.FocusRequestingListView android:id="@android:id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:fastScrollEnabled="true"
+ <view
+ class="com.android.contacts.PinnedHeaderListView"
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fastScrollEnabled="true"
/>
- <ScrollView android:id="@android:id/empty"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:fillViewport="true"
- >
- <TextView android:id="@+id/emptyText"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/noContacts"
- android:textSize="20sp"
- android:textColor="?android:attr/textColorSecondary"
- android:paddingLeft="10dip"
- android:paddingRight="10dip"
- android:paddingTop="10dip"
- android:lineSpacingMultiplier="0.92"
- />
- </ScrollView>
+ <include layout="@layout/contacts_list_empty"/>
+
</LinearLayout>
diff --git a/res/layout-finger/contacts_list_content_join.xml b/res/layout-finger/contacts_list_content_join.xml
index b59c1b7..b50713b 100644
--- a/res/layout-finger/contacts_list_content_join.xml
+++ b/res/layout-finger/contacts_list_content_join.xml
@@ -16,12 +16,12 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@*android:drawable/title_bar_medium"
@@ -38,12 +38,12 @@
android:scaleType="fitCenter"
/>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dip">
<TextView
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/titleJoinContactDataWith"
android:textAppearance="?android:attr/textAppearanceMedium"
@@ -52,7 +52,7 @@
/>
<TextView
android:id="@+id/join_contact_blurb"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-2dip"
android:maxLines="2"
@@ -62,8 +62,8 @@
</LinearLayout>
<ListView android:id="@android:id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:fastScrollEnabled="true"
/>
</LinearLayout>
diff --git a/res/layout-finger/contacts_list_empty.xml b/res/layout-finger/contacts_list_empty.xml
new file mode 100644
index 0000000..195da1e
--- /dev/null
+++ b/res/layout-finger/contacts_list_empty.xml
@@ -0,0 +1,64 @@
+<?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:id="@android:id/empty"
+ 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="vertical">
+
+ <TextView android:id="@+id/emptyText"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/noContacts"
+ android:textSize="20sp"
+ android:textColor="?android:attr/textColorSecondary"
+ android:paddingLeft="10dip"
+ android:paddingRight="10dip"
+ android:paddingTop="10dip"
+ android:lineSpacingMultiplier="0.92"
+ />
+
+ <LinearLayout android:id="@+id/import_failure"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="fill_horizontal"
+ android:padding="20dip"
+ android:visibility="gone">
+
+ <Button
+ android:id="@+id/import_failure_uninstall_apps"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/upgrade_out_of_memory_uninstall"/>
+
+ <Button
+ android:id="@+id/import_failure_retry_upgrade"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10dip"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/upgrade_out_of_memory_retry"/>
+ </LinearLayout>
+ </LinearLayout>
+</ScrollView>
diff --git a/res/layout-finger/contacts_list_item.xml b/res/layout-finger/contacts_list_item.xml
deleted file mode 100644
index 61cc839..0000000
--- a/res/layout-finger/contacts_list_item.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
->
- <include
- android:id="@+id/header"
- layout="@layout/list_section"
- />
-
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:paddingLeft="14dip"
- >
-
- <LinearLayout android:id="@+id/right_side"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:orientation="horizontal"
- android:layout_marginLeft="11dip"
- android:layout_alignParentRight="true">
-
- <ImageView android:id="@+id/presence"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dip"
- android:layout_marginRight="5dip"
- android:padding="7dip"
- android:layout_gravity="center_vertical"
- android:scaleType="centerInside"
- />
-
- <LinearLayout android:id="@+id/call_view"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:orientation="horizontal">
-
- <View android:id="@+id/divider"
- android:layout_width="1px"
- android:layout_height="fill_parent"
- android:layout_marginTop="5dip"
- android:layout_marginBottom="5dip"
- android:background="@drawable/divider_vertical_dark"
- />
-
- <com.android.contacts.ui.widget.DontPressWithParentImageView android:id="@+id/call_button"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingLeft="14dip"
- android:paddingRight="14dip"
- android:layout_centerVertical="true"
- android:gravity="center"
- android:src="@android:drawable/sym_action_call"
- android:background="@drawable/call_background"
- />
-
- </LinearLayout>
-
- </LinearLayout>
-
- <TextView android:id="@+id/label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="8dip"
- android:layout_marginTop="-8dip"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textStyle="bold"
- />
-
- <TextView android:id="@+id/data"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dip"
- android:layout_toRightOf="@id/label"
- android:layout_alignBaseline="@id/label"
- android:layout_toLeftOf="@id/right_side"
- android:layout_alignWithParentIfMissing="true"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceSmall"
- />
-
- <TextView android:id="@+id/name"
- android:layout_width="0dip"
- android:layout_height="0dip"
- android:layout_above="@id/label"
- android:layout_alignWithParentIfMissing="true"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_toLeftOf="@id/right_side"
- android:layout_marginBottom="1dip"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:gravity="center_vertical|left"
- android:textAppearance="?android:attr/textAppearanceLarge"
- />
- </RelativeLayout>
-
- <View android:id="@+id/list_divider"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@*android:drawable/divider_horizontal_dark_opaque"
- />
-</LinearLayout>
diff --git a/res/layout-finger/contacts_list_item_photo.xml b/res/layout-finger/contacts_list_item_photo.xml
deleted file mode 100644
index c9b4c1c..0000000
--- a/res/layout-finger/contacts_list_item_photo.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
->
- <include
- android:id="@+id/header"
- layout="@layout/list_section"
- />
-
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:paddingLeft="4dip"
- >
-
- <LinearLayout android:id="@+id/right_side"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:orientation="horizontal"
- android:layout_marginLeft="11dip"
- android:layout_alignParentRight="true">
-
- <ImageView android:id="@+id/presence"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dip"
- android:layout_marginRight="5dip"
- android:padding="7dip"
- android:layout_gravity="center_vertical"
- android:scaleType="centerInside"
- />
-
- <LinearLayout android:id="@+id/call_view"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:orientation="horizontal">
-
- <View android:id="@+id/divider"
- android:layout_width="1px"
- android:layout_height="fill_parent"
- android:layout_marginTop="5dip"
- android:layout_marginBottom="5dip"
- android:background="@drawable/divider_vertical_dark"
- />
-
- <com.android.contacts.ui.widget.DontPressWithParentImageView android:id="@+id/call_button"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingLeft="14dip"
- android:paddingRight="14dip"
- android:layout_centerVertical="true"
- android:gravity="center"
- android:src="@android:drawable/sym_action_call"
- android:background="@drawable/call_background"
- />
-
- </LinearLayout>
- </LinearLayout>
-
- <android.widget.QuickContactBadge android:id="@+id/photo"
- android:layout_alignParentLeft="true"
- android:layout_centerVertical="true"
- android:layout_marginRight="8dip"
- style="@*android:style/Widget.QuickContactBadge.WindowMedium" />
- />
-
- <ImageView android:id="@+id/noQuickContactPhoto"
- android:layout_alignParentLeft="true"
- android:layout_centerVertical="true"
- android:layout_marginRight="8dip"
- style="@*android:style/Widget.QuickContactBadge.WindowMedium"
- android:background="@null" />
- />
-
- <TextView android:id="@+id/label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/photo"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="8dip"
- android:layout_marginTop="-10dip"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textStyle="bold"
- />
-
- <TextView android:id="@+id/data"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dip"
- android:layout_toRightOf="@id/label"
- android:layout_toLeftOf="@id/right_side"
- android:layout_alignBaseline="@id/label"
- android:layout_alignWithParentIfMissing="true"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceSmall"
- />
-
- <TextView android:id="@+id/name"
- android:layout_width="0dip"
- android:layout_height="0dip"
- android:layout_toRightOf="@id/photo"
- android:layout_toLeftOf="@id/right_side"
- android:layout_alignParentTop="true"
- android:layout_above="@id/label"
- android:layout_alignWithParentIfMissing="true"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:gravity="center_vertical|left"
- android:textAppearance="?android:attr/textAppearanceLarge"
- />
-
- </RelativeLayout>
-
- <View android:id="@+id/list_divider"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@*android:drawable/divider_horizontal_dark_opaque"
- />
-</LinearLayout>
diff --git a/res/layout-finger/contacts_list_search_all_item.xml b/res/layout-finger/contacts_list_search_all_item.xml
new file mode 100644
index 0000000..da2a3d2
--- /dev/null
+++ b/res/layout-finger/contacts_list_search_all_item.xml
@@ -0,0 +1,39 @@
+<?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"
+>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical|left"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:text="@string/search_for_all_contacts"
+ android:paddingLeft="14dip"
+ />
+
+ <View android:id="@+id/list_divider"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@*android:drawable/divider_horizontal_dark_opaque"
+ />
+</LinearLayout>
diff --git a/res/layout-finger/contacts_list_search_results.xml b/res/layout-finger/contacts_list_search_results.xml
new file mode 100644
index 0000000..244ca80
--- /dev/null
+++ b/res/layout-finger/contacts_list_search_results.xml
@@ -0,0 +1,65 @@
+<?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"
+ >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:background="@*android:drawable/title_bar_medium"
+ android:paddingLeft="10dip"
+ android:paddingRight="10dip"
+ android:gravity="center_vertical"
+ >
+
+ <TextView
+ android:id="@+id/search_results_for"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/titleJoinContactDataWith"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:shadowColor="#BB000000"
+ android:shadowRadius="2.75"
+ />
+
+ <TextView
+ android:id="@+id/search_results_found"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-2dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
+
+ </LinearLayout>
+
+ <view
+ class="com.android.contacts.PinnedHeaderListView"
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fastScrollEnabled="true"
+ />
+
+ <include layout="@layout/contacts_list_empty"/>
+
+</LinearLayout>
diff --git a/res/layout-finger/contacts_list_show_all_item.xml b/res/layout-finger/contacts_list_show_all_item.xml
index 5937b9f..4111a8f 100644
--- a/res/layout-finger/contacts_list_show_all_item.xml
+++ b/res/layout-finger/contacts_list_show_all_item.xml
@@ -18,12 +18,12 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical|left"
android:textAppearance="?android:attr/textAppearanceLarge"
@@ -32,7 +32,7 @@
/>
<View android:id="@+id/list_divider"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@*android:drawable/divider_horizontal_dark_opaque"
/>
diff --git a/res/layout-finger/contacts_search_content.xml b/res/layout-finger/contacts_search_content.xml
new file mode 100644
index 0000000..ae72376
--- /dev/null
+++ b/res/layout-finger/contacts_search_content.xml
@@ -0,0 +1,42 @@
+<?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"
+ android:background="@color/translucent_search_background"
+ >
+
+ <include android:id="@+id/searchView"
+ layout="@layout/search_bar"/>
+
+ <ListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fastScrollEnabled="true"
+ android:background="@android:color/background_dark"
+ />
+
+ <!-- Transparent filler -->
+ <View android:id="@android:id/empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ />
+</LinearLayout>
diff --git a/res/layout-finger/create_new_contact.xml b/res/layout-finger/create_new_contact.xml
index 776c482..2c36017 100644
--- a/res/layout-finger/create_new_contact.xml
+++ b/res/layout-finger/create_new_contact.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
diff --git a/res/layout-finger/dialer_activity.xml b/res/layout-finger/dialer_activity.xml
index 29189c7..14a6b39 100644
--- a/res/layout-finger/dialer_activity.xml
+++ b/res/layout-finger/dialer_activity.xml
@@ -16,21 +16,21 @@
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<TabWidget android:id="@android:id/tabs"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<FrameLayout android:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
/>
diff --git a/res/layout-finger/dialpad.xml b/res/layout-finger/dialpad.xml
index 1eb653d..2c14877 100644
--- a/res/layout-finger/dialpad.xml
+++ b/res/layout-finger/dialpad.xml
@@ -17,7 +17,7 @@
<!-- Dialpad in the Contact app.
-->
-<com.android.contacts.ButtonGridLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.phone.ButtonGridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialpad"
android:paddingLeft="7dp"
android:paddingRight="7dp"
@@ -135,4 +135,4 @@
android:soundEffectsEnabled="false"
android:contentDescription="@string/description_image_button_pound"
/>
-</com.android.contacts.ButtonGridLayout>
+</com.android.phone.ButtonGridLayout>
diff --git a/res/layout-finger/dialpad_chooser_list_item.xml b/res/layout-finger/dialpad_chooser_list_item.xml
index c836f5d..853ca47 100644
--- a/res/layout-finger/dialpad_chooser_list_item.xml
+++ b/res/layout-finger/dialpad_chooser_list_item.xml
@@ -17,8 +17,8 @@
<!-- Layout of a single item in the Dialer's "Dialpad chooser" UI. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<ImageView android:id="@+id/icon"
android:layout_width="64dp"
diff --git a/res/layout-finger/display_child.xml b/res/layout-finger/display_child.xml
index ed4856a..65ef405 100644
--- a/res/layout-finger/display_child.xml
+++ b/res/layout-finger/display_child.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
diff --git a/res/layout-finger/display_group.xml b/res/layout-finger/display_group.xml
index 7d36450..b19ae2d 100644
--- a/res/layout-finger/display_group.xml
+++ b/res/layout-finger/display_group.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
diff --git a/res/layout-finger/display_header.xml b/res/layout-finger/display_options_phones_only.xml
similarity index 96%
rename from res/layout-finger/display_header.xml
rename to res/layout-finger/display_options_phones_only.xml
index 65f82aa..35965da 100644
--- a/res/layout-finger/display_header.xml
+++ b/res/layout-finger/display_options_phones_only.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
@@ -25,7 +25,7 @@
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="20dip"
+ android:layout_marginLeft="14dip"
android:layout_marginRight="6dip"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
diff --git a/res/layout-finger/edit_contact.xml b/res/layout-finger/edit_contact.xml
deleted file mode 100644
index e91f7e9..0000000
--- a/res/layout-finger/edit_contact.xml
+++ /dev/null
@@ -1,122 +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.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:fillViewport="true">
-
- <ScrollView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="1"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- >
-
- <LinearLayout android:id="@+id/banner"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="0dip"
- android:gravity="center_vertical"
- android:baselineAligned="false"
- >
-
- <FrameLayout
- android:layout_width="76dip"
- android:layout_height="76dip"
- android:layout_marginTop="4dip"
- android:layout_marginLeft="6dip"
- android:layout_marginBottom="6dip"
- android:layout_marginRight="2dip"
- >
- <ImageView android:id="@+id/photoImage"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:clickable="true"
- android:focusable="true"
- android:src="@drawable/ic_menu_add_picture"
- android:scaleType="center"
- android:background="@drawable/btn_contact_picture"
- />
- </FrameLayout>
-
- <EditText android:id="@+id/name"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginRight="?android:attr/scrollbarSize"
- android:gravity="center_vertical"
- android:inputType="textPersonName|textCapWords"
- android:hint="@string/ghostData_name"
- android:nextFocusDown="@id/data"
- />
-
- <ImageView android:id="@+id/star"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
-
- <!-- "Phonetic name" entry widget, visible only in certain locales -->
- <include layout="@layout/edit_phonetic_name"/>
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:orientation="vertical"
- >
-
- <!-- The edit items -->
- <LinearLayout android:id="@+id/list"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- />
-
- </LinearLayout>
- </LinearLayout>
- </ScrollView>
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- style="@android:style/ButtonBar"
- >
-
- <Button android:id="@+id/saveButton"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/menu_done"
- />
-
- <Button android:id="@+id/discardButton"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/menu_doNotSave"
- />
-
- </LinearLayout>
-</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry.xml b/res/layout-finger/edit_contact_entry.xml
deleted file mode 100644
index d17fdf7..0000000
--- a/res/layout-finger/edit_contact_entry.xml
+++ /dev/null
@@ -1,51 +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="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="4dip"
- android:layout_marginBottom="3dip"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="top"
- android:paddingRight="?android:attr/scrollbarSize"
- >
-
- <Button android:id="@+id/label"
- android:layout_width="80dip"
- android:layout_height="wrap_content"
- android:gravity="left|center_vertical"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- />
-
- <EditText android:id="@+id/data"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="2dip"
- android:layout_marginRight="2dip"
- />
-
- <ImageButton android:id="@+id/delete"
- style="@style/MinusButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
-
-</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_group.xml b/res/layout-finger/edit_contact_entry_group.xml
deleted file mode 100644
index b233ca8..0000000
--- a/res/layout-finger/edit_contact_entry_group.xml
+++ /dev/null
@@ -1,69 +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:id="@+id/entry_group"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingRight="?android:attr/scrollbarSize"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:background="@android:drawable/list_selector_background"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- android:focusable="true"
- android:clickable="true"
- >
-
- <RelativeLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="14dip"
- android:layout_marginTop="6dip"
- android:layout_marginBottom="6dip"
- android:layout_weight="1"
- android:duplicateParentState="true"
- >
-
- <TextView android:id="@+id/label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- android:duplicateParentState="true"
- />
-
- <TextView android:id="@+id/data"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@+id/label"
- android:layout_alignLeft="@+id/label"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:duplicateParentState="true"
- />
-
- </RelativeLayout>
-
- <ImageView
- style="@style/MoreButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
-
-</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_org.xml b/res/layout-finger/edit_contact_entry_org.xml
deleted file mode 100644
index 9daf3d1..0000000
--- a/res/layout-finger/edit_contact_entry_org.xml
+++ /dev/null
@@ -1,61 +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="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="top"
- android:paddingRight="?android:attr/scrollbarSize"
- >
-
- <Button android:id="@+id/label"
- android:layout_width="100dip"
- android:layout_height="wrap_content"
- android:gravity="left|center_vertical"
- />
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:orientation="vertical"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- >
-
- <EditText android:id="@+id/data"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="4dip"
- />
-
- <EditText android:id="@+id/data2"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="4dip"
- />
-
- </LinearLayout>
-
- <ImageButton android:id="@+id/delete"
- style="@style/MinusButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
-
-</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_static_label.xml b/res/layout-finger/edit_contact_entry_static_label.xml
deleted file mode 100644
index 5e40631..0000000
--- a/res/layout-finger/edit_contact_entry_static_label.xml
+++ /dev/null
@@ -1,54 +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="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="4dip"
- android:layout_marginBottom="3dip"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="top"
- android:paddingRight="?android:attr/scrollbarSize"
- >
-
- <!-- Hide this TextView because this layout is only used for Note entries -->
- <TextView android:id="@+id/label"
- android:layout_width="80dip"
- android:layout_height="wrap_content"
- android:gravity="left|center_vertical"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- android:visibility="gone"
- />
-
- <EditText android:id="@+id/data"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="2dip"
- android:layout_marginRight="2dip"
- android:gravity="top"
- />
-
- <ImageButton android:id="@+id/delete"
- style="@style/MinusButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
-
-</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_voicemail.xml b/res/layout-finger/edit_contact_entry_voicemail.xml
index 7b66500..73c65d9 100644
--- a/res/layout-finger/edit_contact_entry_voicemail.xml
+++ b/res/layout-finger/edit_contact_entry_voicemail.xml
@@ -16,7 +16,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/checkable"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingRight="?android:attr/scrollbarSize"
android:minHeight="?android:attr/listPreferredItemHeight"
@@ -62,7 +62,7 @@
<CheckBox android:id="@+id/checkbox"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:focusable="false"
android:clickable="false"
/>
diff --git a/res/layout-finger/edit_divider.xml b/res/layout-finger/edit_divider.xml
index 1dbb563..eb2a49a 100644
--- a/res/layout-finger/edit_divider.xml
+++ b/res/layout-finger/edit_divider.xml
@@ -15,7 +15,7 @@
-->
<View xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/listDivider"
/>
diff --git a/res/layout-finger/edit_phonetic_name.xml b/res/layout-finger/edit_phonetic_name.xml
index afbbb1d..418f8fa 100644
--- a/res/layout-finger/edit_phonetic_name.xml
+++ b/res/layout-finger/edit_phonetic_name.xml
@@ -32,7 +32,7 @@
by temporarily removing the visibility="gone" attribute below.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
android:padding="0dip"
@@ -42,7 +42,7 @@
>
<TextView
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:paddingLeft="4dip"
android:gravity="left|center_vertical"
android:text="@string/label_phonetic_name"
diff --git a/res/layout-finger/edit_separator.xml b/res/layout-finger/edit_separator.xml
deleted file mode 100644
index 1fe799d..0000000
--- a/res/layout-finger/edit_separator.xml
+++ /dev/null
@@ -1,60 +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.
--->
-
-<!-- Layout used for edit separators. -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="3dip"
- android:orientation="vertical"
- >
-
- <LinearLayout
- android:id="@+id/separator"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="14dip"
- android:layout_marginTop="3dip"
- android:layout_marginBottom="1dip"
- android:layout_marginRight="?android:attr/scrollbarSize"
- android:orientation="horizontal"
- android:gravity="bottom"
- android:focusable="true"
- android:clickable="true"
- >
-
- <TextView android:id="@+id/text"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_marginBottom="8dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- />
-
- <ImageView android:id="@+id/add"
- style="@style/PlusButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:duplicateParentState="true"
- />
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/res/layout-finger/edit_separator_alone.xml b/res/layout-finger/edit_separator_alone.xml
deleted file mode 100644
index 7d4aa88..0000000
--- a/res/layout-finger/edit_separator_alone.xml
+++ /dev/null
@@ -1,51 +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.
--->
-
-<!-- Layout used for edit separators. -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/separator"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="14dip"
- android:paddingRight="?android:attr/scrollbarSize"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:background="@android:drawable/list_selector_background"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- android:focusable="true"
- android:clickable="true"
- >
-
- <TextView android:id="@+id/text"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:duplicateParentState="true"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- />
-
- <ImageView android:id="@+id/add"
- style="@style/PlusButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- />
-
-</LinearLayout>
diff --git a/res/drawable-finger/ic_tab_friends.xml b/res/layout-finger/horizontal_divider.xml
similarity index 63%
copy from res/drawable-finger/ic_tab_friends.xml
copy to res/layout-finger/horizontal_divider.xml
index 58234ae..202e663 100644
--- a/res/drawable-finger/ic_tab_friends.xml
+++ b/res/layout-finger/horizontal_divider.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!-- 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.
@@ -14,8 +14,8 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/ic_tab_selected_friends_list" />
- <item android:drawable="@drawable/ic_tab_unselected_friends_list" />
-</selector>
-
+<View xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@*android:drawable/divider_horizontal_dark_opaque"
+/>
diff --git a/res/layout-finger/list_item_text_icons.xml b/res/layout-finger/list_item_text_icons.xml
index 8d4b7a8..69e064e 100644
--- a/res/layout-finger/list_item_text_icons.xml
+++ b/res/layout-finger/list_item_text_icons.xml
@@ -18,7 +18,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
@@ -95,7 +95,7 @@
<View android:id="@+id/divider"
android:layout_width="1px"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
android:background="@drawable/divider_vertical_dark"
@@ -103,7 +103,7 @@
<ImageView android:id="@+id/secondary_action_button"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:layout_centerVertical="true"
android:paddingLeft="14dip"
android:paddingRight="14dip"
diff --git a/res/layout-finger/list_section.xml b/res/layout-finger/list_section.xml
index 06a9ffe..f7ba693 100644
--- a/res/layout-finger/list_section.xml
+++ b/res/layout-finger/list_section.xml
@@ -17,7 +17,7 @@
<!-- Layout used for list section separators. -->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="25dip"
android:background="@*android:drawable/dark_header"
>
diff --git a/res/layout-finger/list_separator.xml b/res/layout-finger/list_separator.xml
index 2ab4859..1257935 100644
--- a/res/layout-finger/list_separator.xml
+++ b/res/layout-finger/list_separator.xml
@@ -4,9 +4,9 @@
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,5 +18,5 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/listSeparatorTextViewStyle"
android:textColor="@*android:color/dim_foreground_dark"
- android:gravity="center_horizontal"
+ android:gravity="left|center_vertical"
/>
diff --git a/res/layout-finger/phone_disambig_item.xml b/res/layout-finger/phone_disambig_item.xml
new file mode 100755
index 0000000..db683a0
--- /dev/null
+++ b/res/layout-finger/phone_disambig_item.xml
@@ -0,0 +1,40 @@
+<?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:orientation="vertical"
+ android:paddingLeft="30dip"
+ android:paddingRight="30dip"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical">
+
+ <TextView
+ android:id="@android:id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textStyle="bold"
+ android:textAppearance="?android:attr/textAppearanceMediumInverse" />
+
+ <TextView
+ android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-4dip"
+ android:textAppearance="?android:attr/textAppearanceSmallInverse" />
+
+</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_ringtone.xml b/res/layout-finger/preference_with_more_button.xml
similarity index 94%
rename from res/layout-finger/edit_contact_entry_ringtone.xml
rename to res/layout-finger/preference_with_more_button.xml
index f2a171f..93b8d5b 100644
--- a/res/layout-finger/edit_contact_entry_ringtone.xml
+++ b/res/layout-finger/preference_with_more_button.xml
@@ -15,16 +15,14 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/entry_ringtone"
- android:layout_width="fill_parent"
+ android:id="@+id/preference"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingRight="?android:attr/scrollbarSize"
android:minHeight="?android:attr/listPreferredItemHeight"
android:background="@android:drawable/list_selector_background"
android:orientation="horizontal"
android:gravity="center_vertical"
- android:focusable="true"
- android:clickable="true"
>
<RelativeLayout
diff --git a/res/layout-finger/quickcontact.xml b/res/layout-finger/quickcontact.xml
index 13b5c20..340ca3f 100644
--- a/res/layout-finger/quickcontact.xml
+++ b/res/layout-finger/quickcontact.xml
@@ -14,9 +14,11 @@
limitations under the License.
-->
-<RelativeLayout
+<view
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ class="com.android.contacts.ui.QuickContactWindow$RootLayout"
+ android:id="@+id/root"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/quickcontact_shadow_horiz"
android:paddingRight="@dimen/quickcontact_shadow_horiz"
@@ -24,28 +26,28 @@
<FrameLayout
android:id="@+id/header"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip">
<ViewStub
android:id="@+id/header_small"
android:inflatedId="@+id/header_small"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/quickcontact_header_small" />
<ViewStub
android:id="@+id/header_medium"
android:inflatedId="@+id/header_medium"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/quickcontact_header_med" />
<ViewStub
android:id="@+id/header_large"
android:inflatedId="@+id/header_large"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/quickcontact_header_large" />
@@ -53,7 +55,7 @@
<HorizontalScrollView
android:id="@+id/scroll"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/header"
android:fadingEdgeLength="0dip"
@@ -84,14 +86,14 @@
<FrameLayout
android:id="@+id/footer"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/scroll"
android:background="@drawable/quickcontact_bottom_frame" />
<LinearLayout
android:id="@+id/footer_disambig"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/scroll"
android:background="@drawable/quickcontact_disambig_bottom_bg"
@@ -100,7 +102,7 @@
<ListView
android:id="@android:id/list"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:background="@color/quickcontact_disambig"
@@ -109,7 +111,7 @@
<CheckBox
android:id="@android:id/checkbox"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="19dip"
android:layout_marginRight="19dip"
@@ -145,4 +147,4 @@
android:visibility="invisible"
android:src="@drawable/quickcontact_arrow_down" />
-</RelativeLayout>
+</view>
diff --git a/res/layout-finger/quickcontact_header_large.xml b/res/layout-finger/quickcontact_header_large.xml
index 2271ff1..d9d4875 100644
--- a/res/layout-finger/quickcontact_header_large.xml
+++ b/res/layout-finger/quickcontact_header_large.xml
@@ -17,7 +17,7 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/header_large"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="87dip"
android:background="@drawable/quickcontact_top_frame"
@@ -41,7 +41,7 @@
<TextView
android:id="@+id/name"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
@@ -51,7 +51,7 @@
<TextView
android:id="@+id/status"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
@@ -61,7 +61,7 @@
<TextView
android:id="@+id/timestamp"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
diff --git a/res/layout-finger/quickcontact_header_med.xml b/res/layout-finger/quickcontact_header_med.xml
index c9ef2be..bed886d 100644
--- a/res/layout-finger/quickcontact_header_med.xml
+++ b/res/layout-finger/quickcontact_header_med.xml
@@ -17,7 +17,7 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/header_medium"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="51dip"
android:background="@drawable/quickcontact_top_frame"
@@ -34,7 +34,7 @@
<TextView
android:id="@+id/status"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
@@ -43,7 +43,7 @@
<TextView
android:id="@+id/timestamp"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"
diff --git a/res/layout-finger/quickcontact_header_small.xml b/res/layout-finger/quickcontact_header_small.xml
index 3711dcc..9dfe0a1 100644
--- a/res/layout-finger/quickcontact_header_small.xml
+++ b/res/layout-finger/quickcontact_header_small.xml
@@ -17,7 +17,7 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/header_small"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/quickcontact_top_frame"
android:orientation="horizontal" />
diff --git a/res/layout-finger/quickcontact_resolve_item.xml b/res/layout-finger/quickcontact_resolve_item.xml
index 9156a59..db683a0 100755
--- a/res/layout-finger/quickcontact_resolve_item.xml
+++ b/res/layout-finger/quickcontact_resolve_item.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="30dip"
diff --git a/res/layout-finger/recent_calls.xml b/res/layout-finger/recent_calls.xml
index 986d913..f054b70 100644
--- a/res/layout-finger/recent_calls.xml
+++ b/res/layout-finger/recent_calls.xml
@@ -15,18 +15,18 @@
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
>
<ListView android:id="@android:id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:scrollbarStyle="outsideOverlay"
/>
<TextView android:id="@android:id/empty"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:text="@string/recentCalls_empty"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge"
diff --git a/res/layout-finger/recent_calls_list_child_item.xml b/res/layout-finger/recent_calls_list_child_item.xml
new file mode 100644
index 0000000..14eb24d
--- /dev/null
+++ b/res/layout-finger/recent_calls_list_child_item.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/listPreferredItemHeight"
+ android:paddingLeft="7dip"
+ android:background="@drawable/list_item_background_secondary"
+>
+
+ <com.android.contacts.ui.widget.DontPressWithParentImageView android:id="@+id/call_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingLeft="14dip"
+ android:paddingRight="14dip"
+ android:layout_alignParentRight="true"
+
+ android:gravity="center_vertical"
+ android:src="@android:drawable/sym_action_call"
+ android:background="@drawable/call_background_secondary"
+ />
+
+ <include layout="@layout/recent_calls_list_item_layout"/>
+
+</RelativeLayout>
diff --git a/res/layout-finger/recent_calls_list_group_item.xml b/res/layout-finger/recent_calls_list_group_item.xml
new file mode 100644
index 0000000..2d3e7af
--- /dev/null
+++ b/res/layout-finger/recent_calls_list_group_item.xml
@@ -0,0 +1,125 @@
+<?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.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/listPreferredItemHeight"
+ android:paddingLeft="7dip"
+>
+
+ <com.android.contacts.ui.widget.DontPressWithParentImageView android:id="@+id/call_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingLeft="14dip"
+ android:paddingRight="14dip"
+ android:layout_alignParentRight="true"
+
+ android:gravity="center_vertical"
+ android:src="@android:drawable/sym_action_call"
+ android:background="@drawable/call_background"
+ />
+
+ <View android:id="@+id/divider"
+ android:layout_width="1px"
+ android:layout_height="match_parent"
+ android:layout_marginTop="5dip"
+ android:layout_marginBottom="5dip"
+ android:layout_toLeftOf="@id/call_icon"
+ android:layout_marginLeft="11dip"
+ android:background="@drawable/divider_vertical_dark"
+ />
+
+ <TextView android:id="@+id/date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toLeftOf="@id/divider"
+ android:layout_alignParentBottom="true"
+ android:layout_marginBottom="8dip"
+ android:layout_marginLeft="10dip"
+
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:singleLine="true"
+ />
+
+ <TextView android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentBottom="true"
+ android:layout_marginLeft="36dip"
+ android:layout_alignBaseline="@id/date"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ />
+
+ <TextView android:id="@+id/number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dip"
+ android:layout_toRightOf="@id/label"
+ android:layout_toLeftOf="@id/date"
+ android:layout_alignBaseline="@id/label"
+ android:layout_alignWithParentIfMissing="true"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
+
+ <TextView android:id="@+id/groupSize"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_toLeftOf="@id/divider"
+ android:layout_above="@id/date"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_marginBottom="-10dip"
+
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:singleLine="true"
+ android:gravity="center_vertical"
+ />
+
+ <TextView android:id="@+id/line1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:layout_toLeftOf="@+id/groupSize"
+ android:layout_above="@id/date"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_marginLeft="36dip"
+ android:layout_marginBottom="-10dip"
+
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:gravity="center_vertical"
+ />
+
+ <ImageView
+ android:id="@+id/groupIndicator"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:src="@*android:drawable/expander_ic_minimized"
+ android:gravity="center_vertical"
+ />
+</RelativeLayout>
diff --git a/res/layout-finger/recent_calls_list_item.xml b/res/layout-finger/recent_calls_list_item.xml
index 5439ff3..8efa23c 100644
--- a/res/layout-finger/recent_calls_list_item.xml
+++ b/res/layout-finger/recent_calls_list_item.xml
@@ -15,14 +15,14 @@
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="7dip"
>
<com.android.contacts.ui.widget.DontPressWithParentImageView android:id="@+id/call_icon"
android:layout_width="wrap_content"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:paddingLeft="14dip"
android:paddingRight="14dip"
android:layout_alignParentRight="true"
@@ -32,75 +32,6 @@
android:background="@drawable/call_background"
/>
- <View android:id="@+id/divider"
- android:layout_width="1px"
- android:layout_height="fill_parent"
- android:layout_marginTop="5dip"
- android:layout_marginBottom="5dip"
- android:layout_toLeftOf="@id/call_icon"
- android:layout_marginLeft="11dip"
- android:background="@drawable/divider_vertical_dark"
- />
-
- <ImageView android:id="@+id/call_type_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_toLeftOf="@id/divider"
- />
-
- <TextView android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toLeftOf="@id/divider"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="8dip"
-
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:singleLine="true"
- />
-
- <TextView android:id="@+id/label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="8dip"
- android:layout_marginTop="-10dip"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textStyle="bold"
- />
-
- <TextView android:id="@+id/number"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dip"
- android:layout_toRightOf="@id/label"
- android:layout_toLeftOf="@id/date"
- android:layout_alignBaseline="@id/label"
- android:layout_alignWithParentIfMissing="true"
-
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceSmall"
- />
-
- <TextView android:id="@+id/line1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true"
- android:layout_toLeftOf="@+id/call_type_icon"
- android:layout_above="@id/label"
- android:layout_alignWithParentIfMissing="true"
-
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:gravity="center_vertical"
- />
+ <include layout="@layout/recent_calls_list_item_layout"/>
</RelativeLayout>
diff --git a/res/layout-finger/recent_calls_list_item_layout.xml b/res/layout-finger/recent_calls_list_item_layout.xml
new file mode 100644
index 0000000..7463669
--- /dev/null
+++ b/res/layout-finger/recent_calls_list_item_layout.xml
@@ -0,0 +1,93 @@
+<?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.
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <View android:id="@+id/divider"
+ android:layout_width="1px"
+ android:layout_height="match_parent"
+ android:layout_marginTop="5dip"
+ android:layout_marginBottom="5dip"
+ android:layout_toLeftOf="@id/call_icon"
+ android:layout_marginLeft="11dip"
+ android:background="@drawable/divider_vertical_dark"
+ />
+
+ <ImageView android:id="@+id/call_type_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentLeft="true"
+ android:layout_marginLeft="4dip"
+ />
+
+ <TextView android:id="@+id/date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toLeftOf="@id/divider"
+ android:layout_alignParentBottom="true"
+ android:layout_marginBottom="8dip"
+ android:layout_marginLeft="10dip"
+
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:singleLine="true"
+ />
+
+ <TextView android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentBottom="true"
+ android:layout_marginLeft="36dip"
+ android:layout_alignBaseline="@id/date"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ />
+
+ <TextView android:id="@+id/number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dip"
+ android:layout_toRightOf="@id/label"
+ android:layout_toLeftOf="@id/date"
+ android:layout_alignBaseline="@id/label"
+ android:layout_alignWithParentIfMissing="true"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
+
+ <TextView android:id="@+id/line1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true"
+ android:layout_toLeftOf="@id/divider"
+ android:layout_above="@id/date"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_marginLeft="36dip"
+ android:layout_marginBottom="-10dip"
+
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:gravity="center_vertical"
+ />
+</merge>
diff --git a/res/layout-finger/search_bar.xml b/res/layout-finger/search_bar.xml
new file mode 100644
index 0000000..d322948
--- /dev/null
+++ b/res/layout-finger/search_bar.xml
@@ -0,0 +1,74 @@
+<?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/search_bar"
+ android:layout_width="match_parent"
+ android:layout_height="64dip"
+ android:orientation="vertical"
+ android:focusable="true"
+ android:descendantFocusability="afterDescendants"
+ android:background="@drawable/bg_blk_search_contact">
+
+ <!-- Outer layout defines the entire search bar at the top of the screen -->
+ <LinearLayout
+ android:id="@+id/search_plate"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingLeft="4dip"
+ android:paddingRight="10dip"
+ android:paddingTop="6dip"
+ android:paddingBottom="0dip"
+ >
+
+ <!-- Inner layout contains the app icon, button(s) and EditText -->
+ <LinearLayout
+ android:id="@+id/search_edit_frame"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/ic_launcher_contacts"
+ android:layout_marginRight="7dip"
+ android:layout_gravity="center_vertical"
+ android:scaleType="centerInside" />
+
+ <view
+ class="com.android.contacts.SearchEditText"
+ android:id="@+id/search_src_text"
+ android:layout_height="wrap_content"
+ android:layout_width="0dip"
+ android:layout_weight="1.0"
+ android:layout_marginLeft="4dip"
+ android:layout_marginBottom="0dip"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:inputType="textNoSuggestions"
+ android:imeOptions="flagNoExtractUi"
+ android:hint="@string/search_bar_hint"
+ android:drawableRight="@drawable/magnifying_glass"
+ android:freezesText="true"
+ />
+ </LinearLayout>
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout-finger/set_primary_checkbox.xml b/res/layout-finger/set_primary_checkbox.xml
index bba8cf9..00b0865 100644
--- a/res/layout-finger/set_primary_checkbox.xml
+++ b/res/layout-finger/set_primary_checkbox.xml
@@ -16,7 +16,7 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="14dip"
android:paddingRight="15dip"
diff --git a/res/layout-finger/split_aggregate_list_item.xml b/res/layout-finger/split_aggregate_list_item.xml
index 5bd4270..5c72eda 100644
--- a/res/layout-finger/split_aggregate_list_item.xml
+++ b/res/layout-finger/split_aggregate_list_item.xml
@@ -16,7 +16,7 @@
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="12dip"
android:paddingRight="12dip"
diff --git a/res/layout-finger/sync_settings.xml b/res/layout-finger/sync_settings.xml
deleted file mode 100644
index 50d0d47..0000000
--- a/res/layout-finger/sync_settings.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
->
-
- <ListView android:id="@android:id/list"
- android:layout_width="fill_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- />
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@android:drawable/bottom_bar"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- >
- <Button android:id="@+id/ok"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@android:string/ok"
- />
-
- <Button android:id="@+id/cancel"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@android:string/cancel"
- />
- </LinearLayout>
-</LinearLayout>
diff --git a/res/layout-finger/tab_account_name.xml b/res/layout-finger/tab_account_name.xml
index dc99af1..8707d98 100644
--- a/res/layout-finger/tab_account_name.xml
+++ b/res/layout-finger/tab_account_name.xml
@@ -18,7 +18,7 @@
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/account_name"
android:background="@drawable/bg_infobar_new"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="@dimen/account_name_height"
android:layout_below="@+id/tab_scroll_view"
android:textStyle="normal"
diff --git a/res/layout-finger/tab_layout.xml b/res/layout-finger/tab_layout.xml
index 9a793c3..42461f6 100644
--- a/res/layout-finger/tab_layout.xml
+++ b/res/layout-finger/tab_layout.xml
@@ -16,7 +16,7 @@
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab_scroll_view"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:scrollbars="none"
@@ -24,7 +24,7 @@
<com.android.contacts.TabStripView
android:id="@android:id/tabs"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</HorizontalScrollView>
\ No newline at end of file
diff --git a/res/layout-finger/total_contacts.xml b/res/layout-finger/total_contacts.xml
index 12badb6..1cac674 100644
--- a/res/layout-finger/total_contacts.xml
+++ b/res/layout-finger/total_contacts.xml
@@ -14,14 +14,24 @@
limitations under the License.
-->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/totalContactsText"
- android:layout_width="fill_parent"
- android:layout_height="25dip"
- android:textColor="#ffbfbfbf"
- android:textSize="14sp"
- android:textStyle="normal"
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="28dip"
android:background="@drawable/infobar_dark"
- android:paddingLeft="7dp"
- android:gravity="center"
-/>
\ No newline at end of file
+ android:paddingLeft="5dp"
+ android:paddingRight="7dp"
+ >
+
+ <TextView
+ android:id="@+id/totalContactsText"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:textColor="#ffbfbfbf"
+ android:textSize="14sp"
+ android:textStyle="normal"
+ android:layout_alignParentLeft="true"
+ android:gravity="center_vertical"
+ />
+
+</RelativeLayout>
diff --git a/res/layout-finger/twelve_key_dialer.xml b/res/layout-finger/twelve_key_dialer.xml
index bd2c7a8..d4c9d8f 100644
--- a/res/layout-finger/twelve_key_dialer.xml
+++ b/res/layout-finger/twelve_key_dialer.xml
@@ -16,8 +16,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
>
@@ -27,7 +27,7 @@
-->
<!-- TODO: Use a textAppearance to control the display of the number -->
<EditText android:id="@+id/digits"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="67dip"
android:gravity="center"
android:maxLines="1"
@@ -40,6 +40,7 @@
android:editable="true"
android:cursorVisible="false"
android:layout_weight="0"
+ android:contentDescription="@string/description_digits_edittext"
/>
<!-- Keypad section -->
@@ -53,7 +54,7 @@
When this UI is visible, the other Dialer elements
(the textfield/button and the dialpad) are hidden. -->
<ListView android:id="@+id/dialpadChooser"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_weight="1"
/>
diff --git a/res/layout-finger/voicemail_dial_delete.xml b/res/layout-finger/voicemail_dial_delete.xml
index 910aaff..384981c 100644
--- a/res/layout-finger/voicemail_dial_delete.xml
+++ b/res/layout-finger/voicemail_dial_delete.xml
@@ -34,6 +34,7 @@
android:layout_gravity="center_vertical"
android:state_enabled="false"
android:background="@drawable/btn_dial_voicemail"
+ android:contentDescription="@string/description_voicemail_button"
android:src="@drawable/ic_dial_action_voice_mail" />
<!-- Onscreen "Dial" button, used on all platforms by
@@ -45,6 +46,7 @@
android:layout_gravity="center_vertical"
android:state_enabled="false"
android:background="@drawable/btn_dial_action"
+ android:contentDescription="@string/description_dial_button"
android:src="@drawable/ic_dial_action_call" />
<!-- Onscreen "Backspace/Delete" button
@@ -57,6 +59,7 @@
android:layout_gravity="center_vertical"
android:state_enabled="false"
android:background="@drawable/btn_dial_delete"
+ android:contentDescription="@string/description_delete_button"
android:src="@drawable/ic_dial_action_delete" />
</LinearLayout>
diff --git a/res/layout-ja-finger/edit_phonetic_name.xml b/res/layout-ja-finger/edit_phonetic_name.xml
deleted file mode 100644
index 41a4059..0000000
--- a/res/layout-ja-finger/edit_phonetic_name.xml
+++ /dev/null
@@ -1,46 +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.
--->
-
-<!-- "Phonetic name" field on the Edit contact screen, for
- Japanese-language locales (i.e. the "furigana" or "yomi" field.) -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:orientation="horizontal"
- android:padding="0dip"
- android:gravity="center_vertical"
- android:baselineAligned="false"
- >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingLeft="4dip"
- android:gravity="left|center_vertical"
- android:text="@string/label_phonetic_name"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
- <EditText android:id="@+id/phonetic_name"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dip"
- android:layout_marginRight="4dip"
- android:gravity="center_vertical"
- android:inputType="textPersonName|textCapWords"
- android:hint="@string/ghostData_phonetic_name"
- android:nextFocusDown="@id/data"
- />
-</LinearLayout>
diff --git a/res/layout-land-finger/twelve_key_dialer.xml b/res/layout-land-finger/twelve_key_dialer.xml
index 92906ba..985d047 100644
--- a/res/layout-land-finger/twelve_key_dialer.xml
+++ b/res/layout-land-finger/twelve_key_dialer.xml
@@ -16,8 +16,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
>
@@ -27,7 +27,7 @@
-->
<!-- TODO: Use a textAppearance to control the display of the number -->
<EditText android:id="@+id/digits"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="66dip"
android:layout_marginBottom="50dip"
android:layout_marginTop="1dip"
@@ -49,7 +49,7 @@
When this UI is visible, the other Dialer elements
(the textfield and button) are hidden. -->
<ListView android:id="@+id/dialpadChooser"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:footerDividersEnabled="true"
/>
diff --git a/res/layout-long-finger/dialpad.xml b/res/layout-long-finger/dialpad.xml
index 9fea6d2..066392d 100644
--- a/res/layout-long-finger/dialpad.xml
+++ b/res/layout-long-finger/dialpad.xml
@@ -18,7 +18,7 @@
Tall screen version with taller buttons.
-->
-<com.android.contacts.ButtonGridLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.phone.ButtonGridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialpad"
android:paddingLeft="7dp"
android:paddingRight="7dp"
@@ -136,4 +136,4 @@
android:soundEffectsEnabled="false"
android:contentDescription="@string/description_image_button_pound"
/>
-</com.android.contacts.ButtonGridLayout>
+</com.android.phone.ButtonGridLayout>
diff --git a/res/layout-long-finger/twelve_key_dialer.xml b/res/layout-long-finger/twelve_key_dialer.xml
index 07771cc..bd90df4 100644
--- a/res/layout-long-finger/twelve_key_dialer.xml
+++ b/res/layout-long-finger/twelve_key_dialer.xml
@@ -16,8 +16,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
>
@@ -27,7 +27,7 @@
-->
<!-- TODO: Use a textAppearance to control the display of the number -->
<EditText android:id="@+id/digits"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="74dip"
android:gravity="center"
android:maxLines="1"
@@ -53,7 +53,7 @@
When this UI is visible, the other Dialer elements
(the textfield/button and the dialpad) are hidden. -->
<ListView android:id="@+id/dialpadChooser"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_weight="1"
/>
diff --git a/res/layout-long-finger/voicemail_dial_delete.xml b/res/layout-long-finger/voicemail_dial_delete.xml
index 8c42e65..23ff289 100644
--- a/res/layout-long-finger/voicemail_dial_delete.xml
+++ b/res/layout-long-finger/voicemail_dial_delete.xml
@@ -35,6 +35,7 @@
android:layout_gravity="center_vertical"
android:state_enabled="false"
android:background="@drawable/btn_dial_voicemail"
+ android:contentDescription="@string/description_voicemail_button"
android:src="@drawable/ic_dial_action_voice_mail" />
<!-- Onscreen "Dial" button, used on all platforms by
@@ -46,6 +47,7 @@
android:layout_gravity="center_vertical"
android:state_enabled="false"
android:background="@drawable/btn_dial_action"
+ android:contentDescription="@string/description_dial_button"
android:src="@drawable/ic_dial_action_call" />
<!-- Onscreen "Backspace/Delete" button
@@ -58,6 +60,7 @@
android:layout_gravity="center_vertical"
android:state_enabled="false"
android:background="@drawable/btn_dial_delete"
+ android:contentDescription="@string/description_delete_button"
android:src="@drawable/ic_dial_action_delete" />
</LinearLayout>
diff --git a/res/layout-long-land-finger/twelve_key_dialer.xml b/res/layout-long-land-finger/twelve_key_dialer.xml
index 18c9a0f..1cf9690 100644
--- a/res/layout-long-land-finger/twelve_key_dialer.xml
+++ b/res/layout-long-land-finger/twelve_key_dialer.xml
@@ -16,8 +16,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
>
@@ -27,7 +27,7 @@
-->
<!-- TODO: Use a textAppearance to control the display of the number -->
<EditText android:id="@+id/digits"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="74dip"
android:layout_marginBottom="30dip"
android:layout_marginTop="1dip"
@@ -49,7 +49,7 @@
When this UI is visible, the other Dialer elements
(the textfield and button) are hidden. -->
<ListView android:id="@+id/dialpadChooser"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:footerDividersEnabled="true"
/>
diff --git a/res/layout/act_edit.xml b/res/layout/act_edit.xml
index e56ec20..2a71717 100644
--- a/res/layout/act_edit.xml
+++ b/res/layout/act_edit.xml
@@ -15,28 +15,28 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
>
<ScrollView
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:layout_weight="1"
android:fillViewport="true"
>
<LinearLayout android:id="@+id/editors"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
/>
</ScrollView>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
style="@android:style/ButtonBar"
diff --git a/res/layout/act_display_groups.xml b/res/layout/contacts_preferences.xml
similarity index 90%
rename from res/layout/act_display_groups.xml
rename to res/layout/contacts_preferences.xml
index 5ee93e7..c8a1bcf 100644
--- a/res/layout/act_display_groups.xml
+++ b/res/layout/contacts_preferences.xml
@@ -16,19 +16,19 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
android:fillViewport="true">
<ExpandableListView
android:id="@android:id/list"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
style="@android:style/ButtonBar">
diff --git a/res/layout/item_contact_editor.xml b/res/layout/item_contact_editor.xml
index a7d5df5..f5e7bd3 100644
--- a/res/layout/item_contact_editor.xml
+++ b/res/layout/item_contact_editor.xml
@@ -17,7 +17,7 @@
<!-- placed inside act_edit as tabcontent -->
<com.android.contacts.ui.widget.ContactEditorView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
@@ -26,7 +26,7 @@
<ImageView
android:id="@+id/color_bar"
android:layout_width="4dip"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:visibility="gone"
/>
@@ -41,11 +41,11 @@
<!-- Account info header -->
<RelativeLayout android:id="@+id/header"
android:layout_height="64dip"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
>
<ImageView android:id="@+id/header_color_bar"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="4dip"
android:layout_marginBottom="5dip"
android:background="@color/edit_divider"
@@ -85,7 +85,7 @@
/>
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:layout_alignParentBottom="true"
@@ -96,7 +96,7 @@
<FrameLayout
android:id="@+id/stub_photo"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="12dip"
android:paddingTop="10dip">
@@ -109,7 +109,7 @@
<include
android:id="@+id/edit_name"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/stub_photo"
android:layout_marginTop="6dip"
@@ -117,7 +117,7 @@
layout="@layout/item_generic_editor" />
<TextView android:id="@+id/read_only_name"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
@@ -128,19 +128,19 @@
<LinearLayout
android:id="@+id/sect_general"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
/>
<View android:id="@+id/head_secondary_divider"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:attr/listDivider" />
<TextView
android:id="@+id/head_secondary"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
@@ -157,13 +157,13 @@
<LinearLayout
android:id="@+id/sect_secondary"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
<TextView
android:id="@+id/edit_read_only"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:layout_marginBottom="10dip"
diff --git a/res/layout/item_editor_field.xml b/res/layout/item_editor_field.xml
index 1e77068..9ad8689 100644
--- a/res/layout/item_editor_field.xml
+++ b/res/layout/item_editor_field.xml
@@ -16,5 +16,5 @@
<EditText
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content" />
diff --git a/res/layout/item_generic_editor.xml b/res/layout/item_generic_editor.xml
index 01fa980..e672eba 100644
--- a/res/layout/item_generic_editor.xml
+++ b/res/layout/item_generic_editor.xml
@@ -56,4 +56,13 @@
android:visibility="gone"
style="@style/MoreButton" />
+ <ImageButton
+ android:id="@+id/edit_less"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_alignBottom="@id/edit_fields"
+ android:visibility="gone"
+ style="@style/LessButton" />
+
</com.android.contacts.ui.widget.GenericEditorView>
diff --git a/res/layout/item_kind_section.xml b/res/layout/item_kind_section.xml
index 73912aa..d1dec5e 100644
--- a/res/layout/item_kind_section.xml
+++ b/res/layout/item_kind_section.xml
@@ -18,19 +18,19 @@
<com.android.contacts.ui.widget.KindSectionView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="vertical">
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/listDivider" />
<LinearLayout
android:id="@+id/kind_header"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="14dip"
@@ -54,6 +54,7 @@
android:fadingEdge="horizontal" />
<ImageView
+ android:id="@+id/kind_plus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:duplicateParentState="true"
@@ -63,7 +64,7 @@
<LinearLayout
android:id="@+id/kind_editors"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="6dip"
android:orientation="vertical" />
diff --git a/res/layout/item_photo_editor.xml b/res/layout/item_photo_editor.xml
index 7544439..b981131 100644
--- a/res/layout/item_photo_editor.xml
+++ b/res/layout/item_photo_editor.xml
@@ -24,4 +24,5 @@
android:cropToPadding="true"
android:scaleType="center"
android:background="@drawable/btn_contact_picture"
+ android:contentDescription="@string/description_contact_photo"
android:gravity="center" />
diff --git a/res/layout/item_read_only_contact_editor.xml b/res/layout/item_read_only_contact_editor.xml
index 0b1dc14..df442c8 100644
--- a/res/layout/item_read_only_contact_editor.xml
+++ b/res/layout/item_read_only_contact_editor.xml
@@ -17,7 +17,7 @@
<!-- placed inside act_edit as tabcontent -->
<com.android.contacts.ui.widget.ReadOnlyContactEditorView
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
@@ -26,7 +26,7 @@
<ImageView
android:id="@+id/color_bar"
android:layout_width="4dip"
- android:layout_height="fill_parent"
+ android:layout_height="match_parent"
android:visibility="gone"
/>
@@ -41,11 +41,11 @@
<!-- Account info header -->
<RelativeLayout android:id="@+id/header"
android:layout_height="64dip"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
>
<ImageView android:id="@+id/header_color_bar"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="4dip"
android:layout_marginBottom="5dip"
android:background="@color/edit_divider"
@@ -85,7 +85,7 @@
/>
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:layout_alignParentBottom="true"
@@ -96,7 +96,7 @@
<FrameLayout
android:id="@+id/stub_photo"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="12dip"
android:paddingTop="10dip">
@@ -108,7 +108,7 @@
</FrameLayout>
<TextView android:id="@+id/read_only_name"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dip"
android:layout_marginBottom="6dip"
@@ -118,14 +118,14 @@
/>
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:attr/listDivider"
/>
<TextView
android:id="@+id/read_only_warning"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="13dip"
android:layout_marginBottom="13dip"
@@ -138,13 +138,13 @@
/>
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:attr/listDivider"
/>
<LinearLayout android:id="@+id/sect_general"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
/>
diff --git a/res/layout/item_read_only_field.xml b/res/layout/item_read_only_field.xml
index a0b20c4..9e0967e 100644
--- a/res/layout/item_read_only_field.xml
+++ b/res/layout/item_read_only_field.xml
@@ -15,7 +15,7 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:orientation="vertical"
@@ -43,7 +43,7 @@
/>
<View
- android:layout_width="fill_parent"
+ android:layout_width="match_parent"
android:layout_height="1px"
android:background="?android:attr/listDivider"
diff --git a/res/layout/vcardshare_main.xml b/res/layout/vcardshare_main.xml
new file mode 100644
index 0000000..4361cfe
--- /dev/null
+++ b/res/layout/vcardshare_main.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+</LinearLayout>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index ca39832..9a1220c 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Kontakty"</string>
@@ -35,9 +36,8 @@
<string name="menu_newContact" msgid="1209922412763274638">"Nový kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Zobrazit kontakt"</string>
<string name="menu_callNumber" msgid="5142851348489387516">"Volat kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Přidat do oblíbených"</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="menu_showBarcode" msgid="309973637178814132">"Zobrazit čárový kód"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Upravit kontakt"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Smazat kontakt"</string>
<string name="menu_call" msgid="3992595586042260618">"Volat kontakt"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Nastavit jako výchozí číslo"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Nastavit jako výchozí e-mail"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Oddělit"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Oddělit kontakt"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Kontakty byly odděleny"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Oddělit kontakt"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Opravdu chcete tento kontakt rozdělit do více kontaktů? Pro každou připojenou kontaktní informaci bude vytvořen samostatný kontakt."</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Spojit"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Zobrazit zdroje"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Skrýt zdroje"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Připojit kontakt"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Spojit kontakty"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Vyberte kontakt, který chcete spojit s kontaktem <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Zobrazit všechny kontakty"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Vrátit zpět"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Upravit kontakt"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Nový kontakt"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Další informace"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Foneticky"</string>
<string name="label_notes" msgid="8337354953278341042">"Poznámky"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Vyzváněcí tón"</string>
- <string name="label_groups" msgid="7304551384542859026">"Skupiny"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Upravit skupiny"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Jméno a příjmení"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Jméno (foneticky)"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Společnost"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Funkce"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Název v chatu"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Má poznámka"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Telefonní číslo"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-mailová adresa"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Poštovní adresa"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Zobrazit skupinu"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Název"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Kontakt neexistuje."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Vytvořit nový kontakt"</string>
<string name="selectLabel" msgid="4255424123394910733">"Vyberte štítek"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Poštovní adresa"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Ostatní"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organizace"</item>
<item msgid="7196592230748086755">"Poznámka"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Žádné fotografie"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"V telefonu nejsou žádné fotografie."</string>
<string name="attachToContact" msgid="8820530304406066714">"Ikona kontaktu"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Název vlastního štítku"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Vlastní název štítku"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Možnosti zobrazení"</string>
<string name="displayGroups" msgid="2278964020773993336">"Možnosti zobrazení"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Upravit synchronizaci"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importovat kontakty"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Přesměrovat hovory přímo do hlasové schránky"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Hovory jsou přesměrovány přímo do hlasové schránky."</string>
- <string name="default_ringtone" msgid="9099988849649827972">"Výchozí"</string>
- <string name="addPicture" msgid="1594679312161537678">"Přidat ikonu"</string>
+ <string name="default_ringtone" msgid="9099988849649827972">"Výchozí nastavení"</string>
<string name="changePicture" msgid="2943329047610967714">"Změnit ikonu"</string>
<string name="removePicture" msgid="3041230993155966350">"Odstranit ikonu"</string>
<string name="noContacts" msgid="8579310973261953559">"Žádné kontakty."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Nebyly nalezeny žádné odpovídající kontakty."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Ke kontaktům nejsou přiřazena žádná telefonní čísla."</string>
- <string name="noFavorites" msgid="812766386743315815">"Žádné oblíbené položky."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Skupiny"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Skupina <xliff:g id="GROUPNAME">%s</xliff:g> je prázdná."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Všechny kontakty"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Pouze kontakty s telefony"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Zobrazit pouze kontakty s telefonními čísly"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Zvolte kontakty, které budou zobrazeny"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"Počet kontaktů: <xliff:g id="COUNT_0">%1$d</xliff:g>, z toho <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> s telefonními čísly"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Synchronizovat všechny kontakty"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Moje kontakty"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Kontakty s telefonním číslem"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Označené hvězdičkou v systému Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Ukládání kontaktu…"</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Ukládání možností zobrazení…"</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Kontakt byl vytvořen."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Kontakt byl uložen."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Chyba, změny kontaktu nelze uložit."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Vytočit číslo"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Telefonní čísla"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Odeslat zprávu"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Odeslat e-mail"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"E-mailové adresy"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Odeslat zprávu chatu"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Adresa chatu"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Adresa na mapě"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Poštovní adresa"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organizace"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Skupiny"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Ostatní informace"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Další možnosti"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Další"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Zobrazuje se 1 kontakt s telefonním číslem"</item>
<item quantity="other" msgid="6133262880804110289">"Počet zobrazených kontaktů s telefonními čísly: <xliff:g id="COUNT">%d</xliff:g>"</item>
@@ -169,14 +126,17 @@
<item quantity="other" msgid="7752927996850263152">"Počet nalezených kontaktů: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Kontakt nebyl nalezen"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Společenské"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 kontakt"</item>
+ <item quantity="other" msgid="5660384247071761844">"Počet kontaktů: <xliff:g id="COUNT">%d</xliff:g>"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Kontakty"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Oblíbené"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Hovory"</string>
<string name="liveFolderAll" msgid="4789010460767506206">"Všechny kontakty"</string>
<string name="liveFolderFavorites" msgid="3100957542927222282">"Kontakty označené hvězdičkou"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakty s telefonními čísly"</string>
+ <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakty s telefonním číslem"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Odeslat textovou zprávu"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Volat kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Před voláním upravit číslo"</string>
@@ -184,54 +144,42 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Odstranit z hovorů"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Vymazat hovory"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Záznam hovorů je prázdný."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Vymazat hovory"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Opravdu chcete vymazat hovory?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Hlasová schránka"</string>
- <string name="unknown" msgid="740067747858270469">"Neznámé číslo"</string>
+ <string name="unknown" msgid="740067747858270469">"Neznámé"</string>
<string name="private_num" msgid="6374339738119166953">"Soukromé číslo"</string>
<string name="payphone" msgid="4864313342828942922">"Veřejný telefon"</string>
- <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Číslo vytočíte pomocí klávesnice"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Číslo vytočíte pomocí klávesnice."</string>
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Přidáváte hovor"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Načítání z karty SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakty na kartě SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Synchronizujte své kontakty Google!"</font>" "\n"Po synchronizaci telefonu budete mít kontaktní informace vždy u sebe."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Nemáte uloženy žádné kontakty, které by bylo možno zobrazit. (Pokud jste účet přidali právě teď, může synchronizace kontaktů trvat několik minut.)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Nemáte uloženy žádné kontakty, které by bylo možno zobrazit."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Nemáte žádné kontakty, které by bylo možné zobrazit."\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotkněte se položky:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", pokud chcete přidat nebo nakonfigurovat účet a kontakty v něm synchronizovat s telefonem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit úplně nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovat nebo exportovat"</b></font>"."\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Nemáte žádné kontakty, které by bylo možné zobrazit. (Pokud jste právě přidali účet, může synchronizace kontaktů trvat několik minut.)"\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotkněte se položky:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", pokud chcete přidat nebo nakonfigurovat účet a kontakty v něm synchronizovat s telefonem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti zobrazení"</b></font>", pokud chcete změnit, které kontakty budou zobrazeny;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit úplně nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovat nebo exportovat"</b></font>"."\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Nemáte žádné kontakty, které by bylo možné zobrazit."\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotkněte se položky:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", pokud chcete přidat nebo nakonfigurovat účet a kontakty v něm synchronizovat s telefonem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit úplně nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovat nebo exportovat"</b></font>"."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Nemáte žádné kontakty, které by bylo možné zobrazit. (Pokud jste právě přidali účet, může synchronizace kontaktů trvat několik minut.)"\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotkněte se položky:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", pokud chcete přidat nebo nakonfigurovat účet a kontakty v něm synchronizovat s telefonem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti zobrazení"</b></font>", pokud chcete změnit, které kontakty budou zobrazeny;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit úplně nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovat nebo exportovat"</b></font>"."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nemáte žádné oblíbené kontakty."\n\n"Přidání kontaktu do seznamu oblíbených:"\n\n" "<li>"Dotkněte se karty "<b>"Kontakty"</b>"."\n</li>" "\n<li>"Dotkněte se kontaktu, který chcete přidat mezi oblíbené."\n</li>" "\n<li>"Dotkněte se hvězdičky vedle jména kontaktu."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Vyberte skupiny, které chcete synchronizovat"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Všechny kontakty"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"S hvězdičkou"</string>
+ <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Označené hvězdičkou"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefony"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Použít dotykovou tónovou klávesnici"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Návrat k probíhajícímu hovoru"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Přidat hovor"</string>
- <string name="callDetailTitle" msgid="5340227785196217938">"Detaily hovoru"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"Podrobnosti hovoru"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Detaily požadovaného hovoru nelze načíst."</string>
- <string name="call_type" msgid="3213526349444862087">"Typ"</string>
- <string name="type_incoming" msgid="6502076603836088532">"Příchozí volání"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"Příchozí hovor"</string>
<string name="type_outgoing" msgid="343108709599392641">"Odchozí volání"</string>
- <string name="type_missed" msgid="2720502601640509542">"Zmeškané volání"</string>
- <string name="call_time" msgid="5805575214626630975">"Čas"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Trvání"</string>
- <string name="header_actions" msgid="229583643365836321">"Akce"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Vyzváněcí tón: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Přidat další položky"</string>
- <string name="actionCall" msgid="695145166039381504">"Volat: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"E-mail: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Text: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chatovat pomocí služby <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Zobrazit adresu: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="type_missed" msgid="2720502601640509542">"Zmeškaný hovor"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Příchozí volání"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Budou přesměrovány přímo do hlasové schránky"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Nastavit vyzvánění <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Často volané"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Nejčastěji používané kontakty"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Přidat kontakt"</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="all_tab_label" msgid="4003124364397916826">"Všechny"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"hvězdička"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nula"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"hlasová schránka"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"vytáčení"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"číslo, které chcete vytočit"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"fotografie kontaktu"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"mínus"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Žádná karta SD"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Nebyla zjištěna žádná karta SD"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Vyhledávání karty vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Odkud chcete kontakty importovat?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importovat z karty SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importovat z karty SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exportovat na kartu SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Sdílet viditelné kontakty"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importovat jeden soubor vCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importovat několik souborů vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importovat všechny soubory vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Analýza karty vCard se z neznámého důvodu nezdařila."</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Analýza karty vCard se nezdařila. Přestože se zřejmě jedná o správný formát, aktuální implementace jej nepodporuje."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Na kartě SD nebyl nalezen žádný soubor vCard"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Ve vašem výběru nebyla nalezena žádná platná položka karty vCard"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Import jednoho nebo více souborů se nezdařil (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Neznámá chyba"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Výběr souboru vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Vyberte soubor vCard, který chcete importovat."</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Čtení karty vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Čtení souborů vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Probíhá import dat karty vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Čtení dat karty vCard se nezdařilo"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Nelze přečíst kartu vCard."\n"Příčina chyby: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktů"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> souborů"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Všechny kontakty"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Kontakty v místním úložišti"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Export kontaktů"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontaktů"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> souborů"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Potvrdit export"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Opravdu chcete exportovat seznam kontaktů do souboru <xliff:g id="VCARD_FILENAME">%s</xliff:g>?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Export dat kontaktů se nezdařil"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Žádný kontakt nelze exportovat"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Na kartě SD je příliš mnoho souborů vCard"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Požadovaný název souboru (<xliff:g id="FILENAME">%s</xliff:g>) je příliš dlouhý"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Cílový adresář <xliff:g id="DIR_NAME">%s</xliff:g> nelze otevřít nebo vytvořit."</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Export dat kontaktů"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Probíhá export dat kontaktů do souboru <xliff:g id="FILE_NAME">%s</xliff:g>"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Nelze spustit exportní program: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Při exportu došlo k chybě: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Načtení informací z databáze se nezdařilo"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Nelze exportovat žádný kontakt. Pravděpodobně jste zvolili data, která nelze exportovat."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Nelze exportovat žádné kontakty. Pokud máte v telefonu skutečně uložené kontakty, je možné, že některý poskytovatel datových služeb zakázal jejich export mimo telefon."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Editor karty vCard není správně inicializován"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Soubor <xliff:g id="FILE_NAME">%s</xliff:g> nelze otevřít: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"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="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontaktů"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Jména vašich kontaktů"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Přidat 2s pauzu"</string>
<string name="add_wait" msgid="3360818652790319634">"Přidat čekání"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Vytočit"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Volat pomocí"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Odeslat zprávu pomocí"</string>
<string name="make_primary" msgid="5829291915305113983">"Zapamatovat tuto volbu"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Všechny kontakty"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"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="account_phone" msgid="4025734638492419713">"Pouze v telefonu (nesynchronizováno)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Zobrazované jméno"</string>
<string name="call_custom" msgid="7756571794763171802">"Volat kontakt <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Volat domů"</string>
<string name="call_mobile" msgid="7502236805487609178">"Volat mobil"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Volat ostatní"</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="7777261153532968503">"Volat jiné číslo faxu"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"SMS – ostatní"</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="3930666870074006114">"Odeslat zprávu na jiné číslo faxu"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"E-mail (další)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
<string name="email_custom" msgid="7548003991586214105">"E-mail <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-mail"</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="5560707927535653892">"Zobrazit ostatní adresy"</string>
+ <string name="map_other" msgid="3817820803587012641">"Zobrazit adresu"</string>
<string name="map_custom" msgid="6184363799976265281">"Zobrazit adresu <xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Křestní jméno (foneticky)"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Druhé jméno (foneticky)"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Příjmení (foneticky)"</string>
- <string name="split_label" msgid="8262112659919449087">"Rozdělit"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Vytvořit z těchto dat nový kontakt."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Z účtu služby <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Kontakt ze zdroje <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"z účtu <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Použít tuto fotografii"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Kontaktní informace ze zdroje <xliff:g id="SOURCE">%1$s</xliff:g> není možné na tomto zařízení upravit."</string>
<string name="no_contact_details" msgid="6754415338321837001">"U tohoto kontaktu nejsou uvedeny dodatečné informace"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Seřadit seznam podle"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Křestní jméno"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Příjmení"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Zobrazení jmen kontaktů"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Nejprve křestní jméno"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Nejprve příjmení"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Vyhledat kontakty"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Vyhledat všechny kontakty"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Vyfotit"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Vybrat fotografii z galerie"</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="upgrade_in_progress" msgid="7530893673211750223">"Aktualizace seznamu kontaktů."\n\n"Čekejte prosím..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Probíhá upgrade kontaktů. "\n\n"Upgrade vyžaduje přibližně <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB vnitřní paměti telefonu. "\n\n"Zvolte jednu z následujících možností:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Odinstalovat některé aplikace"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Zkusit upgradovat znovu"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Výsledky vyhledávání pro dotaz: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Vyhledávání..."</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 513129e..fda1382 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Kontakter"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Ring til <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Føj til favoritter"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Fjern fra favoritter"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Vis stregkode"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Rediger kontakt"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Slet kontakt"</string>
<string name="menu_call" msgid="3992595586042260618">"Ring til kontakt"</string>
@@ -47,16 +47,12 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Gør til standardnummer"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Benyt e-mail som standard"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Opdel"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Opdel kontakt"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Kontakterne blev opdelt"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Opdel kontakt"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Er du sikker på, at du vil opdele denne ene kontakt i flere kontakter: én for hver sæt af de indeholdte kontaktoplysninger?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Føj til"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Vis kilder"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Skjul kilder"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Føj til kontakt"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Føj til kontakter"</string>
- <string name="blurbJoinContactDataWith" msgid="995870557595050304">"Vælg den kontakt, du ønsker at forbinde til <xliff:g id="NAME">%s</xliff:g>."</string>
+ <string name="blurbJoinContactDataWith" msgid="995870557595050304">"Vælg den kontaktperson, du ønsker at forbinde 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>
@@ -67,28 +63,18 @@
<string name="readOnlyContactWarning" msgid="1390849295342594265">"Du kan ikke slette kontakter på skrivebeskyttede konti, men du kan skjule dem i dine lister over kontakter."</string>
<string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Denne kontakt indeholder oplysninger fra flere konti. Oplysningerne fra skrivebeskyttede konti vil blive skjult i dine lister over kontakter, men ikke slettet."</string>
<string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Sletning af denne kontakt sletter oplysninger fra flere konti."</string>
- <string name="deleteConfirmation" msgid="811706994761610640">"Denne kontakt slettes"</string>
+ <string name="deleteConfirmation" msgid="811706994761610640">"Denne kontakt slettes."</string>
<string name="menu_done" msgid="796017761764190697">"Udfør"</string>
<string name="menu_doNotSave" msgid="2174577548513895144">"Annuller"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Rediger kontakt"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Ny kontakt"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Få flere oplysninger"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonetisk"</string>
<string name="label_notes" msgid="8337354953278341042">"Noter"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Ringetone"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupper"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Rediger grupper"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Fornavn og efternavn"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Fonetisk navn"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Virksomhed"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Stilling"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"IM-navn"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Min note"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Telefonnummer"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-mail-adresse"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Postadresse"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Vis gruppe"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Kontakten eksisterer ikke."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Opret ny kontakt"</string>
<string name="selectLabel" msgid="4255424123394910733">"Vælg etiket"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Postadresse"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Andre"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organisation"</item>
<item msgid="7196592230748086755">"Note"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Der er ingen billeder"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Der er ingen tilgængelige billeder på telefonen."</string>
<string name="attachToContact" msgid="8820530304406066714">"Kontaktikon"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Navn på tilpasset etiket"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Indstillinger for visning"</string>
<string name="displayGroups" msgid="2278964020773993336">"Indstillinger for visning"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Rediger grupper, synk."</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importer kontakter"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send opkald direkte til voicemail"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Opkald sendes direkte til voicemail."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Standard"</string>
- <string name="addPicture" msgid="1594679312161537678">"Tilføj ikon"</string>
<string name="changePicture" msgid="2943329047610967714">"Skift ikon"</string>
<string name="removePicture" msgid="3041230993155966350">"Fjern ikon"</string>
<string name="noContacts" msgid="8579310973261953559">"Der er ingen kontakter."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Der blev ikke fundet nogen matchende kontakter."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Der er ingen kontakter med telefonnumre."</string>
- <string name="noFavorites" msgid="812766386743315815">"Der er ingen favoritter."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupper"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Din gruppe \"<xliff:g id="GROUPNAME">%s</xliff:g>\" er tom."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Alle kontakter"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Kun kontakter med telefoner"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Vis kun kontakter med telefonnumre"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Vælg de kontakter, der skal vises"</string>
@@ -129,47 +105,31 @@
<item quantity="other" msgid="3507881585720628389">"<xliff:g id="COUNT">%0$d</xliff:g> kontakter"</item>
</plurals>
<plurals name="groupDescripPhones">
- <item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> kontakter, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> med telefoner"</item>
+ <item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> kontaktpersoner, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> med telefoner"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Synkroniser alle kontakter"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Mine kontakter"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Kontakter med telefonnumre"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Stjernemarkerede i Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Gemmer kontakt ..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Gemmer indstillinger for visning …"</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Kontakt oprettet."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Kontakten er gemt."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Fejl, kunne ikke gemme ændringer af kontakter"</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Ring til nummer"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Telefonnumre"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Send sms"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Send e-mail"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"E-mail-adresser"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Send chatbesked"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Chatadresser"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Kortadresse"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Postadresse"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organisationer"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupper"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Andre oplysninger"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Andre indstillinger"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Flere"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Viser 1 kontakt med telefonnummer"</item>
- <item quantity="other" msgid="6133262880804110289">"Viser <xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnumre"</item>
+ <item quantity="other" msgid="6133262880804110289">"Viser <xliff:g id="COUNT">%d</xliff:g> kontaktpersoner med telefonnumre"</item>
</plurals>
<string name="listTotalPhoneContactsZero" msgid="2756295259674938869">"Der er ingen synlige kontakter med telefonnumre"</string>
<plurals name="listTotalAllContacts">
<item quantity="one" msgid="1096068709488455155">"Viser 1 kontakt"</item>
- <item quantity="other" msgid="2865867557378939630">"Viser <xliff:g id="COUNT">%d</xliff:g> kontakter"</item>
+ <item quantity="other" msgid="2865867557378939630">"Viser <xliff:g id="COUNT">%d</xliff:g> kontaktpersoner"</item>
</plurals>
<string name="listTotalAllContactsZero" msgid="6811347506748072822">"Ingen synlige kontakter"</string>
<plurals name="listFoundAllContacts">
<item quantity="one" msgid="2830107332033967280">"Fandt 1 kontakt"</item>
- <item quantity="other" msgid="7752927996850263152">"Fandt <xliff:g id="COUNT">%d</xliff:g> kontakter"</item>
+ <item quantity="other" msgid="7752927996850263152">"Fandt <xliff:g id="COUNT">%d</xliff:g> kontaktpersoner"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Kontakten blev ikke fundet"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Sociale"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 kontaktperson"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> kontaktpersoner"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Kontakter"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorit"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
@@ -183,8 +143,10 @@
<string name="recentCalls_addToContact" msgid="1429899535546487008">"Føj til kontakter"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Fjern fra opkaldsliste"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Ryd opkaldsliste"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Opkaldsliste er tom."</string>
- <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="recentCalls_empty" msgid="247053222448663107">"Opkaldslisten er tom."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Ryd opkaldsliste"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Er du sikker på, at du vil rydde opkaldslisten?"</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI-nummer"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
<string name="unknown" msgid="740067747858270469">"Ukendte"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Ring og tilføj et opkald"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Indlæser fra SIM-kort ..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Synkroniser dine Google-kontakter!"</font>\n"Når du har synkroniseret din telefon, bliver dine kontakter tilgængelige, uanset hvor du befinder dig."</string>
- <string name="noContactsHelpText" msgid="6788487368878712350">"Du har ingen kontakter, der kan vises."\n\n"Hvis du vil tilføje kontakter, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontakter, som du kan synkronisere med telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for at oprette en ny kontakt helt fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
- <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Du har ingen kontakter, der kan vises. (Hvis du lige har tilføjet en konto, kan det tage et par minutter at synkronisere kontakter)."\n\n"Hvis du vil tilføje kontakter, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontaktner, du kan synkronisere til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Indstillinger for visning"</b></font>" for at ændre, hvilke kontakter der er synlige"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for at oprette en ny kontakt fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Du har ingen kontakter, der kan vises."\n\n"Hvis du vil tilføje kontakter, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontakter, du kan synkronisere med telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for at oprette en ny kontakt fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Du har ingen kontakter, der kan vises. (Hvis du lige har tilføjet en konto, kan det tage et par minutter at synkronisere kontakterne)."\n\n"Hvis du vil tilføje kontakter, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontakter, du kan synkronisere til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Indstillinger for visning"</b></font>" for at ændre, hvilke kontakter der er synlige"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for at oprette en ny kontakt fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
- <string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har ingen favoritter."\n\n"Sådan føjer du en kontakt til din liste over favoritter:"\n\n" "<li>"Tryk på fanen "<b>"Kontakter"</b>\n</li>" "\n<li>"Tryk på den kontakt, du ønsker at føje til dine foretrukne"\n</li>" "\n<li>"Tryk på stjerne ud for kontaktens navn"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Vælg grupper, der skal synkroniseres"</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Du har ingen kontaktpersoner. (Hvis du lige har tilføjet en konto, kan det tage et par minutter at synkronisere kontaktpersoner)."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Du har ingen kontaktpersoner."</string>
+ <string name="noContactsHelpText" msgid="6788487368878712350">"Du har ingen kontaktpersoner, der kan vises."\n\n"Hvis du vil tilføje kontaktpersoner, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontaktpersoner, som du kan synkronisere med telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontaktperson"</b></font>" for at oprette en ny kontaktperson helt fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
+ <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Du har ingen kontaktpersoner, der kan vises. (Hvis du lige har tilføjet en konto, kan det tage et par minutter at synkronisere kontaktpersoner)."\n\n"Hvis du vil tilføje kontaktpersoner, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontaktpersoner, du kan synkronisere til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsindstillinger"</b></font>" for at ændre, hvilke kontaktpersoner der er synlige"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontaktperson"</b></font>" for at oprette en ny kontaktperson fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Du har ingen kontaktpersoner, der kan vises."\n\n"Hvis du vil tilføje kontaktpersoner, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontaktpersoner, du kan synkronisere med telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontaktperson"</b></font>" for at oprette en ny kontaktperson fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Du har ingen kontaktpersoner, der kan vises. (Hvis du lige har tilføjet en konto, kan det tage et par minutter at synkronisere kontaktpersonerne)."\n\n"Hvis du vil tilføje kontaktpersoner, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og på"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontaktpersoner, du kan synkronisere til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsindstillinger"</b></font>" for at ændre, hvilke kontaktpersoner der er synlige"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontaktperson"</b></font>" for at oprette en ny kontaktperson fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>\n</li></string>
+ <string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har ingen favoritter."\n\n"Sådan føjer du en kontaktperson til din liste over favoritter:"\n\n" "<li>"Tryk på fanen "<b>"Kontaktpersoner"</b>\n</li>" "\n<li>"Tryk på den kontaktperson, du ønsker at føje til dine foretrukne"\n</li>" "\n<li>"Tryk på stjerne ud for kontaktpersonens navn"\n</li></string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Alle kontakter"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Stjernemarkerede"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoner"</string>
@@ -209,31 +171,17 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Tilføj opk."</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Opkaldsdetaljer"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Detaljerne for det anmodede opkald kunne ikke læses."</string>
- <string name="call_type" msgid="3213526349444862087">"Type"</string>
<string name="type_incoming" msgid="6502076603836088532">"Indgående opkald"</string>
<string name="type_outgoing" msgid="343108709599392641">"Udgående opkald"</string>
<string name="type_missed" msgid="2720502601640509542">"Ubesvarede opkald"</string>
- <string name="call_time" msgid="5805575214626630975">"Tid"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Varighed"</string>
- <string name="header_actions" msgid="229583643365836321">"Handlinger"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Ringetone: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Tilføj flere emner"</string>
- <string name="actionCall" msgid="695145166039381504">"Ring til <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"E-mail til <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Tekst <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chat ved hjælp af <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Vis <xliff:g id="TYPE">%s</xliff:g> adresse"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Indgående opkald"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Sendes direkte til voicemail"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Angiv som <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Ofte ringet til"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Jævnligt kontaktet"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Tilføj kontakt"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Føj \"<xliff:g id="EMAIL">%s</xliff:g>\" til kontakter?"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Føj \"<xliff:g id="EMAIL">%s</xliff:g>\" til kontaktpersoner?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Alle"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"et"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"to"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"stjernemarker"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pund"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"ring op"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"nummer at ringe op"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"kontaktpersonfoto"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Der er intet SD-kort"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Der blev ikke fundet noget SD-kort"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Søger efter vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Hvor ønsker du at importere kontakter fra?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importer fra SIM-kort"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importer fra SD-kort"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Eksporter til SD-kort"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Del synlige kontaktpersoner"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importer en VCard-fil"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importer flere VCard-filer"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importer alle VCard-filer"</string>
@@ -264,43 +219,34 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"vCard kunne ikke parses pga. en uventet årsag"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"vCard kunne ikke parses, selv om det ser ud til at være et gyldigt format, da den nuværende implementering ikke understøtter det"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Der blev ikke fundet nogen VCard-fil på SD-kortet"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Der blev ikke fundet nogen gyldig vCard-post for dit valg"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"En eller flere filer blev ikke importeret (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Ukendt fejl"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Vælg vCard-fil"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Vælg en vCard-fil, der skal importeres"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Læser vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Læser vCard-fil(er)"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importerer vCard-data"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Læsning af vCard-data mislykkedes"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"vCard kunne ikke læses."\n"Årsag til fejl: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> filer"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Alle kontakter"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Kontakter, som er lagret lokalt"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Eksporter kontakter"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontakter"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> filer"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Bekræft eksport"</string>
- <string name="confirm_export_message" msgid="3875683519257829750">"Er du sikker på, at du vil eksportere listen over kontakter til \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
+ <string name="confirm_export_message" msgid="3875683519257829750">"Er du sikker på, at du vil eksportere listen over kontaktpersoner til \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Eksport af kontaktdata mislykkedes"</string>
- <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Eksport af kontaktdata mislykkedes."\n"Årsag til fejl: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="exporting_contact_failed_message" msgid="4151348002470298092">"Eksport af kontaktpersondata mislykkedes."\n"Årsag til fejl: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Der er ingen kontakter, der kan eksporteres"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Der er for mange vCard-data på SD-kortet"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Det krævede filnavn er for langt (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Destinationsmappen \"<xliff:g id="DIR_NAME">%s</xliff:g>\" kan ikke åbnes eller oprettes"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksporterer kontaktdata"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Kontaktdata eksporteres til \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Eksportfunktionen kunne ikke startes: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Der opstod en fejl under eksport: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Kunne ikke hente databaseoplysninger"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Der er ingen kontakter, som kan eksporteres. Du har måske valgt data, som ikke kan eksporteres"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Der er ingen kontaktpersoner, der kan eksporteres. Hvis du har kontaktpersoner på din telefon, har en dataudbyder muligvis forbudt, at kontaktpersonerne eksporteres fra telefonen."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"vCard-oprettelse ikke korrekt initialiseret"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" kunne ikke åbnes: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" kunne ikke åbnes: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontakter"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Navne på dine kontakter"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Tilføj pause på 2 sek."</string>
<string name="add_wait" msgid="3360818652790319634">"Tilføj Vent"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Ring til"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Ring ved hjælp af"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Send sms ved hjælp af"</string>
<string name="make_primary" msgid="5829291915305113983">"Husk dette valg"</string>
@@ -308,7 +254,7 @@
<string name="quickcontact_remember_choice" msgid="5964536411579749424">"Husk dette valg"</string>
<string name="quickcontact_missing_name" msgid="5590266114306996632">"Ukendte"</string>
<string name="menu_accounts" msgid="8499114602017077970">"Konti"</string>
- <string name="menu_import_export" msgid="3765725645491577190">"Import/eksport af"</string>
+ <string name="menu_import_export" msgid="3765725645491577190">"Import/eksport"</string>
<string name="dialog_import_export" msgid="4771877268244096596">"Importer/eksporter kontakter"</string>
<string name="menu_share" msgid="943789700636542260">"Del"</string>
<string name="share_via" msgid="563121028023030093">"Del kontakt via"</string>
@@ -332,9 +278,8 @@
<string name="display_more_groups" msgid="2682547080423434170">"Flere grupper ..."</string>
<string name="display_ungrouped" msgid="4602580795576261158">"Alle andre kontakter"</string>
<string name="display_all_contacts" msgid="6846131371214707956">"Alle kontakter"</string>
- <string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Hvis \'<xliff:g id="GROUP">%s</xliff:g>\' fjernes fra synkronisering, vil kontakter, der ikke er i grupper, også fjernes fra synkroniseringen."</string>
+ <string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Hvis \'<xliff:g id="GROUP">%s</xliff:g>\' fjernes fra synkronisering, vil kontaktpersoner, der ikke er i grupper, også fjernes fra synkroniseringen."</string>
<string name="account_phone" msgid="4025734638492419713">"Kun telefon (ikke synkroniseret)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Visningsnavn"</string>
<string name="call_custom" msgid="7756571794763171802">"Ring til <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Ring hjem"</string>
<string name="call_mobile" msgid="7502236805487609178">"Ring til mobil"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Ring til øvrige"</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="7777261153532968503">"Ring til anden fax"</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>
@@ -356,20 +301,20 @@
<string name="call_work_pager" msgid="3419348514157949008">"Ring til personsøger på arbejdet"</string>
<string name="call_assistant" msgid="2141641383068514308">"Ring til <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
<string name="call_mms" msgid="6274041545876221437">"Ring til mms"</string>
- <string name="sms_custom" msgid="5932736853732191825">"Sms til <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="sms_custom" msgid="5932736853732191825">"Tekst <xliff:g id="CUSTOM">%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="5131921487474531617">"Sms til anden"</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="3930666870074006114">"Send sms til anden fax"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"E-mail til anden adresse"</string>
- <string name="email_custom" msgid="7548003991586214105">"E-mail til <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="7548003991586214105">"E-mail <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-mail"</string>
<string name="map_home" msgid="1243547733423343982">"Vis hjemmeadresse"</string>
<string name="map_work" msgid="1360474076921878088">"Vis arbejdsadresse"</string>
- <string name="map_other" msgid="5560707927535653892">"Vis anden adresse"</string>
+ <string name="map_other" msgid="3817820803587012641">"Vis adresse"</string>
<string name="map_custom" msgid="6184363799976265281">"Vis <xliff:g id="CUSTOM">%s</xliff:g> adresse"</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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Fonetisk fornavn"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetisk mellemnavn"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Fonetisk efternavn"</string>
- <string name="split_label" msgid="8262112659919449087">"Opdel"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Gør disse data til en selvstændig kontakt"</string>
- <string name="account_name_format" msgid="4421123930035299208">"Fra <xliff:g id="SOURCE">%1$s</xliff:g>-konto: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
- <string name="from_account_format" msgid="687567483928582084">"fra <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktperson"</string>
+ <string name="from_account_format" msgid="687567483928582084">"fra<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Brug dette billede"</string>
- <string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g>s kontaktoplysninger kan ikke redigeres på denne enhed."</string>
+ <string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktoplysninger kan ikke redigeres på denne enhed."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Ingen yderligere oplysninger for denne kontakt"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Sorter liste efter"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Fornavn"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Efternavn"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Vis kontaktpersoners navne som"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Fornavn først"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Efternavn først"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Søg i kontakter"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Søg efter alle kontaktpersoner"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Tag billede"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Vælg foto fra Galleri"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktlisten opdateres for at afspejle ændringen af sprog."\n\n"Vent et øjeblik..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Listen over kontaktpersoner opdateres."\n\n"Vent et øjeblik ..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Kontaktpersonerne er ved at blive opgraderet. "\n\n"Opgraderingen kræver ca. <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB intern lagerplads på telefonen."\n\n"Vælg et af følgende:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Afinstaller nogle programmer"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Prøv at opgradere igen"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Søgeresultater for: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Søger ..."</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4e2a2b9..dfc9437 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Kontakte"</string>
@@ -31,13 +32,12 @@
<string name="editContactDescription" msgid="2947202828256214947">"Kontakt bearbeiten"</string>
<string name="insertContactDescription" msgid="4709878105452681987">"Kontakt erstellen"</string>
<string name="searchHint" msgid="8482945356247760701">"Kontakte durchsuchen"</string>
- <string name="menu_search" msgid="9147752853603483719">"Suchen"</string>
+ <string name="menu_search" msgid="9147752853603483719">"Suche"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Neuer Kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Kontakt anzeigen"</string>
<string name="menu_callNumber" msgid="5142851348489387516">"<xliff:g id="NAME">%s</xliff:g> anrufen"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Zu Favoriten hinzufügen"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Aus Favoriten entfernen"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Barcode anzeigen"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Kontakt bearbeiten"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Kontakt löschen"</string>
<string name="menu_call" msgid="3992595586042260618">"Kontakt anrufen"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Als Standardnr. festlegen"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Standard-E-Mail festlegen"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Teilen"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Kontakt teilen"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Kontakte unterteilt"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Kontakt teilen"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Sind Sie sicher, dass Sie diesen Kontakt in mehrere Kontakte teilen möchten, einen für jedes darin enthaltene Kontaktdetail?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Zusammenführen"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Quellen anzeigen"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Quellen ausblenden"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Kontakt verknüpfen"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kontakte zusammenführen"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Wählen Sie den Kontakt aus, den Sie mit <xliff:g id="NAME">%s</xliff:g> verknüpfen möchten."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Alle Kontakte anzeigen"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Rückgängig"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Kontakt bearbeiten"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Neuer Kontakt"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Weitere Informationen"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Phonetisch"</string>
<string name="label_notes" msgid="8337354953278341042">"Notizen"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Klingelton"</string>
- <string name="label_groups" msgid="7304551384542859026">"Gruppen"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Gruppen bearbeiten"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Vor- und Nachname"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Phonetischer Name"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Unternehmen"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Position"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Chat-Name"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Meine Notiz"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Telefonnummer"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-Mail-Adresse"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Postanschrift"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Gruppe anzeigen"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Dieser Kontakt existiert nicht."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Neuen Kontakt erstellen"</string>
<string name="selectLabel" msgid="4255424123394910733">"Wählen Sie ein Label aus."</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-Mail"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Postanschrift"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Sonstiges"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Firma/Organisation"</item>
<item msgid="7196592230748086755">"Notiz"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Keine Bilder"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Auf dem Telefon sind keine Bilder verfügbar."</string>
<string name="attachToContact" msgid="8820530304406066714">"Kontaktsymbol"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Name des benutzerdef. Labels"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Anzeigeoptionen"</string>
<string name="displayGroups" msgid="2278964020773993336">"Anzeigeoptionen"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Sync-Gruppen bearb."</string>
- <string name="importFromSim" msgid="8383900146531125319">"Kontakte importieren"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Anrufe direkt an Mailbox senden"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Anrufe werden direkt an Mailbox gesendet"</string>
<string name="default_ringtone" msgid="9099988849649827972">"Standard"</string>
- <string name="addPicture" msgid="1594679312161537678">"Symbol hinzufügen"</string>
<string name="changePicture" msgid="2943329047610967714">"Symbol ändern"</string>
<string name="removePicture" msgid="3041230993155966350">"Symbol entfernen"</string>
<string name="noContacts" msgid="8579310973261953559">"Keine Kontakte"</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Keine passenden Kontakte gefunden"</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Keine Kontakte mit Telefonnummern"</string>
- <string name="noFavorites" msgid="812766386743315815">"Keine Favoriten"</string>
- <string name="select_group_title" msgid="7955698611959835612">"Gruppen"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Ihre Gruppe \"<xliff:g id="GROUPNAME">%s</xliff:g>\" ist leer."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Alle Kontakte"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Nur Kontakte mit Telefon"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Nur Kontakte mit Telefonnummern anzeigen"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Kontakte zum Anzeigen auswählen"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> Kontakte, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> mit Telefon"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Alle Kontakte synchronisieren"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Meine Kontakte"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Kontakte mit Telefonnummern"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"In Android markiert"</string>
<string name="savingContact" msgid="4075751076741924939">"Kontakt wird gespeichert..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Anzeigeoptionen werden gespeichert..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Kontakt erstellt"</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Kontakt gespeichert"</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Fehler, Kontaktänderungen konnten nicht gespeichert werden."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Rufnummer"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Telefonnummern"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Textnachricht senden"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"E-Mail senden"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"E-Mail-Adressen"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Per Chat kontaktieren"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Chat-Adressen"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Adresse in Maps"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Postanschrift"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organisationen"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Gruppen"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Mehr Informationen"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Sonstige Optionen"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Mehr"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"1 Kontakt mit Telefonnummer wird angezeigt."</item>
<item quantity="other" msgid="6133262880804110289">"Zeigt <xliff:g id="COUNT">%d</xliff:g> Kontakte mit Telefonnummern an"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"<xliff:g id="COUNT">%d</xliff:g> Kontakte gefunden"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Kein Kontakt gefunden"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Sozial"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 Kontakt"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> Kontakte"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Kontakte"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriten"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Aus Anrufliste entfernen"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Anrufliste löschen"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Anrufliste ist leer"</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Anrufprotokoll löschen"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Möchten Sie das Anrufprotokoll wirklich löschen?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Mailbox"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Nummer wählen"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Ladevorgang von SIM-Karte läuft..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakte auf SIM-Karte"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Synchronisieren Sie Ihre Google-Kontakte!"</font>" "\n"Nach der Synchronisierung stehen Ihnen Ihre Kontakte überall zur Verfügung."</string>
- <string name="noContactsHelpText" msgid="6788487368878712350">"Es können keine Kontakte angezeigt werden."\n\n"Tippen Sie zum Hinzufügen von Kontakten auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten hinzuzufügen oder zu konfigurieren, die mit dem Telefon synchronisiert werden können."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen."\n</li>\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>\n</li></string>
- <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Es können keine Kontakte angezeigt werden. Wenn Sie gerade ein Konto hinzugefügt haben, kann es einige Minuten dauern, bis die Kontakte synchronisiert sind."\n\n"Drücken Sie zum Hinzufügen von Kontakten auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten hinzuzufügen oder zu konfigurieren, die mit dem Telefon synchronisiert werden können."\n" "</li>\n<li><font fgcolor="#ffffffff"><b>"Anzeigeoptionen"</b></font>", um zu ändern, welche Kontakte angezeigt werden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Es können keine Kontakte angezeigt werden."\n\n"Tippen Sie zum Hinzufügen von Kontakten auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten hinzuzufügen oder zu konfigurieren, die mit dem Telefon synchronisiert werden können."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen"\n</li>\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Es können keine Kontakte angezeigt werden. Wenn Sie gerade ein Konto hinzugefügt haben, kann es einige Minuten dauern, bis die Kontakte synchronisiert sind."\n\n"Tippen Sie zum Hinzufügen von Kontakten auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten hinzuzufügen oder zu konfigurieren, die mit dem Telefon synchronisiert werden können."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Anzeigeoptionen"</b></font>", um zu ändern, welche Kontakte angezeigt werden"\n</li>\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>\n</li></string>
- <string name="noFavoritesHelpText" msgid="3744655776704833277">"Sie haben keine Favoriten."\n\n"So fügen Sie einen Kontakt zu Ihrer Favoritenliste hinzu:"\n\n" "<li>"Tippen Sie auf die Registerkarte "<b>"Kontakte"</b>"."\n</li>" "\n<li>"Tippen Sie auf den Kontakt, den Sie zu Ihren Favoriten hinzufügen möchten."\n</li>" "\n<li>"Tippen Sie auf die Markierung neben dem Kontaktnamen."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Zu synchronisierende Gruppen auswählen"</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Sie haben keine Kontakte. Wenn Sie gerade ein Konto hinzugefügt haben, kann die Synchronisierung der Kontakte einige Minuten dauern."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Sie haben keine Kontakte."</string>
+ <string name="noContactsHelpText" msgid="6788487368878712350">"Es sind keine Kontakte vorhanden."\n\n"Drücken Sie zum Hinzufügen von Kontakten die "<font fgcolor="#ffffffff"><b>"Menütaste"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten, die Sie mit dem Telefon synchronisieren möchten, hinzuzufügen oder zu konfigurieren."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen."\n</li>\n<li><font fgcolor="#ffffffff"><b>"Importieren/Exportieren"</b></font>\n</li></string>
+ <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Es sind keine Kontakte vorhanden. Wenn Sie gerade ein Konto hinzugefügt haben, kann es einige Minuten dauern, bis die Kontakte synchronisiert sind."\n\n"Drücken Sie zum Hinzufügen von Kontakten die "<font fgcolor="#ffffffff"><b>"Menütaste"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten, die Sie mit dem Telefon synchronisieren möchten, hinzuzufügen oder zu konfigurieren."\n" "</li>\n<li><font fgcolor="#ffffffff"><b>"Anzeigeoptionen"</b></font>", um zu ändern, welche Kontakte angezeigt werden."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importieren/Exportieren"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Es sind keine Kontakte vorhanden."\n\n"Drücken Sie zum Hinzufügen von Kontakten die "<font fgcolor="#ffffffff"><b>"Menütaste"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten, die Sie mit dem Telefon synchronisieren möchten, hinzuzufügen oder zu konfigurieren."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen."\n</li>\n<li><font fgcolor="#ffffffff"><b>"Importieren/Exportieren"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Es sind keine Kontakte vorhanden. Wenn Sie gerade ein Konto hinzugefügt haben, kann es einige Minuten dauern, bis die Kontakte synchronisiert sind."\n\n"Drücken Sie zum Hinzufügen von Kontakten die "<font fgcolor="#ffffffff"><b>"Menütaste"</b></font>" und tippen Sie anschließend auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto mit Kontakten, die Sie mit dem Telefon synchronisieren möchten, hinzuzufügen oder zu konfigurieren."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Anzeigeoptionen"</b></font>", um zu ändern, welche Kontakte angezeigt werden."\n</li>\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen neuen Kontakt von Grund auf zu erstellen."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importieren/Exportieren"</b></font>\n</li></string>
+ <string name="noFavoritesHelpText" msgid="3744655776704833277">"Es sind keine Favoriten vorhanden."\n\n"So fügen Sie einen Kontakt zu Ihrer Favoritenliste hinzu:"\n\n" "<li>"Tippen Sie auf den Tab "<b>"Kontakte"</b>"."\n</li>" "\n<li>"Tippen Sie auf den Kontakt, den Sie zu Ihren Favoriten hinzufügen möchten."\n</li>" "\n<li>"Tippen Sie auf die Markierung neben dem Kontaktnamen."\n</li></string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Alle Kontakte"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Markiert"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Nummern"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Anruf hinzufügen"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Anrufdetails"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Details für den angeforderten Anruf konnten nicht gelesen werden."</string>
- <string name="call_type" msgid="3213526349444862087">"Typ"</string>
<string name="type_incoming" msgid="6502076603836088532">"Eingehender Anruf"</string>
<string name="type_outgoing" msgid="343108709599392641">"Ausgehender Anruf"</string>
<string name="type_missed" msgid="2720502601640509542">"Verpasster Anruf"</string>
- <string name="call_time" msgid="5805575214626630975">"Zeit"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Dauer"</string>
- <string name="header_actions" msgid="229583643365836321">"Aktionen"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Klingelton: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Weitere Elemente hinzufügen"</string>
- <string name="actionCall" msgid="695145166039381504">"<xliff:g id="TYPE">%s</xliff:g> anrufen"</string>
- <string name="actionEmail" msgid="3870371552333656807">"E-Mail an <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Textnachricht an <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chat mit <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"<xliff:g id="TYPE">%s</xliff:g>-Adresse anzeigen"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Eingehende Anrufe"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Wird direkt an Mailbox weitergeleitet"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Eingestellt auf <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> Min. <xliff:g id="SECONDS">%s</xliff:g> Sek."</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Häufig angerufen"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> Minuten, <xliff:g id="SECONDS">%2$s</xliff:g> Sekunden"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Häufig kontaktiert"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Kontakt hinzufügen"</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="all_tab_label" msgid="4003124364397916826">"Alle"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"Markierung"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"Pfund"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"Mailbox"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"wählen"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"Rücktaste"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"Zu wählende Nummer"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"Kontaktbild"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Keine SD-Karte"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Keine SD-Karte gefunden"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"vCard wird gesucht."</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Aus welcher Quelle möchten Sie Kontakte importieren?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Von SIM-Karte importieren"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Von SD-Karte importieren"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"An SD-Karte exportieren"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Sichtbare Kontakte freigeben"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Eine VCard-Datei importieren"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Mehrere VCard-Dateien importieren"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Alle VCard-Dateien importieren"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Die vCard konnte aus einem unbekannten Grund nicht geparst werden."</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Beim Parsen der vCard ist ein Fehler aufgetreten. Obwohl die vCard anscheinend ein gültiges Format aufweist, wird sie von der aktuellen Implementierung nicht unterstützt."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Keine VCard-Datei auf der SD-Karte gefunden"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Es wurde kein gültiger vCard-Eintrag für Ihre Auswahl gefunden."</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Fehler beim Import einer oder mehrerer Dateien (%s)"</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Unbekannter Fehler"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"vCard-Datei auswählen"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Wählen Sie eine vCard-Datei für den Import aus."</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"vCard wird gelesen."</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"vCard-Dateien werden gelesen."</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"vCard-Daten werden importiert."</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Fehler beim Lesen der vCard-Daten"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"vCard konnte nicht gelesen werden."\n"Fehlerursache: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%s</xliff:g> Kontakten"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%s</xliff:g> Dateien"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Alle Kontakte"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Lokal gespeicherte Kontakte"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Kontakte exportieren"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> Kontakten"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> Dateien"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Export bestätigen"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Soll Ihre Kontaktliste wirklich an \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\" exportiert werden?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Fehler beim Exportieren von Kontaktdaten"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Es ist kein exportierbarer Kontakt vorhanden"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Zu viele vCard-Dateien auf der SD-Karte"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Erforderlicher Dateiname ist zu lang (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Zielverzeichnis \"<xliff:g id="DIR_NAME">%s</xliff:g>\" kann nicht geöffnet oder erstellt werden."</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktdaten werden exportiert."</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Kontaktdaten werden in \"<xliff:g id="FILE_NAME">%s</xliff:g>\" exportiert."</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Exportprogramm konnte nicht initialisiert werden: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Fehler beim Exportieren: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Fehler bei der Ermittlung von Datenbank-Informationen"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Es ist kein exportierbarer Kontakt vorhanden. Möglicherweise können Sie nicht exportierbare Daten auswählen."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Es ist kein exportierbarer Kontakt vorhanden. Falls sich Kontakte auf Ihrem Telefon befinden, ist das Exportieren der Kontakte möglicherweise durch einen Datenanbieter gesperrt."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Das Programm zum Erstellen der vCard wurde nicht richtig initialisiert."</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" konnte nicht geöffnet werden: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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 Ihrer Kontakte"</string>
+ <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<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="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> Kontakten"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Namen meiner Kontakte"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2 Sekunden Pause hinzufügen"</string>
<string name="add_wait" msgid="3360818652790319634">"Warten hinzufügen"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Wählen"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Anruf bei"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Textnachricht schreiben an"</string>
<string name="make_primary" msgid="5829291915305113983">"Diese Auswahl speichern"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Alle Kontakte"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"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="account_phone" msgid="4025734638492419713">"Nur Telefon (nicht synchronisiert)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Anzeigename"</string>
<string name="call_custom" msgid="7756571794763171802">"<xliff:g id="CUSTOM">%s</xliff:g> anrufen"</string>
<string name="call_home" msgid="1990519474420545392">"Anruf (privat)"</string>
<string name="call_mobile" msgid="7502236805487609178">"Anruf (mobil)"</string>
@@ -342,13 +287,13 @@
<string name="call_fax_work" msgid="7467763592359059243">"Anruf (Fax, Arbeit)"</string>
<string name="call_fax_home" msgid="8342175628887571876">"Faxanruf (privat)"</string>
<string name="call_pager" msgid="9003902812293983281">"Anruf (Pager)"</string>
- <string name="call_other" msgid="5605584621798108205">"Anruf (sonstige)"</string>
+ <string name="call_other" msgid="8563753966926932052">"Anruf bei"</string>
<string name="call_callback" msgid="1910165691349426858">"Rückrufnummer anrufen"</string>
<string name="call_car" msgid="3280537320306436445">"Anruf (Auto)"</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="7777261153532968503">"Andere Faxnummer anrufen"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Anruf an Fax"</string>
<string name="call_radio" msgid="8296755876398357063">"Anruf (Mobilfunk)"</string>
<string name="call_telex" msgid="2223170774548648114">"Telexnummer anrufen"</string>
<string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD anrufen"</string>
@@ -363,13 +308,13 @@
<string name="sms_fax_work" msgid="8028189067816907075">"Text (Fax, Arbeit)"</string>
<string name="sms_fax_home" msgid="9204042076306809634">"Text (Fax, privat)"</string>
<string name="sms_pager" msgid="7730404569637015192">"Text-Pager"</string>
- <string name="sms_other" msgid="5131921487474531617">"Text (sonstige)"</string>
+ <string name="sms_other" msgid="806127844607642331">"Textnachricht an"</string>
<string name="sms_callback" msgid="5004824430094288752">"Textnachricht 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">"Textnachricht an ISDN"</string>
<string name="sms_main" msgid="8621625784504541679">"Textnachricht an Hauptnummer"</string>
- <string name="sms_other_fax" msgid="3930666870074006114">"Textnachricht an andere Faxnummer"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Textnachricht an Fax"</string>
<string name="sms_radio" msgid="3329166673433967820">"Text (Mobilfunk)"</string>
<string name="sms_telex" msgid="9034802430065267848">"Textnachricht an Telex"</string>
<string name="sms_tty_tdd" msgid="6782284969132531532">"Textnachricht an TTY/TDD"</string>
@@ -380,12 +325,12 @@
<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 (Arbeit)"</string>
- <string name="email_other" msgid="8093933498541795832">"E-Mail (sonstige)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-Mail an"</string>
<string name="email_custom" msgid="7548003991586214105">"E-Mail <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-Mail"</string>
<string name="map_home" msgid="1243547733423343982">"Privatadresse anzeigen"</string>
<string name="map_work" msgid="1360474076921878088">"Arbeitsadresse anzeigen"</string>
- <string name="map_other" msgid="5560707927535653892">"Sonstige Adressen anzeigen"</string>
+ <string name="map_other" msgid="3817820803587012641">"Adresse anzeigen"</string>
<string name="map_custom" msgid="6184363799976265281">"<xliff:g id="CUSTOM">%s</xliff:g>-Adresse anzeigen"</string>
<string name="chat_aim" msgid="2588492205291249142">"Chat über AIM"</string>
<string name="chat_msn" msgid="8041633440091073484">"Chat über Windows Live"</string>
@@ -400,7 +345,7 @@
<string name="postal_pobox" msgid="4431938829180269821">"Postfach"</string>
<string name="postal_neighborhood" msgid="1450783874558956739">"Nachbarschaft"</string>
<string name="postal_city" msgid="6597491300084895548">"Stadt"</string>
- <string name="postal_region" msgid="6045263193478437672">"Staat"</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="name_given" msgid="1687286314106019813">"Vorname"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Phonetischer Vorname"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Phonetischer zweiter Vorname"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Phonetischer Nachname"</string>
- <string name="split_label" msgid="8262112659919449087">"Teilen"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Aus diesen Daten einen eigenen Kontakt erstellen"</string>
- <string name="account_name_format" msgid="4421123930035299208">"Von <xliff:g id="SOURCE">%1$s</xliff:g>-Konto: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-Kontakt"</string>
<string name="from_account_format" msgid="687567483928582084">"von <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Dieses Foto verwenden"</string>
<string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g>-Kontaktinformationen können auf diesem Gerät nicht bearbeitet werden."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Keine Zusatzinformationen zu diesem Kontakt"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Liste sortieren nach"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Vorname"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Nachname"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Kontaktnamen-Anzeige:"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Vorname zuerst"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Nachname zuerst"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Kontakte durchsuchen"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"In allen Kontakten suchen"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Foto machen"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Foto aus Galerie auswählen"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Die Kontaktliste wird an die geänderte Sprache angepasst."\n\n"Bitte warten..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Die Kontaktliste wird aktualisiert."\n\n"Bitte warten..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Kontakte werden gerade aktualisiert. "\n\n"Das Upgrade erfordert etwa <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g>MB des internen Telefonspeichers."\n\n"Wählen Sie eine der folgenden Optionen:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Einige Anwendungen deinstallieren"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Upgrade wiederholen"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Suchergebnisse für: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Suche..."</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 099912d..ec645a5 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Επαφές"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Κλήση <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Προσθήκη στα αγαπημένα"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Κατάργηση από τα αγαπημένα"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Εμφάνιση γραμμωτού κώδικα"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Επεξεργασία επαφής"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Διαγραφή επαφής"</string>
<string name="menu_call" msgid="3992595586042260618">"Κλήση επαφής"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Ορισμός προεπιλεγμένου αριθμού"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Ορισμός διεύθυνσης ηλεκτρονικού ταχυδρομείου ως προεπιλογή"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Διαχωρισμός"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Διαχωρισμός επαφής"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Οι επαφές διαχωρίστηκαν"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Διαχωρισμός επαφής"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Είστε βέβαιοι ότι θέλετε να διαχωρίσετε αυτή τη μία επαφή σε πολλές επαφές: μία για κάθε σύνολο στοιχείων επικοινωνίας που προστέθηκε σε αυτήν;"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Σύνδεση"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Εμφάνιση πηγών"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Απόκρυψη πηγών"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Σύνδεση επαφής"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Ένωση επαφών"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Επιλέξτε την επαφή που θέλετε να ενώσετε με το χρήστη <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Εμφάνιση όλων των επαφών"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Επαναφορά"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Επεξεργασία επαφής"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Νέα επαφή"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Περισσότερες πληροφορίες"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Φωνητική"</string>
<string name="label_notes" msgid="8337354953278341042">"Σημειώσεις"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Ήχος κλήσης"</string>
- <string name="label_groups" msgid="7304551384542859026">"Ομάδες"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Επεξεργασία ομάδων"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Όνομα και επίθετο"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Φωνητικό όνομα"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Εταιρεία"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Θέση"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Όνομα άμεσων μηνυμάτων (IM)"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Η σημείωσή μου"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Αριθμός τηλεφώνου"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Ταχυδρομική διεύθυνση"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Προβολή ομάδας"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Τίτλος"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Η επαφή δεν υπάρχει."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Δημιουργία νέας επαφής"</string>
<string name="selectLabel" msgid="4255424123394910733">"Επιλογή ετικέτας"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Ανταλ.άμεσων μην.(IM)"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Ταχυδρομική διεύθυνση"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Άλλο"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Εταιρεία"</item>
<item msgid="7196592230748086755">"Σημείωση"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Δεν υπάρχουν εικόνες"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Δεν υπάρχουν διαθέσιμες εικόνες στο τηλέφωνο."</string>
<string name="attachToContact" msgid="8820530304406066714">"Εικονίδιο επαφής"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Προσαρμοσμένο όνομα ετικέτας"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Επιλογές προβολής"</string>
<string name="displayGroups" msgid="2278964020773993336">"Επιλογές προβολής"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Επεξ. ομάδ. συγχρ."</string>
- <string name="importFromSim" msgid="8383900146531125319">"Εισαγωγή επαφών"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Αποστολή κλήσεων απευθείας στον αυτόματο τηλεφωνητή"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Οι κλήσεις στέλνονται απευθείας στον αυτόματο τηλεφωνητή."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Προεπιλογή"</string>
- <string name="addPicture" msgid="1594679312161537678">"Προσθήκη εικονιδίου"</string>
<string name="changePicture" msgid="2943329047610967714">"Αλλαγή εικονιδίου"</string>
<string name="removePicture" msgid="3041230993155966350">"Κατάργηση εικονιδίου"</string>
<string name="noContacts" msgid="8579310973261953559">"Δεν υπάρχουν επαφές."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Δεν βρέθηκαν επαφές που να αντιστοιχούν."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Δεν υπάρχουν επαφές με αριθμούς τηλεφώνου."</string>
- <string name="noFavorites" msgid="812766386743315815">"Δεν υπάρχουν αγαπημένα."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Ομάδες"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Η ομάδα σας \"<xliff:g id="GROUPNAME">%s</xliff:g>\" είναι κενή."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Όλες οι επαφές"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Μόνο επαφές με τηλέφωνα"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Να προβάλλονται μόνο οι επαφές που διαθέτουν αριθμό τηλεφώνου"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Επιλογή επαφών προς προβολή"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> επαφές, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> με τηλέφωνα"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Συγχρονισμός όλων των επαφών"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Οι επαφές μου"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Επαφές με αριθμούς τηλεφώνου"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Με αστέρι στο Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Αποθήκευση επαφής…"</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Αποθήκευση επιλογών προβολής…"</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Η επαφή δημιουργήθηκε."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Η επαφή αποθηκεύτηκε."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Σφάλμα, δεν ήταν δυνατή η αποθήκευση αλλαγών επαφής."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Αριθμός κλήσης"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Αριθμοί τηλεφώνου"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Αποστολή μηνύματος κειμένου"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Διευθ.ηλεκτρ.ταχυδρ."</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Αποστολή άμεσου μηνύματος"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Διευθύνσεις συζήτησης"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Διεύθυνση στον χάρτη"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Διευθύνσεις ταχυδρομείου"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Εταιρείες"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Ομάδες"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Άλλες πληροφορίες"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Άλλες επιλογές"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Περισσότερα"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Εμφάνιση 1 επαφής με αριθμό τηλεφώνου"</item>
<item quantity="other" msgid="6133262880804110289">"Εμφάνιση <xliff:g id="COUNT">%d</xliff:g> επαφών με αριθμούς τηλεφώνων"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g> επαφές"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Δεν βρέθηκε η επαφή"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Κοινωνικά"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 επαφή"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> επαφές"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Επαφές"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Αγαπ."</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Τηλέφωνο"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Κατάργηση από το αρχείο καταγραφής κλήσεων"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Εκκαθάριση αρχείου καταγραφής κλήσεων"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Το αρχείο καταγραφής κλήσεων είναι κενό."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Εκκαθάριση αρχείου καταγραφής κλήσεων"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Είστε βέβαιοι ότι θέλετε να γίνει εκκαθάριση του αρχείου καταγραφής κλήσεων;"</string>
<string name="imei" msgid="3045126336951684285">"Αριθμός ΙΜΕΙ"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Αυτόματος τηλεφωνητής"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Καλέστε έναν αρ. για προσθ. μιας κλήσ."</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Φόρτωση από κάρτα SIM…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Επαφές στην κάρτα SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Συγχρονίστε τις επαφές σας Google!"</font>" "\n"Μετά το συγχρονισμό στο τηλέφωνό σας, οι επαφές σας θα είναι διαθέσιμες όπου κι αν πάτε.."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Δεν υπάρχουν επαφές για προβολή. (Εάν προσθέσατε τώρα ένα λογαριασμό, ο συγχρονισμός των επαφών μπορεί να καθυστερήσει μερικά λεπτά.)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Δεν υπάρχουν επαφές για προβολή."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Δεν έχετε επαφές προς προβολή."\n\n"Για προσθήκη επαφών, πατήστε "<font fgcolor="#ffffffff"><b>"Μενού"</b></font>" και αγγίξτε:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Λογαριασμοί"</b></font>" για προσθήκη ή διαμόρφωση λογαριασμού με επαφές που μπορείτε να συγχρονίσετε στο τηλέφωνο"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Νέα επαφή"</b></font>" για δημιουργία νέας επαφής από το μηδέν"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Εισαγωγή/Εξαγωγή"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Δεν έχετε επαφές προς προβολή. (Αν προσθέσατε κάποιον λογαριασμό μόλις τώρα, θα χρειαστούν λίγα λεπτά έως ότου γίνει ο συγχρονισμός.)"\n\n"Για την προσθήκη επαφών, πατήστε "<font fgcolor="#ffffffff"><b>"Μενού"</b></font>" και αγγίξτε την επιλογή:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Λογαριασμοί"</b></font>" για την προσθήκη ή διαμόρφωση λογαριασμού με επαφές τις οποίες μπορείτε να συγχρονίσετε στο τηλέφωνο"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Επιλογές προβολής"</b></font>" για να αλλάξετε τις επαφές που είναι ορατές"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Νέα επαφή"</b></font>" για δημιουργία νέας επαφής από το μηδέν"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Εισαγωγή/Εξαγωγή"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Δεν έχετε επαφές προς προβολή."\n\n"Για προσθήκη επαφών, πατήστε "<font fgcolor="#ffffffff"><b>"Μενού"</b></font>" και αγγίξτε την επιλογή:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Λογαριασμοί"</b></font>" για προσθήκη ή διαμόρφωση λογαριασμού με επαφές που μπορείτε να συγχρονίσετε στο τηλέφωνο"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Νέα επαφή"</b></font>" για δημιουργία νέας επαφής από το μηδέν"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Εισαγωγή/Εξαγωγή"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Δεν έχετε επαφές προς προβολή. (Αν προσθέσατε κάποιον λογαριασμό μόλις τώρα, θα χρειαστούν λίγα λεπτά έως ότου γίνει ο συγχρονισμός.)"\n\n"Για την προσθήκη επαφών, πατήστε "<font fgcolor="#ffffffff"><b>"Μενού"</b></font>" και αγγίξτε την επιλογή:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Λογαριασμοί"</b></font>" για την προσθήκη ή διαμόρφωση λογαριασμού με επαφές τις οποίες μπορείτε να συγχρονίσετε στο τηλέφωνο"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Προβολή επιλογών"</b></font>" για να αλλάξετε τις επαφές που είναι ορατές"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Νέα επαφή"</b></font>" για δημιουργία νέας επαφής από το μηδέν"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Εισαγωγή/Εξαγωγή"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Δεν έχετε αγαπημένα."\n\n"Για προσθήκη επαφής στη λίστα των αγαπημένων σας:"\n\n" "<li>"Αγγίξτε την καρτέλα "<b>"Επαφές"</b>\n</li>" "\n<li>"Αγγίξτε το όνομα της επαφής που θέλετε να προσθέσετε στα αγαπημένα σας"\n</li>" "\n<li>"Αγγίξτε το αστέρι πλάι στο όνομα της επαφής"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Επιλογή ομάδων για συγχρονισμό"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Όλες οι επαφές"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Με αστέρι"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Τηλέφωνα"</string>
@@ -209,31 +171,17 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Προσθήκη κλήσης"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Λεπτομέρειες κλήσης"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Δεν είναι δυνατή η ανάγνωση λεπτομερειών της κλήσης που ζητήθηκε."</string>
- <string name="call_type" msgid="3213526349444862087">"Τύπος"</string>
<string name="type_incoming" msgid="6502076603836088532">"Εισερχόμενη κλήση"</string>
<string name="type_outgoing" msgid="343108709599392641">"Εξερχόμενη κλήση"</string>
<string name="type_missed" msgid="2720502601640509542">"Αναπάντητη κλήση"</string>
- <string name="call_time" msgid="5805575214626630975">"Ώρα"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Διάρκεια"</string>
- <string name="header_actions" msgid="229583643365836321">"Ενέργειες"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Ήχος κλήσης: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Προσθήκη περισσότερων στοιχείων"</string>
- <string name="actionCall" msgid="695145166039381504">"Κλήση <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Αποστολή μηνύματος κειμένου προς <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Συζήτηση μέσω <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Προβολή διεύθυνσης <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Εισερχόμενες κλήσεις"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Θα σταλεί απευθείας στον αυτόματο τηλεφωνητή"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Ορισμός σε <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
<string name="callBack" msgid="5498224409038809224">"Επανάκληση"</string>
<string name="callAgain" msgid="3197312117049874778">"Επανάληψη κλήσης"</string>
<string name="returnCall" msgid="8171961914203617813">"Επιστροφή κλήσης"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> λεπτά <xliff:g id="SECONDS">%s</xliff:g> δευτερόλεπτα"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Συχνές κλήσεις"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> λεπτά <xliff:g id="SECONDS">%2$s</xliff:g> δευτερόλεπτα"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Επαφές με τις οποίες έχετε συχνή επικοινωνία"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Προσθήκη επαφής"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Προσθήκη του \"<xliff:g id="EMAIL">%s</xliff:g>\" στις επαφές;"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Προσθήκη του \"<xliff:g id="EMAIL">%s</xliff:g>\" στις επαφές?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Όλα"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"ένα"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"δύο"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"αστέρι"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"μηδέν"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"σύμβολο δίεσης"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"αυτόματος τηλεφωνητής"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"κλήση"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"αριθμός για κλήση"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"φωτογραφία επαφής"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"μείον"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"συν"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Δεν υπάρχει κάρτα SD"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Δεν ανιχνεύθηκε κάρτα SD"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Αναζήτηση κάρτας vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Από πού θέλετε να εισάγετε επαφές;"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Εισαγωγή από κάρτα SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Εισαγωγή από κάρτα SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Εξαγωγή σε κάρτα SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Κοινή χρήση ορατών επαφών"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Εισαγωγή ενός αρχείου VCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Εισαγωγή πολλαπλών αρχείων vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Εισαγωγή όλων των αρχείων vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Η ανάλυση της κάρτας vCard απέτυχε εξαιτίας μη αναμενόμενου συμβάντος"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Αν και το VCard φαίνεται να βρίσκεται σε έγκυρη μορφή, η ανάλυσή του απέτυχε, εφόσον η τρέχουσα εφαρμογή δεν το υποστηρίζει"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Δεν βρέθηκε αρχείο VCard στην κάρτα SD"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Δεν βρέθηκε έγκυρη καταχώρηση VCard για την επιλογή σας"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Η εισαγωγή ενός ή περισσοτέρων αρχείων απέτυχε (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Άγνωστο σφάλμα"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Επιλογή αρχείου vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Επιλέξτε ένα αρχείο vCard για εισαγωγή"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Ανάγνωση vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Ανάγνωση αρχείου(ων) vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Εισαγωγή δεδομένων vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Η ανάγνωση των δεδομένων vCard απέτυχε"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Δεν ήταν δυνατή η ανάγνωση της κάρτας vCard."\n"Αίτια αποτυχίας: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%s</xliff:g> επαφές"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%s</xliff:g> αρχεία"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Όλες οι επαφές"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Τοπικά αποθηκευμένες επαφές"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Εξαγωγή επαφών"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> επαφές"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> αρχεία"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Επιβεβαίωση\nεξαγωγής"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Είστε σίγουροι ότι θέλετε να εξαγάγετε τη λίστα των επαφών σας στο \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\";"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Αποτυχία εξαγωγής δεδομένων επαφής"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Δεν υπάρχει επαφή με δυνατότητα εξαγωγής"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Υπερβολικά μεγάλος όγκος αρχείων VCard στην κάρτα SD"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Το απαιτούμενο όνομα αρχείου είναι υπερβολικά μεγάλο (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Δεν είναι δυνατό το άνοιγμα ή η δημιουργία του καταλόγου προορισμού\"<xliff:g id="DIR_NAME">%s</xliff:g>\""</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Εξαγωγή δεδομένων επαφών"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Εξαγωγή δεδομένων επαφών προς \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Δεν ήταν δυνατή η εκκίνηση της εξαγωγής: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Προέκυψε σφάλμα κατά την εξαγωγή: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Αποτυχία λήψης πληροφοριών βάσης δεδομένων"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Δεν υπάρχει επαφή με δυνατότητα εξαγωγής. Ενδέχεται να επιλέξατε μη εξαγώγιμα δεδομένα"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Δεν υπάρχει επαφή με δυνατότητα εξαγωγής. Αν έχετε επαφές στο τηλέφωνό σας, ενδέχεται να μην επιτρέπεται η εξαγωγή όλων των επαφών εκτός του τηλεφώνου από κάποιον πάροχο δεδομένων."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Δεν έχει γίνει σωστή εκκίνηση του προγράμματος σύνθεσης της vCard"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Δεν ήταν δυνατό το άνοιγμα του \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"Δεν ήταν δυνατό το άνοιγμα του \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> επαφές"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Ονόματα ων επαφών σας"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Προσθήκη παύσης 2 δευτερολέπτων"</string>
<string name="add_wait" msgid="3360818652790319634">"Προσθήκη αναμονής"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Κλήση"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Κλήση με τη χρήση"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Αποστολή κειμένου με χρήση"</string>
<string name="make_primary" msgid="5829291915305113983">"Διατήρηση αυτής της ρύθμισης"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Όλες οι επαφές"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Η κατάργηση της ομάδας \"<xliff:g id="GROUP">%s</xliff:g>\" από τον συγχρονισμό θα καταργήσει επίσης και τις επαφές χωρίς ομαδοποίηση από τον συγχρονισμό."</string>
<string name="account_phone" msgid="4025734638492419713">"Μόνο στο τηλέφωνο (Χωρίς συγχρονισμό)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Προβολή ονόματος"</string>
<string name="call_custom" msgid="7756571794763171802">"Κλήση <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Κλήση οικίας"</string>
<string name="call_mobile" msgid="7502236805487609178">"Κλήση κινητής συσκευής"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Κλήση άλλο"</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="7777261153532968503">"Κλήση άλλου φαξ"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"Αποστολή μηνύματος κειμένου προς άλλο"</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="3930666870074006114">"Αποστολή μηνύματος κειμένου προς άλλο φαξ"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς άλλο"</string>
+ <string name="email_other" msgid="3454004077967657109">"Μήνυμα ηλεκτρονικού ταχυδρομείου"</string>
<string name="email_custom" msgid="7548003991586214105">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
<string name="map_home" msgid="1243547733423343982">"Προβολή διεύθυνσης οικίας"</string>
<string name="map_work" msgid="1360474076921878088">"Προβολή διεύθυνσης εργασίας"</string>
- <string name="map_other" msgid="5560707927535653892">"Προβολή άλλων διευθύνσεων"</string>
+ <string name="map_other" msgid="3817820803587012641">"Προβολή διεύθυνσης"</string>
<string name="map_custom" msgid="6184363799976265281">"Προβολή διεύθυνσης <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="chat_aim" msgid="2588492205291249142">"Συζήτηση μέσω AIM"</string>
<string name="chat_msn" msgid="8041633440091073484">"Συζήτηση μέσω Windows Live"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Φωνητική μορφή ονόματος"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Φωνητική γραφή ονόματος πατρός"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Φωνητική γραφή επιθέτου"</string>
- <string name="split_label" msgid="8262112659919449087">"Διαχωρισμός"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Δημιουργήστε νέα επαφή για αυτά τα δεδομένα."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Από λογαριασμό στο <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> επαφή"</string>
<string name="from_account_format" msgid="687567483928582084">"από <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Χρήση αυτής της φωτογραφίας"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Τα στοιχεία επικοινωνίας της επαφής <xliff:g id="SOURCE">%1$s</xliff:g> δεν μπορούν να υποβληθούν σε επεξεργασία σε αυτήν τη συσκευή."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Δεν υπάρχουν πρόσθετες πληροφορίες για αυτήν την επαφή"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Ταξινόμηση λίστας κατά"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Όνομα"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Επίθετο"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Προβολή ονομάτων επαφών ως"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Πρώτα το όνομα"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Πρώτα το επίθετο"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Αναζήτηση επαφών"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Αναζήτηση σε όλες τις επαφές"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Λήψη φωτογραφίας"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Επιλογή φωτογραφίας από τη συλλογή"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Η λίστα επαφών ενημερώνεται ώστε να αντικατοπτρίζει την αλλαγή γλώσσας."\n\n"Περιμένετε..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Γίνεται ενημέρωση της λίστας επαφών."\n\n"Περιμένετε..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Γίνεται αναβάθμιση των επαφών. "\n\n"Η διαδικασία αναβάθμισης απαιτεί περίπου <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g>Mb από τον εσωτερικό χώρο αποθήκευσης του τηλεφώνου."\n\n"Ορίστε μία από τις παρακάτω επιλογές:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Καταργήστε την εγκατάσταση ορισμένων εφαρμογών"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Επανάληψη αναβάθμισης"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Αποτελέσματα αναζήτησης για: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Αναζήτηση..."</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..05627d5
--- /dev/null
+++ b/res/values-en-rGB/strings.xml
@@ -0,0 +1,34 @@
+<?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.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+ <!-- 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">Surname</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">Surname</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">Surname first</string>
+</resources>
diff --git a/res/values-en-rUS/strings.xml b/res/values-en-rUS/strings.xml
new file mode 100644
index 0000000..e1d4184
--- /dev/null
+++ b/res/values-en-rUS/strings.xml
@@ -0,0 +1,34 @@
+<?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.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+ <!-- 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>
+
+ <!-- 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>
+
+ <!-- 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>
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index bae6b90..a2de529 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Contactos"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Agregar a favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eliminar de favoritos"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Mostrar código de barras"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Editar contacto"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Suprimir contacto"</string>
<string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Crear número predeterminado"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Crear correo electrónico predeterminado"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Separar"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Dividir contacto"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Contactos separados"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Separar contacto"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"¿Estás seguro de que deseas separar este contacto individual en varios contactos: uno para cada grupo de información de contacto que se unió a él?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Unirse"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Mostrar fuentes"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Ocultar fuentes"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Unirse al contacto"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unirse a contactos"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Selecciona el contacto al que quieras unirte con <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos los contactos"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Revertir"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Editar contacto"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Nuevo contacto"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Más información"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonético"</string>
<string name="label_notes" msgid="8337354953278341042">"Notas"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Tono de llamada"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupos"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Editar grupos"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Primero y último"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Nombre fonético"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Posición"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Nombre de MI"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Mi nota"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Número de teléfono"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Dirección de correo elec."</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Dirección postal"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Mostrar grupo"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"El contacto no existe."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear nuevo contacto"</string>
<string name="selectLabel" msgid="4255424123394910733">"Seleccionar etiqueta"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"Correo elec."</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Mensajería instantánea"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Dirección postal"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Otros"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organización"</item>
<item msgid="7196592230748086755">"Nota"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"No hay imágenes"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"No hay imágenes disponibles en el teléfono."</string>
<string name="attachToContact" msgid="8820530304406066714">"Ícono de contacto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nombre personalizado de etiqueta"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Mostrar opciones"</string>
<string name="displayGroups" msgid="2278964020773993336">"Mostrar opciones"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Editar grupos sincr."</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importar contactos"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar llamadas directamente al correo de voz"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Las llamadas se envían directamente a un correo de voz."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Predeterminado"</string>
- <string name="addPicture" msgid="1594679312161537678">"Agregar ícono"</string>
<string name="changePicture" msgid="2943329047610967714">"Cambiar icono"</string>
<string name="removePicture" msgid="3041230993155966350">"Eliminar ícono"</string>
<string name="noContacts" msgid="8579310973261953559">"No hay contactos."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"No se encontraron contactos coincidentes."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"No hay contactos con números de teléfono."</string>
- <string name="noFavorites" msgid="812766386743315815">"No hay favoritos."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupos"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Tu grupo \"<xliff:g id="GROUPNAME">%s</xliff:g>\" está vacío."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Todos los contactos"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Sólo contactos con teléfonos"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Mostrar sólo contactos que posean números de teléfono"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Elige contactos para mostrar"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> contactos, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> con teléfonos"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Sincronizar todos los contactos"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Mis contactos"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Contactos con números de teléfono"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Marcado con asterisco en Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Guardando contacto..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Guardando opciones de visualización..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Contacto creado."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Contacto guardado."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Error, no se han podido guardar las modificaciones de contacto."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Marcar número"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Números de teléfono"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Enviar texto"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Enviar correo electrónico"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Direcciones de correo electr."</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Enviar mensaje instantáneo"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Direcciones de chat"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Dirección del mapa"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Direcciones postales"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organizaciones"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupos"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Otra información"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Otras opciones"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Más"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Mostrando 1 contacto con el número de teléfono"</item>
<item quantity="other" msgid="6133262880804110289">"Se muestran <xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono."</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"Se encontraron <xliff:g id="COUNT">%d</xliff:g> contactos"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"No se ha encontrado este contacto."</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Social"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 contacto"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> contactos"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Contactos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Teléfono"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Eliminar del registro de llamadas"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Borrar registro de llamadas"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"El registro de llamadas está vacío."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Borrar registro de llamadas"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"¿Estás seguro de que deseas borrar el registro de llamadas?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Correo de voz"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Marcar para agreg."</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Cargando desde tarjeta SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contactos de tarjeta SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"¡Sincroniza tus contactos de Google!"</font>" "\n" Luego de sincronizar tu teléfono, tus contactos estarán disponibles para ti dondequiera que vayas."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta recientemente, la sincronización de los contactos puede demorar algunos minutos)."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"No tienes ningún contacto para mostrar."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"No tienes ningún contacto para mostrar."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar o configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar pocos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"No tienes ningún contacto para mostrar."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar o configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar pocos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"No tienes ningún favorito."\n\n"Para agregar un contacto a tu lista de favoritos:"\n\n" "<li>"toca la pestaña "<b>"Contactos"</b>" "\n</li>" "\n<li>"toca el contacto que deseas agregar a tus favoritos"\n</li>" "\n<li>"toca el asterisco situado junto al nombre del contacto"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Seleccionar grupos para sincronizar"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Todos los contactos"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Marcado con asterisco"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Teléfonos"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Agreg. Llam."</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalles de llamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"No se han podido leer los detalles de la llamada solicitada."</string>
- <string name="call_type" msgid="3213526349444862087">"Tipo"</string>
<string name="type_incoming" msgid="6502076603836088532">"Llamada entrante"</string>
<string name="type_outgoing" msgid="343108709599392641">"Llamada saliente"</string>
<string name="type_missed" msgid="2720502601640509542">"Llamada perdida"</string>
- <string name="call_time" msgid="5805575214626630975">"Hora"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Duración"</string>
- <string name="header_actions" msgid="229583643365836321">"Acciones"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Tono de llamada: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Agregar más elementos"</string>
- <string name="actionCall" msgid="695145166039381504">"Llamar a <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Correo electrónico <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Texto <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chat mediante <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Ver <xliff:g id="TYPE">%s</xliff:g> dirección"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Llamadas entrantes"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Se enviará directamente al correo de voz"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Configurado en <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> mins <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Llamado con frecuencia"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> mins <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Contactado con frecuencia"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Agregar contacto"</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="all_tab_label" msgid="4003124364397916826">"Todos"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"asterisco"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"cero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"buzón de voz"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"retroceso"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"número para marcar"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"negativo"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"más"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"No hay tarjeta SD"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"No se ha detectado ninguna tarjeta SD"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Buscando vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"¿De dónde quieres importar contactos?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar de la tarjeta SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importar de la tarjeta SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exportar a la tarjeta SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Compartir contactos visibles"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importar un archivo de vCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar múltiples archivos de vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos los archivos de vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"No se ha podido analizar vCard debido a un motivo inesperado"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"No se ha podido analizar vCard aunque el formato parece válido, ya que la implementación actual no lo admite"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"No se ha encontrado un archivo de vCard en la Tarjeta SD."</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"No se ha encontrado ninguna entrada válida de vCard para tu selección"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"No se pudieron importar uno o más archivos (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Error desconocido"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Seleccionar archivo de vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Selecciona un archivo de vCard para importar"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"Segmento <xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"Segmento <xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Leyendo vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Leyendo archivo(s) de vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importando datos de vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"No se han podido leer los datos de vCard"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"No se ha podido leer vCard."\n"Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> archivos"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Todos los contactos"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Contactos guardados localmente"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Exportar contactos"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contactos"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> archivos"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Confirmar exportación"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"¿Estás seguro de que deseas exportar tu lista de contactos a \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"No se han podido exportar los datos de contacto"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"No hay ningún contacto exportable"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Demasiados archivos de vCard en la tarjeta SD"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"El nombre de archivo requerido es demasiado largo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"No se ha podido abrir o crear el directorio de destino \"<xliff:g id="DIR_NAME">%s</xliff:g>\""</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contacto"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Exportando datos de contacto a \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"No se ha podido inicializar el exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Se produjo un error durante la exportación: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"No se ha podido obtener información de la base de datos"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"No hay ningún contacto exportable. Puedes elegir datos no exportables"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"No hay ningún contacto exportable. Si en realidad tienes contactos en tu teléfono, es posible que algún proveedor de datos prohíba la exportación de todos los contactos."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"El redactor de vCard no se ha inicializado correctamente"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"No se pudo abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"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="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contactos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Agregar pausa de 2 segundos"</string>
<string name="add_wait" msgid="3360818652790319634">"Agregar espera"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Marcar"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Llamar con"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Texto con"</string>
<string name="make_primary" msgid="5829291915305113983">"Recuerda esta opción"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Todos los contactos"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Al suprimir \"<xliff:g id="GROUP">%s</xliff:g>\" de sincronización también se suprimirá cualquier contacto no agrupado de la sincronización."</string>
<string name="account_phone" msgid="4025734638492419713">"Sólo telefónicamente (no sincronizado)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Mostrar el nombre"</string>
<string name="call_custom" msgid="7756571794763171802">"Llamar a <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Llamar al hogar"</string>
<string name="call_mobile" msgid="7502236805487609178">"Llamar al celular"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Llamar a otro"</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_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="7777261153532968503">"Llamar a otro fax"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"Enviar texto a otro"</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="3930666870074006114">"Enviar texto a otro fax"</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>
@@ -380,12 +325,12 @@
<string name="email_home" msgid="8573740658148184279">"Correo electrónico personal"</string>
<string name="email_mobile" msgid="2042889209787989814">"Correo electrónico celular"</string>
<string name="email_work" msgid="2807430017302722689">"Correo electrónico laboral"</string>
- <string name="email_other" msgid="8093933498541795832">"Correo electrónico otro"</string>
+ <string name="email_other" msgid="3454004077967657109">"Correo electrónico"</string>
<string name="email_custom" msgid="7548003991586214105">"Correo electrónico <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"Correo electrónico"</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="5560707927535653892">"Ver otra dirección"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ver dirección"</string>
<string name="map_custom" msgid="6184363799976265281">"Ver <xliff:g id="CUSTOM">%s</xliff:g> dirección"</string>
<string name="chat_aim" msgid="2588492205291249142">"Chat mediante AIM"</string>
<string name="chat_msn" msgid="8041633440091073484">"Chat mediante Windows Live"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Nombre de pila fonético"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Segundo nombre fonético"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Nombre familiar fonético"</string>
- <string name="split_label" msgid="8262112659919449087">"Dividir"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Transformar a estos datos en el contacto propio."</string>
- <string name="account_name_format" msgid="4421123930035299208">"De <xliff:g id="SOURCE">%1$s</xliff:g> la cuenta: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contacto"</string>
<string name="from_account_format" msgid="687567483928582084">"de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Usar esta foto"</string>
<string name="contact_read_only" msgid="1203216914575723978">"La información de <xliff:g id="SOURCE">%1$s</xliff:g> contactos no se puede editar en este dispositivo."</string>
<string name="no_contact_details" msgid="6754415338321837001">"No hay información adicional para este contacto."</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Ordenar listas por"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Nombre de pila"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Nombre familiar"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Ver nombres de contacto como"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Nombre de pila en primer lugar"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Nombre familiar en primer lugar"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Buscar contactos"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Buscar todos los contactos"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Tomar foto"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Seleccionar foto de la galería"</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="upgrade_in_progress" msgid="7530893673211750223">"La lista de contactos se está actualizando."\n\n" Espera..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"La actualización de los contactos está en proceso. "\n\n"El proceso de actualización requiere aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> Mb de almacenamiento interno en el teléfono."\n\n" Elije una de las siguientes opciones:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algunas aplicaciones"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Intentar actualizar nuevamente"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Resultados de búsqueda para: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Buscando..."</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 3852e80..d689638 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Contactos"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Añadir a \"Favoritos\""</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eliminar de \"Favoritos\""</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Mostrar código de barras"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Editar contacto"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Eliminar contacto"</string>
<string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Convertir en número predeterminado"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Establecer como dirección de correo electrónico predeterminada"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Dividir"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Desagrupar contacto"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Contactos divididos"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Dividir contacto"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"¿Estás seguro de que quieres dividir este contacto único en varios contactos (uno para cada conjunto de información que se añadió a él)?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Agrupar"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Mostrar fuentes"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Ocultar fuentes"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Agrupar contacto"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Agrupar contactos"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Selecciona el nombre del contacto que quieras agrupar con <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos los contactos"</string>
@@ -63,7 +59,7 @@
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactos agrupados"</string>
<string name="menu_contactOptions" msgid="1957061455705020617">"Opciones"</string>
<string name="contactOptionsTitle" msgid="8259347644090700915">"Opciones"</string>
- <string name="deleteConfirmation_title" msgid="6394309508930335204">"Suprimir"</string>
+ <string name="deleteConfirmation_title" msgid="6394309508930335204">"Eliminar"</string>
<string name="readOnlyContactWarning" msgid="1390849295342594265">"No puedes eliminar contactos de las cuentas de solo lectura, pero puedes ocultarlos en las listas de contactos."</string>
<string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Este contacto contiene información de varias cuentas. La información de las cuentas de solo lectura se ocultará en las listas de contactos, pero no se eliminará."</string>
<string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Si se elimina este contacto, se eliminará la información de varias cuentas."</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Volver"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Editar contacto"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Contacto nuevo"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Más información"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Pronunciación"</string>
<string name="label_notes" msgid="8337354953278341042">"Notas"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Tono"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupos"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Editar grupos"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Nombre y apellido"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Transcripción fonética del nombre"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Posición"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Nombre de MI"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Mi nota"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Número de teléfono"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Dirección de correo electrónico"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Dirección postal"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Mostrar grupo"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Ese contacto no existe."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear contacto nuevo"</string>
<string name="selectLabel" msgid="4255424123394910733">"Seleccionar etiqueta"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"Correo electrónico"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"MI"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Dirección postal"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Otros"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organización"</item>
<item msgid="7196592230748086755">"Nota"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Ninguna imagen"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"No hay ninguna imagen disponible en el teléfono."</string>
<string name="attachToContact" msgid="8820530304406066714">"Icono de contacto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nombre de etiqueta personalizada"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Opciones de visualización"</string>
<string name="displayGroups" msgid="2278964020773993336">"Opciones de visualización"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Editar grupos de sincronización"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importar contactos"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar llamadas directamente como mensajes de voz"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Las llamadas se envían directamente al buzón de voz."</string>
+ <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar llamadas directamente al buzón de voz"</string>
<string name="default_ringtone" msgid="9099988849649827972">"Predeterminado"</string>
- <string name="addPicture" msgid="1594679312161537678">"Añadir icono"</string>
<string name="changePicture" msgid="2943329047610967714">"Cambiar icono"</string>
<string name="removePicture" msgid="3041230993155966350">"Eliminar icono"</string>
<string name="noContacts" msgid="8579310973261953559">"No hay ningún contacto."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"No se ha encontrado ningún contacto coincidente."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"No hay ningún contacto con número de teléfono."</string>
- <string name="noFavorites" msgid="812766386743315815">"No hay ningún favorito."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupos"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"El grupo \"<xliff:g id="GROUPNAME">%s</xliff:g>\" está vacío."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Todos los contactos"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Solo contactos con teléfono"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Mostrar solo contactos con números de teléfono"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Seleccionar contactos para mostrar"</string>
@@ -131,32 +107,13 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> contactos, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> con teléfonos"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Sincronizar todos los contactos"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Mis contactos"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Contactos con números de teléfono"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Destacados en Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Guardando contacto…"</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Guardando opciones de visualización…"</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Se ha creado el contacto."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"El contacto se ha guardado."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Se ha producido un error al guardar los cambios del contacto."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Marcar número"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Números de teléfono"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Enviar un mensaje de texto"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Enviar mensaje de correo electrónico"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Direcciones de correo electrónico"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Enviar mensaje instantáneo"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Direcciones de chat"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Dirección en mapa"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Direcciones postales"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organizaciones"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupos"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Otra información"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Otras opciones"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Más"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Mostrando un contacto con número de teléfono"</item>
- <item quantity="other" msgid="6133262880804110289">"Mostrando <xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono"</item>
+ <item quantity="other" msgid="6133262880804110289">"<xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono"</item>
</plurals>
<string name="listTotalPhoneContactsZero" msgid="2756295259674938869">"No hay ningún contacto visible con número de teléfono."</string>
<plurals name="listTotalAllContacts">
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"Se han encontrado <xliff:g id="COUNT">%d</xliff:g> contactos."</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"No se ha encontrado el contacto."</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Sociedad"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 contacto"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> contactos"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Contactos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Teléfono"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Eliminar del registro de llamadas"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Borrar registro de llamadas"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"El registro de llamadas está vacío."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Borrar registro de llamadas"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"¿Estás seguro de que quieres borrar el registro de llamadas?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Buzón de voz"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Añadir llamada"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Cargando desde tarjeta SIM…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Contactos de tarjeta SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Sincroniza tus contactos de Google"</font>" "\n"Después de sincronizarlos con tu teléfono, podrás acceder a tus contactos desde cualquier lugar."</string>
- <string name="noContactsHelpText" msgid="6788487368878712350">"No tienes ningún contacto que mostrar."\n\n"Para añadir contactos, pulsa "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
- <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"No tienes ningún contacto que mostrar. (Si acabas de añadir una cuenta, es posible que la sincronización de contactos tarde algunos minutos)."\n\n"Para añadir contactos, pulsa "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
- <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"No tienes ningún contacto que mostrar."\n\n"Para añadir contactos, pulsa "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
- <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"No tienes ningún contacto que mostrar. (Si acabas de añadir una cuenta, es posible que la sincronización de contactos tarde algunos minutos)."\n\n"Para añadir contactos, pulsa "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"No tienes ningún contacto que mostrar. (Si acabas de añadir una cuenta, es posible que la sincronización de contactos tarde algunos minutos)."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"No tienes ningún contacto que mostrar."</string>
+ <string name="noContactsHelpText" msgid="6788487368878712350">"No tienes ningún contacto que mostrar."\n\n"Para añadir contactos, pulsa la tecla de "<font fgcolor="#ffffffff"><b>"menú"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
+ <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"No tienes ningún contacto que mostrar. (Si acabas de añadir una cuenta, es posible que la sincronización de contactos tarde algunos minutos)."\n\n"Para añadir contactos, pulsa la tecla de "<font fgcolor="#ffffffff"><b>"menú"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"No tienes ningún contacto que mostrar."\n\n"Para añadir contactos, pulsa la tecla de "<font fgcolor="#ffffffff"><b>"menú"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con los contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"No tienes ningún contacto que mostrar. (Si acabas de añadir una cuenta, es posible que la sincronización de contactos tarde algunos minutos)."\n\n"Para añadir contactos, pulsa la tecla de "<font fgcolor="#ffffffff"><b>"menú"</b></font>" y toca en:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar en el teléfono,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar."</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"No tienes favoritos."\n\n"Para añadir un contacto a tu lista de favoritos, sigue estos pasos:"\n\n" "<li>"Toca en la pestaña "<b>"Contactos"</b>"."\n</li>" "\n<li>"Selecciona el contacto que quieras añadir a tus favoritos."\n</li>" "\n<li>"Toca la estrella situada junto al nombre del contacto."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Seleccionar grupos para la sincronización"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Todos los contactos"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Destacados"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Teléfonos"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Añadir llamada"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalles de la llamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"No se han podido leer los detalles de la llamada solicitada."</string>
- <string name="call_type" msgid="3213526349444862087">"Tipo"</string>
<string name="type_incoming" msgid="6502076603836088532">"Llamada entrante"</string>
<string name="type_outgoing" msgid="343108709599392641">"Llamada saliente"</string>
<string name="type_missed" msgid="2720502601640509542">"Llamada perdida"</string>
- <string name="call_time" msgid="5805575214626630975">"Hora"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Duración"</string>
- <string name="header_actions" msgid="229583643365836321">"Acciones"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Tono de llamada: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Añadir más elementos"</string>
- <string name="actionCall" msgid="695145166039381504">"Llamar a <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Enviar email a <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Enviar SMS a <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chatear mediante <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Ver dirección de <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Llamadas entrantes"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Pasarán directamente al correo de voz"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Establecido como <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
<string name="callBack" msgid="5498224409038809224">"Volver a llamar"</string>
<string name="callAgain" msgid="3197312117049874778">"Volver a llamar"</string>
<string name="returnCall" msgid="8171961914203617813">"Devolver llamada"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. y <xliff:g id="SECONDS">%s</xliff:g> seg."</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Más llamados"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min. y <xliff:g id="SECONDS">%2$s</xliff:g> seg."</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Contactos frecuentes"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Añadir contacto"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Deseas añadir \"<xliff:g id="EMAIL">%s</xliff:g>\" a Contactos?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Todo"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"estrella"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"cero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"buzón de voz"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"retroceder un espacio"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"número que se va a marcar"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"menos"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"más"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Falta la tarjeta SD."</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"No se ha detectado ninguna tarjeta SD."</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Buscando vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"¿De dónde quieres importar contactos?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar contactos desde la tarjeta SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importar contactos desde la tarjeta SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exportar contactos a la tarjeta SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Compartir contactos visibles"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importar un archivo de vCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar varios archivos de vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos los archivos de vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"No se ha podido analizar el archivo de vCard debido a un error inesperado."</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"No se ha podido analizar el archivo de vCard (a pesar de que su formato parece ser válido) porque no es compatible con la implementación actual."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"No se ha encontrado ningún archivo de vCard en la tarjeta SD."</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"No se ha encontrado ninguna entrada de vCard válida para la selección realizada."</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"No ha sido posible importar uno o varios archivos (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Error desconocido"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Seleccionar archivo de vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Selecciona un archivo de vCard para la operación de importación."</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Leyendo vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Leyendo archivos de vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importando datos de vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Error al leer datos de vCard"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Se ha producido un error al leer los datos de vCard."\n"Motivo del error: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> archivos"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Todos los contactos"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Contactos almacenados de forma local"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Exportar contactos"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contactos"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> archivos"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Confirmar la exportación"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"¿Estás seguro de que quieres exportar tu lista de contactos a \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Error al exportar los datos del contacto"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"No hay contactos que exportar."</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Hay demasiados archivos de vCard en la tarjeta SD."</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"El nombre de archivo necesario es demasiado largo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"No se puede abrir o crear el directorio de destino \"<xliff:g id="DIR_NAME">%s</xliff:g>\"."</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contacto"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Exportando datos de contacto a \"<xliff:g id="FILE_NAME">%s</xliff:g>\"..."</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"No se ha podido inicializar el exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Se ha producido un error durante la exportación: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Error al obtener información de la base de datos"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"No hay contactos que exportar. Puedes seleccionar datos no exportables."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"No hay contactos que exportar. Si ya tienes contactos en el teléfono, es posible que algunos proveedores de datos no permitan que se exporten todos los contactos a otros dispositivos."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"El redactor de vCard no se ha inicializado correctamente."</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"No se ha podido abrir el archivo \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"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="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contactos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Añadir pausa de dos segundos"</string>
<string name="add_wait" msgid="3360818652790319634">"Añadir espera"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Llamar"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Llamar a través de"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Enviar un mensaje de texto a través de"</string>
<string name="make_primary" msgid="5829291915305113983">"Recordar esta opción"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Todos los contactos"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Si eliminas \"<xliff:g id="GROUP">%s</xliff:g>\" de la sincronización, también se eliminarán todos los contactos no agrupados."</string>
<string name="account_phone" msgid="4025734638492419713">"Solo en el teléfono (no sincronizado)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Nombre de presentación"</string>
<string name="call_custom" msgid="7756571794763171802">"Llamar a <xliff:g id="CUSTOM">%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>
@@ -342,13 +287,13 @@
<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 a buscapersonas"</string>
- <string name="call_other" msgid="5605584621798108205">"Llamar a otro"</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="7777261153532968503">"Llamar a otro fax"</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>
@@ -362,30 +307,30 @@
<string name="sms_work" msgid="2269624156655267740">"Enviar SMS a trabajo"</string>
<string name="sms_fax_work" msgid="8028189067816907075">"Enviar un mensaje de texto al fax del trabajo"</string>
<string name="sms_fax_home" msgid="9204042076306809634">"Enviar un mensaje de texto al fax de casa"</string>
- <string name="sms_pager" msgid="7730404569637015192">"Enviar un mensaje de texto al buscapersonas"</string>
- <string name="sms_other" msgid="5131921487474531617">"Enviar un mensaje de texto a otro"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Enviar SMS al buscapersonas"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar SMS"</string>
<string name="sms_callback" msgid="5004824430094288752">"Enviar un mensaje de texto a un número de devolución de llamada"</string>
<string name="sms_car" msgid="7444227058437359641">"Enviar un mensaje de texto al coche"</string>
<string name="sms_company_main" msgid="118970873419678087">"Enviar un mensaje de texto al teléfono principal de la empresa"</string>
<string name="sms_isdn" msgid="8153785037515047845">"Enviar un mensaje de texto a RDSI"</string>
<string name="sms_main" msgid="8621625784504541679">"Enviar un mensaje de texto al número de teléfono principal"</string>
- <string name="sms_other_fax" msgid="3930666870074006114">"Enviar un mensaje de texto a otro fax"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar SMS a fax"</string>
<string name="sms_radio" msgid="3329166673433967820">"Enviar un mensaje de texto a la radio"</string>
<string name="sms_telex" msgid="9034802430065267848">"Enviar un mensaje de texto al télex"</string>
<string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar un mensaje de texto a TTY/TDD"</string>
<string name="sms_work_mobile" msgid="2459939960512702560">"Enviar un mensaje de texto al móvil del trabajo"</string>
- <string name="sms_work_pager" msgid="5566924423316960597">"Enviar un mensaje de texto al buscapersonas del trabajo"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Enviar SMS al buscapersonas 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 un mensaje de texto a MMS"</string>
<string name="email_home" msgid="8573740658148184279">"Enviar email a casa"</string>
<string name="email_mobile" msgid="2042889209787989814">"Enviar email al móvil"</string>
<string name="email_work" msgid="2807430017302722689">"Enviar email a trabajo"</string>
- <string name="email_other" msgid="8093933498541795832">"Enviar correo electrónico"</string>
+ <string name="email_other" msgid="3454004077967657109">"Enviar correo electrónico"</string>
<string name="email_custom" msgid="7548003991586214105">"Correo electrónico <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"Correo electrónico"</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="5560707927535653892">"Ver otras direcciones"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ver dirección"</string>
<string name="map_custom" msgid="6184363799976265281">"Ver dirección de <xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Nombre fonético"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Segundo nombre fonético"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Apellido fonético"</string>
- <string name="split_label" msgid="8262112659919449087">"Desagrupar"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Asocia estos datos a su contacto correspondiente."</string>
- <string name="account_name_format" msgid="4421123930035299208">"De la cuenta <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Contacto de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Utilizar esta foto"</string>
<string name="contact_read_only" msgid="1203216914575723978">"No se puede editar la información del contacto de <xliff:g id="SOURCE">%1$s</xliff:g> en este dispositivo."</string>
<string name="no_contact_details" msgid="6754415338321837001">"No hay información adicional para este contacto."</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Ordenar lista por"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Nombre"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Apellidos"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Ver nombres de contactos por"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Nombre primero"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Apellidos primero"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Buscar contactos"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Buscar todos los contactos"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Hacer una foto"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Seleccionar foto de la galería"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"La lista de contactos se está actualizando para reflejar el cambio de idioma."\n\n"Por favor, espera..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"La lista de contactos se está actualizando."\n\n"Por favor, espera..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Los contactos se están actualizando. "\n\n"El proceso de actualización necesita aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB de almacenamiento interno del teléfono."\n\n"Selecciona una de las siguientes opciones:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algunas aplicaciones"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Reintentar actualización"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Resultados de la búsqueda de: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Buscando..."</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index bae53ed..aed36e1 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Contacts"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Appeler <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Ajouter aux favoris"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Supprimer des favoris"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Afficher le code-barres"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Modifier le contact"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Supprimer le contact"</string>
<string name="menu_call" msgid="3992595586042260618">"Appeler le contact"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Numéro téléphone par défaut"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"E-mail par défaut"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Séparer"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Scinder le contact"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Contacts séparés"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Séparer le contact"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Souhaitez-vous vraiment séparer ce contact en plusieurs instances : une pour chaque ensemble d\'informations associé à ce contact ?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Joindre"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Afficher les sources"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Masquer les sources"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Joindre le contact"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Joindre les contacts"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Sélectionnez le contact que vous voulez associer à <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Afficher tous les contacts"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Annuler"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Modifier le contact"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Nouveau contact"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Plus d\'infos"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Prononciation phonétique"</string>
<string name="label_notes" msgid="8337354953278341042">"Notes"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Sonnerie"</string>
- <string name="label_groups" msgid="7304551384542859026">"Groupes"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Modifier les groupes"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Nom et prénom"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Nom phonétique"</string>
- <string name="ghostData_company" msgid="5414421120553765775">"Société"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Poste"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Nom du compte"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Mon commentaire"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Numéro téléphone"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Adresse e-mail"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Adresse postale"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Afficher le groupe"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Entreprise"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titre"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Ce contact n\'existe pas."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Créer un nouveau contact"</string>
<string name="selectLabel" msgid="4255424123394910733">"Sélectionnez un libellé"</string>
@@ -96,64 +82,35 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Adresse postale"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Autre"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organisation"</item>
<item msgid="7196592230748086755">"Remarque"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Aucune image"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Aucune image disponible sur le téléphone."</string>
<string name="attachToContact" msgid="8820530304406066714">"Icône de contact"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Libellé personnalisé"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Options d\'affichage"</string>
<string name="displayGroups" msgid="2278964020773993336">"Options d\'affichage"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Param. sync. groupes"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importer des contacts"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Renvoyer les appels directement vers la messagerie vocale."</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Les appels sont renvoyés directement vers la messagerie vocale."</string>
+ <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Renvoyer les appels directement vers la messagerie vocale"</string>
<string name="default_ringtone" msgid="9099988849649827972">"Par défaut"</string>
- <string name="addPicture" msgid="1594679312161537678">"Ajouter une icône"</string>
<string name="changePicture" msgid="2943329047610967714">"Changer d\'icône"</string>
<string name="removePicture" msgid="3041230993155966350">"Supprimer l\'icône"</string>
<string name="noContacts" msgid="8579310973261953559">"Aucun contact."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Aucun contact correspondant n\'a été trouvé."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Aucun contact disposant d\'un numéro téléphone."</string>
- <string name="noFavorites" msgid="812766386743315815">"Aucun favori."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Groupes"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Votre groupe \"<xliff:g id="GROUPNAME">%s</xliff:g>\" est vide."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Tous les contacts"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Contacts avec un n° de tél."</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Afficher uniquement les contacts avec un numéro de téléphone"</string>
- <string name="headerContactGroups" msgid="2426134991932503843">"Choisissez les contacts à afficher."</string>
+ <string name="headerContactGroups" msgid="2426134991932503843">"Choisir les contacts à afficher"</string>
<plurals name="groupDescrip">
<item quantity="other" msgid="3507881585720628389">"<xliff:g id="COUNT">%0$d</xliff:g> contacts"</item>
</plurals>
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> contacts, dont <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> avec un téléphone"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Synchroniser tous les contacts"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Mes contacts"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Contacts avec des n° de téléphone"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Suivis dans Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Enregistrement du contact…"</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Enregistrement des options d\'affichage..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Contact créé."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Contact enregistré."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Erreur : impossible d\'enregistrer les modifications du contact"</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Composer le numéro"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Numéros de téléphone"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Envoyer un SMS/MMS"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Envoyer un e-mail"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Adresses e-mail"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Envoyer un message instantané"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Adresses de chat"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Adresse sur un plan"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Adresses postales"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organisations"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Groupes"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Autres informations"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Autres options"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Plus"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Afficher 1 contact avec son numéro de téléphone"</item>
<item quantity="other" msgid="6133262880804110289">"Affichage de <xliff:g id="COUNT">%d</xliff:g> contacts avec numéro de téléphone"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"<xliff:g id="COUNT">%d</xliff:g> contacts trouvés"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Contact introuvable"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Social"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 contact"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> contacts"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Contacts"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoris"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Tél."</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Supprimer du journal d\'appels"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Effacer tous les appels"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Aucun appel."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Effacer le journal d\'appels"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Voulez-vous vraiment effacer le journal d\'appels ?"</string>
<string name="imei" msgid="3045126336951684285">"Code IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Messagerie vocale"</string>
@@ -194,44 +156,30 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Composer"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Chargement depuis la carte SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contacts de carte SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Synchronisez vos contacts Google !"</font>" "\n"Vos contacts seront disponibles, où que vous soyez, dès que vous aurez synchronisé votre téléphone."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Vous n\'avez aucun contact à afficher. Si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Vous n\'avez aucun contact à afficher."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Vous n\'avez aucun contact à afficher."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter."</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte comportant des contacts que vous pourrez synchroniser sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier le paramètre de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer une entrée ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter."</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Vous n\'avez aucun contact à afficher."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter."</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte comportant des contacts que vous pourrez synchroniser sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier le paramètre de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer une entrée ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter."</b></font>\n</li></string>
- <string name="noFavoritesHelpText" msgid="3744655776704833277">"Aucun favori."\n\n"Pour ajouter un contact à la liste de favoris :"\n\n" "<li>"Appuyez sur l\'onglet "<b>"Contacts"</b>"."\n</li>" "\n<li>"Appuyez sur le contact à ajouter à vos favoris."\n</li>" "\n<li>"Appuyez sur l\'étoile en regard du nom du contact."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Sélectionner les groupes à synchroniser"</string>
+ <string name="noFavoritesHelpText" msgid="3744655776704833277">"Vous ne disposez d\'aucun favoris."\n\n"Pour ajouter un contact à la liste de favoris :"\n\n" "<li>"Appuyez sur l\'onglet "<b>"Contacts"</b>"."\n</li>" "\n<li>"Appuyez sur le contact à ajouter à vos favoris."\n</li>" "\n<li>"Appuyez sur l\'étoile en regard du nom du contact."\n</li></string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Tous les contacts"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Suivis"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Téléphones"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utiliser le clavier DTMF"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Reprendre l\'appel en cours"</string>
- <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Ajouter un appel"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Autre appel"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Détails sur l\'appel"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Impossible de consulter les détails de l\'appel demandé."</string>
- <string name="call_type" msgid="3213526349444862087">"Type"</string>
<string name="type_incoming" msgid="6502076603836088532">"Appel entrant"</string>
<string name="type_outgoing" msgid="343108709599392641">"Appel sortant"</string>
<string name="type_missed" msgid="2720502601640509542">"Appel manqué"</string>
- <string name="call_time" msgid="5805575214626630975">"Heure"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Durée"</string>
- <string name="header_actions" msgid="229583643365836321">"Actions"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Sonnerie : <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Ajouter d\'autres éléments"</string>
- <string name="actionCall" msgid="695145166039381504">"Appeler <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Env. e-mail à <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Envoyer un SMS (<xliff:g id="TYPE">%s</xliff:g>)"</string>
- <string name="actionChat" msgid="31079429748650300">"Chatter via <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Afficher l\'adresse <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Appels entrants"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Seront envoyés directement en tant que message vocal"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Associer à <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> mn <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Fréquemment appelés"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> mn <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Contactés fréquemment"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Ajouter un contact"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts ?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Tout"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"étoile"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zéro"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"dièse"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"messagerie vocale"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"composer"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"retour arrière"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"numéro à composer"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"photo du contact"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"moins"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Aucune carte SD trouvée"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Aucune carte SD n\'a été détectée."</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Recherche des données VCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"À partir de quel support souhaitez-vous importer les contacts ?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importer à partir de la carte SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importer à partir de la carte SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exporter vers la carte SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Partager les contacts visibles"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importer un fichier vCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importer plusieurs fichiers vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importer tous les fichiers vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Échec de l\'analyse des données VCard pour une raison inattendue"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Échec de l\'analyse des données VCard. Le format semble valide, mais l\'implémentation actuelle ne le prend pas en charge."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Aucun fichier VCard n\'a été trouvé sur la carte SD."</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Aucune entrée VCard valide n\'a été trouvée pour votre sélection."</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Échec de l\'importation d\'un ou de plusieurs fichiers (%s)"</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Erreur inconnue"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Sélectionner un fichier VCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Sélectionnez un fichier VCard à importer."</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Lecture des données VCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Lecture des fichiers VCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importation des données VCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Échec de la lecture des données VCard"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Impossible de lire les données VCard."\n"Cause : \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> fichiers"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Tous les contacts"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Contacts enregistrés localement"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Exporter les contacts"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contacts"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> fichiers"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Confirmer l\'exportation"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Voulez-vous vraiment exporter la liste de contacts vers \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\" ?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Échec lors de l\'exportation des données du contact"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Aucun contact exportable"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"La carte SD contient trop de fichiers VCard."</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Le nom de fichier requis est trop long (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Impossible d\'ouvrir ou de créer le répertoire de destination \"<xliff:g id="DIR_NAME">%s</xliff:g>\"."</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportation des données des contacts"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Exportation des données des contacts vers \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Échec de l\'initialisation du module d\'exportation : \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Une erreur s\'est produite lors de l\'exportation : \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Impossible d\'obtenir les informations concernant la base de données"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Aucun contact exportable. Vous pouvez choisir des données non exportables."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Aucun contact n\'est exportable. Si votre téléphone comporte actuellement des contacts, il se peut qu\'un fournisseur de données empêche leur exportation hors de votre téléphone."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Le système de composition vCard n\'est pas correctement initialisé."</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Impossible d\'ouvrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\" : <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"Impossible d\'ouvrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" : <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contacts"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Ajouter une pause de 2 s"</string>
<string name="add_wait" msgid="3360818652790319634">"Ajouter Attendre"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Composer"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Appeler via"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Envoyer un SMS via"</string>
<string name="make_primary" msgid="5829291915305113983">"Mémoriser ce choix"</string>
@@ -334,26 +280,25 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Tous les contacts"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Le retrait du groupe \"<xliff:g id="GROUP">%s</xliff:g>\" de la synchronisation entraîne également la suppression de tous les contacts non groupés de la synchronisation."</string>
<string name="account_phone" msgid="4025734638492419713">"Téléphone uniquement (sans synchronisation)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Nom affiché"</string>
<string name="call_custom" msgid="7756571794763171802">"Appeler <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Appeler domicile"</string>
- <string name="call_mobile" msgid="7502236805487609178">"Appeler le mobile"</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="5605584621798108205">"Appeler autre"</string>
- <string name="call_callback" msgid="1910165691349426858">"Appeler le numéro de rappel"</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 société (principal)"</string>
- <string name="call_isdn" msgid="1541590690193403411">"Appeler le numéro RNIS"</string>
- <string name="call_main" msgid="6082900571803441339">"Appeler le numéro principal"</string>
- <string name="call_other_fax" msgid="7777261153532968503">"Composer numéro autre fax"</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 sur le mobile professionnel"</string>
- <string name="call_work_pager" msgid="3419348514157949008">"Appeler sur le téléavertisseur professionnel"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Appeler mobile professionnel"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Appeler téléavertisseur bureau"</string>
<string name="call_assistant" msgid="2141641383068514308">"Appeler <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
<string name="call_mms" msgid="6274041545876221437">"Appeler MMS"</string>
<string name="sms_custom" msgid="5932736853732191825">"Envoyer un SMS à <xliff:g id="CUSTOM">%s</xliff:g>"</string>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"Envoyer un SMS à autre"</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 à société (principal)"</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="3930666870074006114">"Envoyer un SMS sur autre numéro de fax"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"Envoyer un e-mail à autre adresse"</string>
- <string name="email_custom" msgid="7548003991586214105">"Env. e-mail à <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="email_other" msgid="3454004077967657109">"Envoyer un e-mail"</string>
+ <string name="email_custom" msgid="7548003991586214105">"Envoyer un e-mail à <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"Envoyer un e-mail"</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="5560707927535653892">"Afficher autre adresse"</string>
+ <string name="map_other" msgid="3817820803587012641">"Afficher l\'adresse"</string>
<string name="map_custom" msgid="6184363799976265281">"Afficher adresse <xliff:g id="CUSTOM">%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>
@@ -395,7 +340,7 @@
<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">"Chat"</string>
+ <string name="chat" msgid="9025361898797412245">"Chatter"</string>
<string name="postal_street" msgid="8133143961580058972">"Rue"</string>
<string name="postal_pobox" msgid="4431938829180269821">"Boîte postale"</string>
<string name="postal_neighborhood" msgid="1450783874558956739">"Voisinage"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Phonétique du prénom"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Phonétique 2e prénom"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Phonétique du nom de famille"</string>
- <string name="split_label" msgid="8262112659919449087">"Scinder"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Créez un contact avec ces données."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Du compte <xliff:g id="SOURCE">%1$s</xliff:g> : <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Contact <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Utiliser cette photo"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Vous ne pouvez pas modifier les informations du contact <xliff:g id="SOURCE">%1$s</xliff:g> sur cet appareil."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Aucune autre information pour ce contact"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Trier la liste par"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Prénom"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Nom de famille"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Afficher les contacts avec"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Le prénom en premier"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Le nom de famille en premier"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Rechercher..."</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Rechercher tous les contacts"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Prendre une photo"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Sélectionner une photo dans la galerie"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Mise à jour de la liste des contacts en cours suite au changement de langue."\n\n"Veuillez patienter..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Mise à jour de la liste des contacts en cours."\n\n"Veuillez patienter..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Les contacts sont en cours de mise à niveau. "\n\n"La mise à niveau requiert environ <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> Mo de mémoire interne du téléphone."\n\n"Choisissez l\'une des options suivantes :"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Désinstaller certaines applications"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Réessayer la mise à niveau"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Résultats de recherche pour : <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Recherche en cours..."</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 6615020..9da8428 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Contatti"</string>
@@ -37,24 +38,19 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Chiama <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Aggiungi a preferiti"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Rimuovi dai preferiti"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Mostra codice a barre"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Modifica contatto"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Elimina contatto"</string>
- <string name="menu_call" msgid="3992595586042260618">"Chiama contatto"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Invia SMS a contatto"</string>
+ <string name="menu_call" msgid="3992595586042260618">"Chiama"</string>
+ <string name="menu_sendSMS" msgid="5535886767547006515">"Invia SMS"</string>
<string name="menu_sendEmail" msgid="7293508859242926187">"Invia email"</string>
<string name="menu_viewAddress" msgid="1814744325763202024">"Indirizzo su mappa"</string>
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Rendi numero predefinito"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Rendi ind. email predefinito"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Separa"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Dividi contatto"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Contatti separati"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Separa contatto"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Separare questo contatto singolo in più contatti, uno per ogni serie di informazioni di contatto unita in precedenza?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Unisci"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Mostra origini"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Nascondi origini"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Unisci contatto"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unisci contatti"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Seleziona il contatto che desideri unire a <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostra tutti i contatti"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Annulla"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Modifica contatto"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Nuovo contatto"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Altre info"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonetica"</string>
<string name="label_notes" msgid="8337354953278341042">"Note"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Suoneria"</string>
- <string name="label_groups" msgid="7304551384542859026">"Gruppi"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Modifica gruppi"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Nome e cognome"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Nome fonetico"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Società"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Mansione"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Nome account chat"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"La mia nota"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Numero di telefono"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Indirizzo email"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Indirizzo postale"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Visualizza gruppo"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titolo"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Il contatto non esiste."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Crea nuovo contatto"</string>
<string name="selectLabel" msgid="4255424123394910733">"Seleziona etichetta"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Indirizzo postale"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Altro"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organizzazione"</item>
<item msgid="7196592230748086755">"Nota"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Nessuna foto"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Nessuna foto disponibile."</string>
<string name="attachToContact" msgid="8820530304406066714">"Icona del contatto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome etichetta personalizzata"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Opzioni di visualizzazione"</string>
<string name="displayGroups" msgid="2278964020773993336">"Opzioni di visualizzazione"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Modifica sincr. gruppi"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importa contatti"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Inoltra chiamate direttamente alla segreteria"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Chiamate inoltrate direttamente alla segreteria."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Predefinita"</string>
- <string name="addPicture" msgid="1594679312161537678">"Aggiungi icona"</string>
<string name="changePicture" msgid="2943329047610967714">"Cambia icona"</string>
<string name="removePicture" msgid="3041230993155966350">"Rimuovi icona"</string>
<string name="noContacts" msgid="8579310973261953559">"Nessun contatto."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Nessun contatto corrispondente trovato."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Nessun contatto con numeri di telefono."</string>
- <string name="noFavorites" msgid="812766386743315815">"Nessun preferito."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Gruppi"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Il gruppo \"<xliff:g id="GROUPNAME">%s</xliff:g>\" è vuoto."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Tutti i contatti"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Solo contatti con numeri di tel."</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Visualizza solo i contatti con numeri di telefono"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Scegli i contatti da visualizzare"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> contatti, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> con numeri di telefono"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Sincronizza tutti i contatti"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"I miei contatti"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Contatti con numeri di telefono"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Speciali in Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Salvataggio contatto in corso..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Salvataggio opzioni di visualizzazione in corso..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Contatto creato."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Contatto salvato."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Errore, impossibile salvare le modifiche ai contatti."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Componi numero"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Numeri di telefono"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Invia SMS"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Invia email"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Indirizzi email"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Invia messagio chat"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Indirizzi chat"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Indirizzo su mappa"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Indirizzi postali"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organizzazioni"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Gruppi"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Altre informazioni"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Altre opzioni"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Altro"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"1 contatto con numero di telefono visualizzato"</item>
<item quantity="other" msgid="6133262880804110289">"<xliff:g id="COUNT">%d</xliff:g> contatti con numeri di telefono visualizzati"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"<xliff:g id="COUNT">%d</xliff:g> contatti trovati"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Contatto non trovato"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Sociale"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 contatto"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> contatti"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Contatti"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferiti"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefono"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Rimuovi da registro"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Cancella registro chiamate"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Il registro chiamate è vuoto."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Cancella registro chiamate"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Cancellare il registro chiamate?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Segreteria"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Componi per aggiungere chiamata"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Caricamento da SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contatti SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Sincronizza i tuoi contatti Google."</font>" "\n"Dopo la sincronizzazione con il telefono, i tuoi contatti saranno sempre a tua disposizione."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Non ci sono contatti da visualizzare (se hai appena aggiunto un account, la sincronizzazione dei contatti potrebbe richiedere alcuni minuti)."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Non ci sono contatti da visualizzare."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Non sono presenti contatti da visualizzare."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e tocca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Account"</b></font>" per aggiungere o configurare un account con contatti sincronizzabili con il telefono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare da zero un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/esporta"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Non sono presenti contatti da visualizzare (se hai appena aggiunto un account, la sincronizzazione dei contatti potrebbe richiedere alcuni minuti)."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e tocca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Account"</b></font>" per aggiungere o configurare un account con contatti sincronizzabili con il telefono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opzioni di visualizzazione"</b></font>" per modificare i contatti visibili"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare da zero un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/esporta"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Non sono presenti contatti da visualizzare."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e tocca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Account"</b></font>" per aggiungere o configurare un account con contatti sincronizzabili con il telefono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare da zero un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/esporta"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Non sono presenti contatti da visualizzare (se hai appena aggiunto un account, la sincronizzazione dei contatti potrebbe richiedere alcuni minuti)."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e tocca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Account"</b></font>" per aggiungere o configurare un account con contatti sincronizzabili con il telefono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opzioni di visualizzazione"</b></font>" per modificare i contatti visibili"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare da zero un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/esporta"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Non sono presenti preferiti."\n\n"Per aggiungere un contatto al tuo elenco di preferiti:"\n\n" "<li>"Tocca la scheda "<b>"Contatti."</b>\n</li>" "\n<li>"Tocca il contatto da aggiungere ai preferiti."\n</li>" "\n<li>"Tocca la stella accanto al nome del contatto."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Seleziona i gruppi da sincronizzare"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Tutti i contatti"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Speciali"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoni"</string>
@@ -209,31 +171,17 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Aggiungi"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Dettagli chiamata"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Impossibile leggere i dettagli per la chiamata richiesta."</string>
- <string name="call_type" msgid="3213526349444862087">"Tipo"</string>
<string name="type_incoming" msgid="6502076603836088532">"Chiamata ricevuta"</string>
<string name="type_outgoing" msgid="343108709599392641">"Chiamata effettuata"</string>
<string name="type_missed" msgid="2720502601640509542">"Chiamata persa"</string>
- <string name="call_time" msgid="5805575214626630975">"Ora"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Durata"</string>
- <string name="header_actions" msgid="229583643365836321">"Azioni"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Suoneria: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Aggiungi altri elementi"</string>
- <string name="actionCall" msgid="695145166039381504">"Chiama n. <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Invia email a ind. <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Invia SMS a n. <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chatta su <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Visualizza indirizzo <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Chiamate in arrivo"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Il messaggio verrà inviato direttamente alla segreteria"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Impostato su <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Numeri più chiamati"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sec."</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Contattati spesso"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Aggiungi contatto"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Aggiungere \"<xliff:g id="EMAIL">%s</xliff:g>\" ai contatti?"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Aggiungi \"<xliff:g id="EMAIL">%s</xliff:g>\" ai contatti?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Tutti"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"uno"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"due"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"stella"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"sterlina"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"segreteria"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"componi"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"numero da comporre"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"foto contatto"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"meno"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"più"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Nessuna scheda SD"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Nessuna scheda SD rilevata"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Ricerca vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Da dove desideri importare i contatti?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importa da scheda SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importa da scheda SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Esporta su scheda SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Condividi contatti visibili"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importa un file vCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importa più file vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importa tutti i file vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Impossibile analizzare la vCard per motivi imprevisti"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Impossibile analizzare la vCard nonostante sembri avere un formato valido perché l\'implementazione corrente non la supporta"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Nessun file vCard trovato sulla scheda SD"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Nessuna voce vCard valida trovata per la tua selezione"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Impossibile importare uno o più file (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Errore sconosciuto"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Seleziona file vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Seleziona un file vCard da importare"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Lettura vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Lettura file vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importazione dati vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Lettura dati vCard non riuscita"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Impossibile leggere la vCard."\n"Motivo dell\'errore: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> contatti su <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> file su <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Tutti i contatti"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Contatti memorizzati localmente"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Esporta contatti"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> contatti su <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> file su <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Conferma esportazione"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Esportare l\'elenco di contatti in \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Esportazione dati contatti non riuscita"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Nessun contatto esportabile"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Troppi dati vCard sulla scheda SD"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Il nome file richiesto è troppo lungo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Impossibile aprire o creare la directory di destinazione \"<xliff:g id="DIR_NAME">%s</xliff:g>\""</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Esportazione dati di contatto"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Esportazione dati di contatto in \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Impossibile inizializzare l\'utilità di esportazione: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Si è verificato un errore durante l\'esportazione: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Recupero informazioni database non riuscito"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Nessun contatto esportabile. Potresti scegliere dati non esportabili"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Nessun contatto esportabile. Se nel tuo telefono sono presenti dei contatti, qualche provider di dati potrebbe impedire l\'esportazione di tutti i contatti all\'esterno del telefono."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Il compositore di vCard non è correttamente inizializzato"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Impossibile aprire \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"Impossibile aprire \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> contatti su <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"I nomi dei tuoi contatti"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Aggiungi pausa 2 sec"</string>
<string name="add_wait" msgid="3360818652790319634">"Aggiungi attesa"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Componi"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Chiama utilizzando"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Invia SMS utilizzando"</string>
<string name="make_primary" msgid="5829291915305113983">"Memorizza questa scelta"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Tutti i contatti"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Se rimuovi \"<xliff:g id="GROUP">%s</xliff:g>\" dalla sincronizzazione, verranno rimossi anche tutti i contatti separati."</string>
<string name="account_phone" msgid="4025734638492419713">"Solo su telefono (non sincronizzato)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Nome visualizzato"</string>
<string name="call_custom" msgid="7756571794763171802">"Chiama n. <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Chiama casa"</string>
<string name="call_mobile" msgid="7502236805487609178">"Chiama cellulare"</string>
@@ -342,13 +287,13 @@
<string name="call_fax_work" msgid="7467763592359059243">"Chiama fax ufficio"</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="5605584621798108205">"Chiama altro"</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="7777261153532968503">"Chiama n. altro fax"</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>
@@ -363,29 +308,29 @@
<string name="sms_fax_work" msgid="8028189067816907075">"Invia SMS a fax ufficio"</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="5131921487474531617">"Invia SMS ad altro"</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="3930666870074006114">"Invia SMS a n. altro fax"</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">"Invia SMS a cercapersone ufficio"</string>
- <string name="sms_assistant" msgid="2773424339923116234">"Invia SMS ad <xliff:g id="ASSISTANT">%s</xliff:g>"</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="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. ufficio"</string>
- <string name="email_other" msgid="8093933498541795832">"Invia email ad altro"</string>
+ <string name="email_other" msgid="3454004077967657109">"Invia email"</string>
<string name="email_custom" msgid="7548003991586214105">"Invia email a ind. <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"Email"</string>
<string name="map_home" msgid="1243547733423343982">"Visualizza indirizzo casa"</string>
<string name="map_work" msgid="1360474076921878088">"Visualizza indirizzo ufficio"</string>
- <string name="map_other" msgid="5560707927535653892">"Visualizza altro indirizzo"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visualizza indirizzo"</string>
<string name="map_custom" msgid="6184363799976265281">"Visualizza indirizzo <xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Nome fonetico fornito"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Secondo nome fonetico"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Cognome fonetico"</string>
- <string name="split_label" msgid="8262112659919449087">"Dividi"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Crea un contatto distinto con questi dati."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Da account <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Contatto da <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"da <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Utilizza questa foto"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Informazioni del contatto da <xliff:g id="SOURCE">%1$s</xliff:g> non modificabili su questo dispositivo."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Nessuna informazione aggiuntiva per questo contatto"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Ordina elenco per"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Nome"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Cognome"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Visualizz. nomi contatti"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Prima il nome"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Prima il cognome"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Cerca contatti"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Cerca tutti i contatti"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Scatta foto"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Seleziona foto da galleria"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"L\'elenco contatti verrà aggiornato per rispecchiare il cambio di lingua."\n\n"Attendi..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Elenco contatti in fase di aggiornamento."\n\n"Attendi..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Contatti in fase di aggiornamento. "\n\n"Il processo di aggiornamento richiede circa <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB di memoria interna del telefono."\n\n"Scegli una delle seguenti opzioni:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Disinstalla alcune applicazioni"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Riprova l\'aggiornamento"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Risultati di ricerca per: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Ricerca in corso..."</string>
</resources>
diff --git a/res/values-ja/donottranslate_config.xml b/res/values-ja/donottranslate_config.xml
new file mode 100644
index 0000000..c5d3aea
--- /dev/null
+++ b/res/values-ja/donottranslate_config.xml
@@ -0,0 +1,35 @@
+<?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.
+*/
+-->
+
+<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-ja/strings.xml b/res/values-ja/strings.xml
index fdb7858..957aefb 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"連絡先"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"<xliff:g id="NAME">%s</xliff:g>に発信"</string>
<string name="menu_addStar" msgid="2908478235715404876">"お気に入りに追加"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"お気に入りから削除"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"バーコードを表示"</string>
<string name="menu_editContact" msgid="3452858480713561396">"連絡先を編集"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"連絡先を削除"</string>
<string name="menu_call" msgid="3992595586042260618">"連絡先に発信"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"メインの番号に設定する"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"既定のメールに設定"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"分割"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"連絡先を分割"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"連絡先を分割しました"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"連絡先を分割"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"この連絡先を複数の連絡先に分割してもよろしいですか?統合前の連絡先情報にそれぞれ分割されます。"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"統合"</string>
- <string name="menu_showSources" msgid="885215611438295455">"ソースを表示"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"ソースを非表示"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"連絡先を統合"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"連絡先の統合"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"<xliff:g id="NAME">%s</xliff:g>と統合する連絡先を選択します。"</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"すべての連絡先を表示"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"キャンセル"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"連絡先を編集"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"連絡先を新規登録"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"情報を追加"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"読み"</string>
<string name="label_notes" msgid="8337354953278341042">"メモ"</string>
<string name="label_ringtone" msgid="8833166825330686244">"着信音"</string>
- <string name="label_groups" msgid="7304551384542859026">"グループ"</string>
- <string name="group_list" msgid="8583361685440161307">"、<xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"グループを編集"</string>
<string name="ghostData_name" msgid="6490954238641157585">"名前"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"よみがな"</string>
<string name="ghostData_company" msgid="5414421120553765775">"会社"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"役職"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"IM名"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"メモ"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"電話番号"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"メールアドレス"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"住所"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"グループを表示"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"役職"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"この連絡先は削除されました"</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"連絡先を新規登録"</string>
<string name="selectLabel" msgid="4255424123394910733">"選択してください"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"メール"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"チャット"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"住所"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"その他"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"所属"</item>
<item msgid="7196592230748086755">"メモ"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"画像なし"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"画像がありません。"</string>
<string name="attachToContact" msgid="8820530304406066714">"連絡先のアイコン"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"新しいラベル名"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"表示オプション"</string>
<string name="displayGroups" msgid="2278964020773993336">"表示オプション"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"同期する範囲"</string>
- <string name="importFromSim" msgid="8383900146531125319">"連絡先をインポート"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ボイスメールに自動転送する"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"この番号にかけるとボイスメールに転送されます。"</string>
- <string name="default_ringtone" msgid="9099988849649827972">"端末既定"</string>
- <string name="addPicture" msgid="1594679312161537678">"アイコンを追加"</string>
+ <string name="default_ringtone" msgid="9099988849649827972">"プリセット着信音"</string>
<string name="changePicture" msgid="2943329047610967714">"アイコンを変更"</string>
<string name="removePicture" msgid="3041230993155966350">"アイコンを削除"</string>
<string name="noContacts" msgid="8579310973261953559">"連絡先がありません。"</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"一致する連絡先が見つかりません。"</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"電話番号付きの連絡先はありません。"</string>
- <string name="noFavorites" msgid="812766386743315815">"お気に入りなし"</string>
- <string name="select_group_title" msgid="7955698611959835612">"グループ"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"「<xliff:g id="GROUPNAME">%s</xliff:g>」グループには何も登録されていません。"</string>
- <string name="showAllGroups" msgid="5164410117611094297">"すべての連絡先"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"電話番号のある連絡先のみ"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"電話番号のある連絡先のみ表示する"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"表示する連絡先の選択"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g>件の連絡先、<xliff:g id="COUNTWITHPHONES">%2$d</xliff:g>件電話番号あり"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"全連絡先を同期"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Myコンタクト"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"電話番号のある連絡先"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Androidでスター付きの連絡先"</string>
<string name="savingContact" msgid="4075751076741924939">"連絡先を保存しています..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"表示オプションを保存中..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"連絡先を作成しました。"</string>
<string name="contactSavedToast" msgid="7152589189385441091">"連絡先を保存しました。"</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"エラー、連絡先の変更を保存できません。"</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"発信"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"電話番号"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"SMSを送信"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"メールを送信"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"メールアドレス"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"インスタントメッセージを送信"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"チャットアドレス"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"地図でみる"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"住所"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"所属"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"グループ"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"その他の情報"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"その他のオプション"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"開く"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"電話番号のある連絡先1件を表示"</item>
<item quantity="other" msgid="6133262880804110289">"電話番号のある連絡先<xliff:g id="COUNT">%d</xliff:g>件を表示"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"連絡先が<xliff:g id="COUNT">%d</xliff:g>件あります"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"連絡先が見つかりません"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"ソーシャル"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"連絡先1件"</item>
+ <item quantity="other" msgid="5660384247071761844">"連絡先<xliff:g id="COUNT">%d</xliff:g>件"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"連絡先"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"お気入り"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"電話"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"通話履歴から消去"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"通話履歴を全件消去"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"通話履歴なし"</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"通話履歴を消去"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"通話履歴を消去してもよろしいですか?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI(端末識別番号)"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"ボイスメール"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"ダイヤルして追加"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIMカードから読み取り中..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIMカードの連絡先"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Googleアカウントの連絡先同期"</font>" "\n"Googleサービスで使っている連絡先をこの携帯電話でも使えるようになります。"</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"表示する連絡先がありません(アカウントを追加した直後の場合は、連絡先の同期に数分かかることがあります)。"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"表示する連絡先がありません。"</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"表示できる連絡先がありません。"\n\n"連絡先を追加するには、まず"<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押し: "\n" "\n<li>"電話との同期が可能な連絡先のアカウントを追加または設定する場合は["<font fgcolor="#ffffffff"><b>"アカウント"</b></font>"]をタップします"\n</li>" "\n<li>"新しい連絡先を一から作成する場合は["<font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>"]をタップします"\n</li>" "\n<li>"["<font fgcolor="#ffffffff"><b>"インポート/エクスポート"</b></font>"]"\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"表示できる連絡先がありません(アカウントを追加した場合は、連絡先が同期されるまでに数分かかることがあります)。"\n\n"連絡先を追加するには、まず"<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押し: "\n" "\n<li>"電話との同期が可能な連絡先のアカウントを追加または設定する場合は["<font fgcolor="#ffffffff"><b>"アカウント"</b></font>"]をタップします"\n</li>" "\n<li>"表示される連絡先を変更するには["<font fgcolor="#ffffffff"><b>"表示オプション"</b></font>"]をタップします"\n</li>" "\n<li>"新しい連絡先を最初から作成する場合は["<font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>"]をタップします"\n</li>" "\n<li>"["<font fgcolor="#ffffffff"><b>"インポート/エクスポート"</b></font>"]"\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"表示できる連絡先がありません。"\n\n"連絡先を追加するには、まず"<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押し: "\n" "\n<li>"電話との同期が可能な連絡先のアカウントを追加または設定する場合は["<font fgcolor="#ffffffff"><b>"アカウント"</b></font>"]をタップします"\n</li>" "\n<li>"新しい連絡先を最初から作成する場合は["<font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>"]をタップします"\n</li>" "\n<li>"["<font fgcolor="#ffffffff"><b>"インポート/エクスポート"</b></font>"]"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"表示できる連絡先がありません(アカウントを追加した場合は、連絡先が同期されるまでに数分かかることがあります)。"\n\n"連絡先を追加するには、まず"<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押し: "\n" "\n<li>"電話との同期が可能な連絡先のアカウントを追加または設定する場合は["<font fgcolor="#ffffffff"><b>"アカウント"</b></font>"]をタップします"\n</li>" "\n<li>"表示される連絡先を変更するには["<font fgcolor="#ffffffff"><b>"表示オプション"</b></font>"]をタップします"\n</li>" "\n<li>"新しい連絡先を最初から作成する場合は["<font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>"]をタップします"\n</li>" "\n<li>"["<font fgcolor="#ffffffff"><b>"インポート/エクスポート"</b></font>"]"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"お気に入りはありません。"\n\n"お気に入りのリストに連絡先を追加するには: "\n\n" "<li>"["<b>"連絡先"</b>"]タブをタップします"\n</li>" "\n<li>"お気に入りに追加する連絡先をタップします"\n</li>" "\n<li>"連絡先名の横にあるスターをタップします"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"同期するグループを選択"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"すべての連絡先"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"スター付き"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"電話"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"別の通話を追加"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"通話詳細"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"通話要求の詳細が読み込めませんでした。"</string>
- <string name="call_type" msgid="3213526349444862087">"入力"</string>
<string name="type_incoming" msgid="6502076603836088532">"通話着信"</string>
<string name="type_outgoing" msgid="343108709599392641">"発信履歴"</string>
<string name="type_missed" msgid="2720502601640509542">"不在着信"</string>
- <string name="call_time" msgid="5805575214626630975">"時間"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"経過時間"</string>
- <string name="header_actions" msgid="229583643365836321">"操作"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"着信音: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"その他の項目を追加"</string>
- <string name="actionCall" msgid="695145166039381504">"<xliff:g id="TYPE">%s</xliff:g>に発信"</string>
- <string name="actionEmail" msgid="3870371552333656807">"<xliff:g id="TYPE">%s</xliff:g>にメールを送信"</string>
- <string name="actionText" msgid="6399049224844880108">"<xliff:g id="TYPE">%s</xliff:g>にSMSを送信"</string>
- <string name="actionChat" msgid="31079429748650300">"<xliff:g id="TYPE">%s</xliff:g>でチャット"</string>
- <string name="actionMap" msgid="1977955782051732775">"<xliff:g id="TYPE">%s</xliff:g>の住所を地図で見る"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"着信"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"ボイスメールに自動転送されます"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"<xliff:g id="RINGTONE_NAME">%s</xliff:g>に設定"</string>
<string name="callBack" msgid="5498224409038809224">"コールバック"</string>
<string name="callAgain" msgid="3197312117049874778">"再発信"</string>
<string name="returnCall" msgid="8171961914203617813">"発信"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g>分<xliff:g id="SECONDS">%s</xliff:g>秒"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"よく使う連絡先"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g>分<xliff:g id="SECONDS">%2$s</xliff:g>秒"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"よく使う連絡先"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"連絡先を追加"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"<xliff:g id="EMAIL">%s</xliff:g> を連絡先に追加しますか?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"すべて"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"スター"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"ポンド"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"ボイスメール"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"発信"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"発信番号"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"連絡先の写真"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"マイナス"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"プラス"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"SDカードがありません"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"SDカードを検出できませんでした"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"vCardを検索中"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"連絡先のインポート元を選択してください"</string>
<string name="import_from_sim" msgid="3859272228033941659">"SIMカードからインポート"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"SDカードからインポート"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"SDカードにエクスポート"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"表示可能な連絡先を共有"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"vCardファイルを1つインポート"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"複数のvCardファイルをインポート"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"すべてのvCardファイルをインポート"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"予期しない理由によりvCardの解析に失敗しました"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"vCardの解析に失敗しました。正しいフォーマットですが、現在サポートされていません。"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"SDカードでvCardファイルが見つかりません"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"選択した内容の有効なvCardエントリが見つかりません"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"1つ以上のファイルをインポートできませんでした(%s)。"</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"不明なエラー"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"vCardファイルの選択"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"インポートするvCardファイルを選択してください"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"vCardを読み取り中"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"vCardファイルを読み取り中"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"vCardデータをインポート中"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"vCardデータの読み取りに失敗しました"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"vCardを読み取れません。"\n"理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>件の連絡先"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>件のファイル"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"すべての連絡先"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"電話だけに保存されている連絡先"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"連絡先をエクスポート"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>件の連絡先"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>件のファイル"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"エクスポートの確認"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"連絡先リストを「<xliff:g id="VCARD_FILENAME">%s</xliff:g>」にエクスポートしますか?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"連絡先データのエクスポートに失敗しました"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"エクスポートできる連絡先がありません"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"SDカードのvCardファイルが多すぎます"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"指定したファイル名が長すぎます(「<xliff:g id="FILENAME">%s</xliff:g>」)"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"ディレクトリ\"<xliff:g id="DIR_NAME">%s</xliff:g>\"を開けません"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"連絡先データのエクスポート"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"連絡先データを\"<xliff:g id="FILE_NAME">%s</xliff:g>\"にエクスポートしています"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"エクスポータを初期化できませんでした: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"エクスポート中にエラーが発生しました: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"データベース情報の取得に失敗しました"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"エクスポートできる連絡先がありません。エクスポートできないデータを選択している可能性があります。"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"エクスポートできる連絡先がありません。携帯電話に連絡先を登録している場合、データプロバイダが外部への連絡先のエクスポートをすべて禁止している可能性があります。"</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"vCardコンポーザーが正しく初期化されていません"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\"を開けませんでした: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"を開けませんでした: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>件のファイル"</string>
<string name="search_settings_description" msgid="2675223022992445813">"連絡先の名前"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2秒間の停止を追加"</string>
<string name="add_wait" msgid="3360818652790319634">"着信を追加"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"発信"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"使用している発信"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"使用しているSMS"</string>
<string name="make_primary" msgid="5829291915305113983">"この選択を保存"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"すべての連絡先"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"「<xliff:g id="GROUP">%s</xliff:g>」を同期から除外すると、グループに含まれない連絡先もすべて同期から除外されます。"</string>
<string name="account_phone" msgid="4025734638492419713">"電話のみ(非同期)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"表示名"</string>
<string name="call_custom" msgid="7756571794763171802">"<xliff:g id="CUSTOM">%s</xliff:g>に発信"</string>
<string name="call_home" msgid="1990519474420545392">"自宅に発信"</string>
<string name="call_mobile" msgid="7502236805487609178">"携帯電話に発信"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"その他に発信"</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="7777261153532968503">"FAX(その他)に発信"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"その他に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="3930666870074006114">"FAX(その他)に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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"その他にメール"</string>
+ <string name="email_other" msgid="3454004077967657109">"メール送信"</string>
<string name="email_custom" msgid="7548003991586214105">"<xliff:g id="CUSTOM">%s</xliff:g>にメール"</string>
<string name="email" msgid="5668400997660065897">"メール"</string>
<string name="map_home" msgid="1243547733423343982">"自宅の住所を表示"</string>
<string name="map_work" msgid="1360474076921878088">"勤務先の住所を表示"</string>
- <string name="map_other" msgid="5560707927535653892">"その他の住所を表示"</string>
+ <string name="map_other" msgid="3817820803587012641">"住所を表示"</string>
<string name="map_custom" msgid="6184363799976265281">"<xliff:g id="CUSTOM">%s</xliff:g>の住所を表示"</string>
<string name="chat_aim" msgid="2588492205291249142">"AIMでチャット"</string>
<string name="chat_msn" msgid="8041633440091073484">"Windows Liveでチャット"</string>
@@ -398,7 +343,7 @@
<string name="chat" msgid="9025361898797412245">"チャット"</string>
<string name="postal_street" msgid="8133143961580058972">"番地"</string>
<string name="postal_pobox" msgid="4431938829180269821">"私書箱"</string>
- <string name="postal_neighborhood" msgid="1450783874558956739">"近所"</string>
+ <string name="postal_neighborhood" msgid="1450783874558956739">"街区 (中国等で使用)"</string>
<string name="postal_city" msgid="6597491300084895548">"市区町村"</string>
<string name="postal_region" msgid="6045263193478437672">"都道府県"</string>
<string name="postal_postcode" msgid="572136414136673751">"郵便番号"</string>
@@ -408,15 +353,29 @@
<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_given" msgid="6853570431394449191">"名のフリガナ"</string>
- <string name="name_phonetic_middle" msgid="8643721493320405200">"ミドルネームのフリガナ"</string>
- <string name="name_phonetic_family" msgid="462095502140180305">"姓のフリガナ"</string>
- <string name="split_label" msgid="8262112659919449087">"分割"</string>
- <string name="split_explanation" msgid="1824739956426973592">"このデータから独自の連絡先を作成します。"</string>
- <string name="account_name_format" msgid="4421123930035299208">"<xliff:g id="SOURCE">%1$s</xliff:g>アカウント: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
+ <string name="name_phonetic_given" msgid="6853570431394449191">"名のよみがな"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ミドルネームのよみがな"</string>
+ <string name="name_phonetic_family" msgid="462095502140180305">"姓のよみがな"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>からの連絡先"</string>
<string name="from_account_format" msgid="687567483928582084">"<xliff:g id="SOURCE">%1$s</xliff:g>からの連絡先"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"この写真を使用"</string>
<string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g>からの連絡先情報はこの携帯端末では編集できません。"</string>
<string name="no_contact_details" msgid="6754415338321837001">"この連絡先の詳細情報はありません"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"並び替え順"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"名"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"姓"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"名前の表示形式"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"名が先"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"姓が先"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"連絡先を検索"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"すべての連絡先を検索"</string>
+ <string name="take_photo" msgid="7496128293167402354">"写真を撮影"</string>
+ <string name="pick_photo" msgid="448886509158039462">"ギャラリーから写真を選ぶ"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"言語の変更に伴い連絡先リストを更新しています。"\n\n"しばらくお待ちください..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"連絡先リストを更新しています。"\n\n"お待ちください..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"連絡先をアップグレードしています。"\n\n"アップグレード処理には約<xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g>MBの内部ストレージが必要です。"\n\n"次のいずれかのオプションを選択してください:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"一部のアプリケーションをアンインストール"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"アップグレードを再試行"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"検索結果: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"検索中..."</string>
</resources>
diff --git a/res/values-ko/donottranslate_config.xml b/res/values-ko/donottranslate_config.xml
new file mode 100644
index 0000000..e52f490
--- /dev/null
+++ b/res/values-ko/donottranslate_config.xml
@@ -0,0 +1,35 @@
+<?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.
+*/
+-->
+
+<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 58ac6ef..d80ea01 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"주소록"</string>
@@ -21,7 +22,7 @@
<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="callShortcutActivityTitle" msgid="6065749861423648991">"전화번호 선택"</string>
<string name="messageShortcutActivityTitle" msgid="3084542316620335911">"메시지를 보낼 번호 선택"</string>
<string name="starredList" msgid="4817256136413959463">"중요주소록"</string>
<string name="frequentList" msgid="7154768136473953056">"자주 사용하는 연락처"</string>
@@ -34,10 +35,9 @@
<string name="menu_search" msgid="9147752853603483719">"검색"</string>
<string name="menu_newContact" msgid="1209922412763274638">"새 연락처"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"연락처 보기"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"통화: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="5142851348489387516">"<xliff:g id="NAME">%s</xliff:g>님에게 전화걸기"</string>
<string name="menu_addStar" msgid="2908478235715404876">"즐겨찾기에 추가"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"즐겨찾기에서 삭제"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"바코드 표시"</string>
<string name="menu_editContact" msgid="3452858480713561396">"연락처 수정"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"연락처 삭제"</string>
<string name="menu_call" msgid="3992595586042260618">"연락처로 전화 걸기"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"기본 번호로 설정"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"기본 이메일로 설정"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"분할"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"연락처 분할"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"연락처가 분할되었습니다."</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"연락처 분할"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"연락처 하나를 여러 주소록으로 분할하시겠습니까? 가입된 연락처 정보 세트마다 하나씩 만드시겠습니까?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"결합"</string>
- <string name="menu_showSources" msgid="885215611438295455">"소스 표시"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"소스 숨기기"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"연락처 결합"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"연락처 결합"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"<xliff:g id="NAME">%s</xliff:g>와(과) 결합할 연락처를 선택하세요."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"모든 연락처 표시"</string>
@@ -72,56 +68,36 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"되돌리기"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"연락처 수정"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"새 연락처"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"추가 정보"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"소리나는 대로"</string>
<string name="label_notes" msgid="8337354953278341042">"메모"</string>
<string name="label_ringtone" msgid="8833166825330686244">"벨소리"</string>
- <string name="label_groups" msgid="7304551384542859026">"그룹"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"그룹 수정"</string>
<string name="ghostData_name" msgid="6490954238641157585">"이름"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"이름(소리나는 대로)"</string>
<string name="ghostData_company" msgid="5414421120553765775">"회사"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"위치"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"메신저 이름"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"내 메모"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"전화번호"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"이메일 주소"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"주소"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"그룹 표시"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"제목"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"연락처가 없습니다."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"새 연락처 만들기"</string>
<string name="selectLabel" msgid="4255424123394910733">"라벨 선택"</string>
- <string name="phoneLabelsGroup" msgid="6468091477851199285">"휴대전화"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"전화"</string>
<string name="emailLabelsGroup" msgid="8389931313045344406">"이메일"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"메신저"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"주소"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"기타"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"조직"</item>
<item msgid="7196592230748086755">"메모"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"사진 없음"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"휴대전화에 사진이 없습니다."</string>
<string name="attachToContact" msgid="8820530304406066714">"연락처 아이콘"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"라벨 이름 맞춤 설정"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"표시 옵션"</string>
<string name="displayGroups" msgid="2278964020773993336">"표시 옵션"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"동기화 그룹 수정"</string>
- <string name="importFromSim" msgid="8383900146531125319">"주소록 가져오기"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"수신전화를 바로 음성메일로 보내기"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"수신전화가 바로 음성메일로 연결됩니다."</string>
+ <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"수신전화를 바로 음성사서함으로 보내기"</string>
<string name="default_ringtone" msgid="9099988849649827972">"기본값"</string>
- <string name="addPicture" msgid="1594679312161537678">"아이콘 추가"</string>
- <string name="changePicture" msgid="2943329047610967714">"변경 아이콘"</string>
+ <string name="changePicture" msgid="2943329047610967714">"아이콘 변경"</string>
<string name="removePicture" msgid="3041230993155966350">"아이콘 삭제"</string>
<string name="noContacts" msgid="8579310973261953559">"주소록이 없습니다."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"일치하는 연락처가 없습니다."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"전화번호가 포함된 주소록이 없습니다."</string>
- <string name="noFavorites" msgid="812766386743315815">"즐겨찾기가 없습니다."</string>
- <string name="select_group_title" msgid="7955698611959835612">"그룹"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"\'<xliff:g id="GROUPNAME">%s</xliff:g>\' 그룹이 비어 있습니다."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"모든 주소록"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"전화가 있는 연락처만"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"전화번호가 있는 연락처만 표시"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"표시할 연락처 선택"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"연락처 <xliff:g id="COUNT_0">%1$d</xliff:g>개, 전화가 있는 연락처 <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g>개"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"모든 주소록 동기화"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"내 주소록"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"전화번호가 포함된 주소록"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Android 중요주소록"</string>
<string name="savingContact" msgid="4075751076741924939">"연락처 저장 중..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"표시 옵션 저장 중...."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"연락처를 만들었습니다."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"연락처를 저장했습니다."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"오류가 발생해서 연락처 변경사항을 저장할 수 없습니다."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"전화걸기"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"전화번호"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"문자 보내기"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"이메일 보내기"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"이메일 주소"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"채팅 메시지 보내기"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"채팅 주소"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"지도상의 주소"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"주소"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"조직"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"그룹"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"기타 정보"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"기타 옵션"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"더보기"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"전화번호와 함께 연락처 1개 표시"</item>
<item quantity="other" msgid="6133262880804110289">"전화번호가 포함된 주소록 <xliff:g id="COUNT">%d</xliff:g>개 표시"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"연락처 <xliff:g id="COUNT">%d</xliff:g>개를 찾았습니다."</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"연락처를 찾을 수 없습니다."</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"소셜"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1개의 연락처"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g>개의 연락처"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"주소록"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"즐겨찾기"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"휴대전화"</string>
@@ -178,15 +138,17 @@
<string name="liveFolderFavorites" msgid="3100957542927222282">"중요주소록"</string>
<string name="liveFolderPhone" msgid="3739376066610926780">"전화번호가 포함된 주소록"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"문자 메시지 보내기"</string>
- <string name="recentCalls_callNumber" msgid="1756372533999226126">"통화: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"전화걸기: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"통화하기 전에 번호 수정"</string>
<string name="recentCalls_addToContact" msgid="1429899535546487008">"주소록에 추가"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"통화기록에서 삭제"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"통화기록 지우기"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"통화기록이 없습니다."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"통화 기록 지우기"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"통화 기록을 삭제하시겠습니까?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
- <string name="voicemail" msgid="3851469869202611441">"음성메일"</string>
+ <string name="voicemail" msgid="3851469869202611441">"음성사서함"</string>
<string name="unknown" msgid="740067747858270469">"알 수 없음"</string>
<string name="private_num" msgid="6374339738119166953">"비공개 번호"</string>
<string name="payphone" msgid="4864313342828942922">"공중전화"</string>
@@ -194,44 +156,30 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"전화번호를 눌러 통화 추가"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM 카드에서 로딩 중..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM 카드 주소록"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Google 주소록 동기화"</font>" "\n"휴대전화에 동기화하면 어디서나 주소록을 사용할 수 있습니다."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"표시할 연락처가 없습니다. 방금 계정을 추가한 경우 연락처를 동기화하는 데 몇 분 정도 걸릴 수 있습니다."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"표시할 연락처가 없습니다."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"표시할 연락처가 없습니다."\n\n"연락처를 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 터치합니다. "\n" "\n<li><font fgcolor="#ffffffff"><b>"계정"</b></font>": 휴대전화에 동기화할 수 있는 연락처가 있는 계정을 구성하거나 추가하려면 터치합니다. "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"새 연락처"</b></font>": 연락처를 새로 만들려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"가져오기/내보내기"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"표시할 연락처가 없습니다. 방금 계정을 추가한 경우 연락처를 동기화하는 데 몇 분 정도 걸릴 수 있습니다."\n\n"연락처를 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 터치합니다. "\n" "\n<li><font fgcolor="#ffffffff"><b>"계정"</b></font>": 휴대전화에 동기화할 수 있는 연락처가 있는 계정을 구성하거나 추가하려면 터치합니다. "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"표시 옵션"</b></font>": 표시되는 연락처를 변경하려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"새 연락처"</b></font>": 연락처를 새로 만들려면 터치합니다. "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"가져오기/내보내기"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"표시할 연락처가 없습니다"\n\n"연락처를 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 터치합니다. "\n" "\n<li><font fgcolor="#ffffffff"><b>"계정"</b></font>": 휴대전화에 동기화할 수 있는 연락처가 있는 계정을 구성하거나 추가하려는 경우 터치합니다. "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"새 연락처"</b></font>": 연락처를 새로 만들려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"가져오기/내보내기"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"표시할 연락처가 없습니다. 방금 계정을 추가한 경우 연락처를 동기화하는 데 몇 분 정도 걸릴 수 있습니다."\n\n"연락처를 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 터치합니다. "\n" "\n<li><font fgcolor="#ffffffff"><b>"계정"</b></font>": 휴대전화에 동기화할 수 있는 연락처가 있는 계정을 구성하거나 추가하려면 터치합니다. "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"표시 옵션"</b></font>": 표시되는 연락처를 변경하려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"새 연락처"</b></font>": 연락처를 새로 만들려면 터치합니다. "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"가져오기/내보내기"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"즐겨찾기가 없습니다. "\n\n"즐겨찾기 목록에 연락처를 추가하려면 "\n\n<li><b>"주소록"</b>" 탭을 터치하고"\n</li>" "\n<li>"즐겨찾기에 추가할 연락처를 터치하고"\n</li>" "\n<li>"연락처 이름 옆의 별표를 터치합니다."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"동기화할 그룹 선택"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"모든 연락처"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"중요 주소록"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"휴대전화"</string>
+ <string name="liveFolder_phones_label" msgid="1709786878793436245">"전화번호"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"터치톤 키패드 사용"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"진행 중인 통화로 돌아가기"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"통화 추가"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"통화 세부정보"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"요청한 통화의 세부정보를 읽지 못했습니다."</string>
- <string name="call_type" msgid="3213526349444862087">"유형"</string>
<string name="type_incoming" msgid="6502076603836088532">"수신전화"</string>
- <string name="type_outgoing" msgid="343108709599392641">"발신 통화"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"발신전화"</string>
<string name="type_missed" msgid="2720502601640509542">"부재중 전화"</string>
- <string name="call_time" msgid="5805575214626630975">"시간"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g>(<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"통화 시간"</string>
- <string name="header_actions" msgid="229583643365836321">"동작"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"벨소리: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"항목 추가"</string>
- <string name="actionCall" msgid="695145166039381504">"통화(<xliff:g id="TYPE">%s</xliff:g>)"</string>
- <string name="actionEmail" msgid="3870371552333656807">"이메일(<xliff:g id="TYPE">%s</xliff:g>)"</string>
- <string name="actionText" msgid="6399049224844880108">"문자(<xliff:g id="TYPE">%s</xliff:g>)"</string>
- <string name="actionChat" msgid="31079429748650300">"<xliff:g id="TYPE">%s</xliff:g>로 채팅"</string>
- <string name="actionMap" msgid="1977955782051732775">"<xliff:g id="TYPE">%s</xliff:g> 주소 보기"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"수신전화"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"바로 음성메일로 연결됩니다."</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"<xliff:g id="RINGTONE_NAME">%s</xliff:g>(으)로 설정"</string>
- <string name="callBack" msgid="5498224409038809224">"통화"</string>
- <string name="callAgain" msgid="3197312117049874778">"다시 통화"</string>
- <string name="returnCall" msgid="8171961914203617813">"회신 통화에 전화걸기"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"자주 통화한 목록"</string>
+ <string name="callBack" msgid="5498224409038809224">"전화 걸기"</string>
+ <string name="callAgain" msgid="3197312117049874778">"다시 걸기"</string>
+ <string name="returnCall" msgid="8171961914203617813">"전화 걸기"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g>분 <xliff:g id="SECONDS">%2$s</xliff:g>초"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"자주 연락하는 사람들의 연락처"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"연락처 추가"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\'<xliff:g id="EMAIL">%s</xliff:g>\'을(를) 주소록에 추가하겠습니까?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"모두"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"별"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"#"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"음성사서함"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"전화걸기"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"백스페이스"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"전화를 걸 번호"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"주소록 사진"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"빼기"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"더하기"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"SD 카드 없음"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"SD 카드가 발견되지 않았습니다."</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"vCard 검색"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"어디에서 주소록을 가져오시겠습니까?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"SIM 카드에서 가져오기"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"SD 카드에서 가져오기"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"SD 카드로 내보내기"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"표시되는 연락처 공유"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"vCard 파일 한 개 가져오기"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"vCard 파일 여러 개 가져오기"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"모든 vCard 파일 가져오기"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"예기치 못한 이유로 인해 vCard를 구문분석하지 못했습니다."</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"올바른 형식처럼 보이지만 현재 구현 환경에서는 VCard를 지원하지 않기 때문에 VCard 구문 분석에 실패했습니다."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"SD 카드에 VCard 파일이 없습니다."</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"선택한 항목에 유효한 VCard 항목이 없습니다."</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"하나 이상의 파일을 가져오지 못했습니다(%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"알 수 없는 오류"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"vCard 파일 선택"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"가져올 vCard 파일을 선택하세요."</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"vCard 읽는 중"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"vCard 파일 읽는 중"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"vCard 데이터 가져오는 중"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"vCard 데이터를 읽어오지 못했습니다."</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"vCard를 읽지 못했습니다. "\n"실패 이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\'"</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"주소록 <xliff:g id="TOTAL_NUMBER">%s</xliff:g>개 중 <xliff:g id="CURRENT_NUMBER">%s</xliff:g>개"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"파일 <xliff:g id="TOTAL_NUMBER">%s</xliff:g>개 중 <xliff:g id="CURRENT_NUMBER">%s</xliff:g>개"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"모든 연락처"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"로컬로 저장된 연락처"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"연락처 내보내기"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"연락처 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>개(총 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>개) 내보내는 중"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"파일 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>개 중 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>개"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"내보내기 확인"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"\'<xliff:g id="VCARD_FILENAME">%s</xliff:g>\'(으)로 연락처 목록을 내보내시겠습니까?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"연락처 데이터를 내보내지 못했습니다."</string>
@@ -287,21 +235,19 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"내보낼 수 있는 연락처가 없습니다."</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"SD 카드에 vCard 파일이 너무 많습니다."</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"필수 파일 이름이 너무 깁니다(\'<xliff:g id="FILENAME">%s</xliff:g>\')."</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"대상 디렉토리(\'<xliff:g id="DIR_NAME">%s</xliff:g>\')를 열거나 만들 수 없습니다."</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"연락처 데이터 내보내기"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"연락처 데이터를 \'<xliff:g id="FILE_NAME">%s</xliff:g>\'(으)로 내보내는 중"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"내보내기를 초기화하지 못했습니다. \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"내보내는 중에 오류가 발생했습니다. \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"데이터베이스 정보를 가져오지 못했습니다."</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"내보낼 수 있는 연락처가 없습니다. 내보낼 수 없는 데이터를 선택할 수 있습니다."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"내보낼 수 있는 연락처가 없습니다. 휴대전화에 실제로 연락처가 있다면 일부 데이터 제공업체에서 모든 연락처를 휴대전화 외부로 내보내지 못하도록 금지했을 수 있습니다."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"vCard 작성기가 바르게 초기화되지 않았습니다."</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"\'<xliff:g id="FILE_NAME">%s</xliff:g>\'을(를) 열 수 없습니다. <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"\'<xliff:g id="FILE_NAME">%1$s</xliff:g>\'을(를) 열 수 없습니다. <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"연락처 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>개(총 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>개) 내보내는 중"</string>
<string name="search_settings_description" msgid="2675223022992445813">"연락처 명단"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2초 간 일시 정지 추가"</string>
<string name="add_wait" msgid="3360818652790319634">"대기 시간 추가"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"전화걸기"</string>
- <string name="call_disambig_title" msgid="1911302597959335178">"다음을 사용하여 통화:"</string>
+ <string name="call_disambig_title" msgid="1911302597959335178">"전화 걸기:"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"다음을 사용하여 문자 보내기:"</string>
<string name="make_primary" msgid="5829291915305113983">"이 선택사항 저장"</string>
<string name="quickcontact_missing_app" msgid="4600366393134289038">"이 작업을 처리하는 응용프로그램을 찾을 수 없습니다."</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"모든 연락처"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"\'<xliff:g id="GROUP">%s</xliff:g>\'을(를) 동기화에서 제거하면 그룹화되지 않은 연락처도 동기화에서 제거됩니다."</string>
<string name="account_phone" msgid="4025734638492419713">"전화기 전용(동기화되지 않음)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"표시 이름"</string>
<string name="call_custom" msgid="7756571794763171802">"<xliff:g id="CUSTOM">%s</xliff:g>(으)로 전화걸기"</string>
<string name="call_home" msgid="1990519474420545392">"집으로 전화걸기"</string>
<string name="call_mobile" msgid="7502236805487609178">"휴대전화로 전화걸기"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"다른 연락처로 전화걸기"</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_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="7777261153532968503">"다른 팩스로 전화걸기"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"다른 연락처로 문자 보내기"</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="3930666870074006114">"기타 팩스로 문자 보내기"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"다른 연락처로 이메일 보내기"</string>
+ <string name="email_other" msgid="3454004077967657109">"이메일"</string>
<string name="email_custom" msgid="7548003991586214105">"이메일(<xliff:g id="CUSTOM">%s</xliff:g>)"</string>
<string name="email" msgid="5668400997660065897">"이메일"</string>
<string name="map_home" msgid="1243547733423343982">"집 주소 보기"</string>
<string name="map_work" msgid="1360474076921878088">"직장 주소 보기"</string>
- <string name="map_other" msgid="5560707927535653892">"기타 주소 보기"</string>
+ <string name="map_other" msgid="3817820803587012641">"주소 보기"</string>
<string name="map_custom" msgid="6184363799976265281">"<xliff:g id="CUSTOM">%s</xliff:g> 주소 보기"</string>
<string name="chat_aim" msgid="2588492205291249142">"AIM으로 채팅"</string>
<string name="chat_msn" msgid="8041633440091073484">"Windows Live로 채팅"</string>
@@ -406,17 +351,31 @@
<string name="name_given" msgid="1687286314106019813">"이름"</string>
<string name="name_family" msgid="3416695586119999058">"성"</string>
<string name="name_prefix" msgid="59756378548779822">"이름 접두어"</string>
- <string name="name_middle" msgid="8467433655992690326">"이름"</string>
+ <string name="name_middle" msgid="8467433655992690326">"중간 이름"</string>
<string name="name_suffix" msgid="3855278445375651441">"이름 접미어"</string>
<string name="name_phonetic_given" msgid="6853570431394449191">"이름(소리나는 대로)"</string>
- <string name="name_phonetic_middle" msgid="8643721493320405200">"이름(소리나는 대로)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"중간 이름(소리나는 대로)"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"성(소리나는 대로)"</string>
- <string name="split_label" msgid="8262112659919449087">"분할"</string>
- <string name="split_explanation" msgid="1824739956426973592">"데이터를 독립된 연락처로 만듭니다."</string>
- <string name="account_name_format" msgid="4421123930035299208">"<xliff:g id="SOURCE">%1$s</xliff:g> 계정: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> 연락처"</string>
<string name="from_account_format" msgid="687567483928582084">"출처: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"사진 사용"</string>
<string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g> 연락처 정보는 이 기기에서 수정할 수 없습니다."</string>
<string name="no_contact_details" msgid="6754415338321837001">"연락처에 대한 추가 정보가 없습니다."</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"목록 정렬 기준"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"이름"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"성"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"연락처 이름 표시 방법:"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"이름 먼저 표시"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"성 먼저 표시"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"연락처 검색"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"모든 연락처 검색"</string>
+ <string name="take_photo" msgid="7496128293167402354">"사진 찍기"</string>
+ <string name="pick_photo" msgid="448886509158039462">"갤러리에서 사진 선택"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"변경된 언어를 반영하도록 연락처 목록을 업데이트하는 중입니다."\n\n"잠시 기다려 주세요."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"연락처 목록을 업데이트하고 있습니다."\n\n"잠시 기다려 주세요..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"연락처를 업그레이드하는 중입니다. "\n\n"업그레이드 프로세스에는 약 <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g>Mb의 휴대전화 내부 저장공간이 필요합니다."\n\n"다음 옵션 중 하나를 선택하세요."</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"일부 응용프로그램 제거"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"업그레이드 다시 시도"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"<xliff:g id="QUERY">%s</xliff:g>에 대한 검색결과"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"검색 중..."</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 2f14dd8..73d2e19 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Kontakter"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Legg til som favoritt"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Fjern fra favoritter"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Vis strekkode"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Rediger kontakt"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Slett kontakt"</string>
<string name="menu_call" msgid="3992595586042260618">"Ring kontakt"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Gjør til foretrukket nummer"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Bruk som standard e-post"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Del"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Del kontakt"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Kontakt delt"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Del opp kontakt"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Er du sikker på at du ønsker å dele opp denne kontakten i flere, en for hvert sett med kontaktinformasjon som den er satt sammen av?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Foren"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Vis kilder"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Skjul kilder"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Foren kontakt"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Slå sammen kontakter"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Velg kontakten du ønsker å slå sammen med <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Vis alle kontakter"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Tilbakestill"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Rediger kontakt"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Ny kontakt"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Mer informasjon"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonetisk"</string>
<string name="label_notes" msgid="8337354953278341042">"Notater"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Ringetone"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupper"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Rediger grupper"</string>
<string name="ghostData_name" msgid="6490954238641157585">"For- og etternavn"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Fonetisk navn"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Firma"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Stilling"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Lynmeldingsnavn"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Mine notater"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Telefonnummer"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-postadresse"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Postadresse"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Vis gruppe"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Tittel"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Kontakten finnes ikke."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Opprett ny kontakt"</string>
<string name="selectLabel" msgid="4255424123394910733">"Velg etikett"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-post"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Lynmeldinger"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Postadresse"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Annet"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organisasjon"</item>
<item msgid="7196592230748086755">"Notat"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Ingen bilder"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Det er ingen bilder på telefonen."</string>
<string name="attachToContact" msgid="8820530304406066714">"Kontaktikon"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Egendefinert etikett"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Vis grupper"</string>
<string name="displayGroups" msgid="2278964020773993336">"Vis grupper"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Rediger synkr. grp."</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importer kontakter"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send anrop direkte til telefonsvarer."</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Anrop blir sendt direkte til telefonsvarer."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Standardvalg"</string>
- <string name="addPicture" msgid="1594679312161537678">"Legg til ikon"</string>
<string name="changePicture" msgid="2943329047610967714">"Endre ikon"</string>
<string name="removePicture" msgid="3041230993155966350">"Fjern ikon"</string>
<string name="noContacts" msgid="8579310973261953559">"Ingen kontakter."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Fant ingen kontakter."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Ingen kontakter med telefonnummer."</string>
- <string name="noFavorites" msgid="812766386743315815">"Ingen favoritter."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupper"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Gruppen «<xliff:g id="GROUPNAME">%s</xliff:g>» er tom."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Alle kontakter"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Kun kontakter med telefon"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Vis kun kontakter med telefonnummer"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Kontaktgrupper"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> kontakter, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> med telefoner"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Synkroniser alle kontakter"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Mine kontakter"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Kontakter med telefonnummer"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Stjernemerket i Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Lagrer kontakt…"</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Lagrer viste grupper…"</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Kontakt opprettet."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Kontakt lagret."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Kunne ikke lagre kontaktendringene."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Ring nummer"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Telefonnummer"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Send SMS/MMS"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Send e-post"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"E-postadresser"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Send lynmelding"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Prateadresser"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Se i kart"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Postadresser"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organisasjoner"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupper"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Annen informasjon"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Andre alternativer"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Mer"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Viser 1 kontakt med telefonnummer"</item>
<item quantity="other" msgid="6133262880804110289">"Viser <xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnumre"</item>
@@ -169,9 +126,12 @@
<item quantity="other" msgid="7752927996850263152">"Fant <xliff:g id="COUNT">%d</xliff:g> kontakter"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Fant ingen kontakter"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Sosial"</string>
- <string name="contactsIconLabel" msgid="7666609097606552806">"Alle"</string>
- <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Vanlige"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 kontakt"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> kontakter"</item>
+ </plurals>
+ <string name="contactsIconLabel" msgid="7666609097606552806">"Kontakter"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritter"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Logg"</string>
<string name="liveFolderAll" msgid="4789010460767506206">"Alle kontakter"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Fjern fra anropslogg"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Tøm anropslogg"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Anropsloggen er tom."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Tøm samtalelogg"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Er du sikker på at du vil tømme samtaleloggen?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Telefonsvarer"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Ring for å legge til en samtale"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Henter fra SIM-kort…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Synkroniser Google-kontaktene dine!"</font>" "\n"Etter å ha synkronisert telefonen vil kontaktene dine bli tilgjengelig overalt."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Du har ingen kontakter å vise. (Hvis du nettopp har lagt til en konto, kan det ta noen minutter å synkronisere kontaktene.)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Du har ingen kontakter å vise."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Du har ingen kontakter å vise. "\n\n"Slik legger du til en kontakt: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer"</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/eksportér"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer "</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/Eksportér"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Du har ingen kontakter å vise. "\n\n"Slik legger du til en kontakt: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer"</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/eksportér"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer "</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/Eksportér"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har ingen favoritter."\n\n"Slik legger du til en kontakt i favorittlisten:"\n\n" "<li>"Trykk på fanen "<b>"Kontakter"</b>" "\n</li>" "\n<li>"Trykk på kontakten du vil legge til i favoritter"\n</li>" "\n<li>"Trykk på stjernen ved siden av kontaktnavnet"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Velg grupper som skal synkroniseres"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Alle kontakter"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Med stjerne"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoner"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Legg til en samtale"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Samtaleinformasjon"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Kunne ikke lese informasjon for forespurt samtale."</string>
- <string name="call_type" msgid="3213526349444862087">"Type"</string>
<string name="type_incoming" msgid="6502076603836088532">"Innkommende samtale"</string>
<string name="type_outgoing" msgid="343108709599392641">"Utgående samtale"</string>
<string name="type_missed" msgid="2720502601640509542">"Tapt anrop"</string>
- <string name="call_time" msgid="5805575214626630975">"Tid"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Varighet"</string>
- <string name="header_actions" msgid="229583643365836321">"Handlinger"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Ringetone: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Legg til flere elementer"</string>
- <string name="actionCall" msgid="695145166039381504">"Ring <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Send e-post til <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Send SMS til <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Prat over <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Vis <xliff:g id="TYPE">%s</xliff:g>adresse"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Innkommende samtaler"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Vil bli sendt rett til telefonsvarer"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Sett til <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Ofte ringt"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sek"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Ofte kontaktet"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Legg til kontakt"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Legg til «<xliff:g id="EMAIL">%s</xliff:g>» som kontakt?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Alle"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"stjerne"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"firkant"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"talepostkasse"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"tilbaketast"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"ring til"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"kontaktens bilde"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"minusknapp"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plussknapp"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Mangler minnekort"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Fant ikke noe minnekort"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Leter etter VCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Hvor ønsker du å hente kontakter fra?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importér fra SIM-kort"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importér fra minnekort"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Eksportér til minnekort"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Del synlige kontakter"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importer én VCard-fil"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importer flere vCard-filer"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importer alle vCard-filer"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Kan ikke analysere VCard av uventet årsak"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Kan ikke analysere VCard selv om det ser ut til å være i riktig format, fordi den aktuelle implementeringen ikke støtter det."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Fant ingen VCard-filer på minnekortet"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Fant ingen VCard-filer for valget ditt"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Importeringen av én eller flere filer mislyktes (%s)"</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Ukjent feil"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Velg VCard-fil"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Velg en VCard-fil som skal importeres"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Leser VCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Leser VCard-fil(er)"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importerer VCard-data"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Kunne ikke lese VCard-data"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Kunne ikke lese VCard-data"\n"Feilårsak: «<xliff:g id="FAIL_REASON">%s</xliff:g>»"</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> filer"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Alle kontakter"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Lokalt lagrede kontakter"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Eksporter kontakter"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontakter"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> filer"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Eksportbekreftelse"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Vil du eksportere kontaktlisten din til «<xliff:g id="VCARD_FILENAME">%s</xliff:g>»?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Kunne ikke eksportere kontaktlisten"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Det finnes ingen eksporterbar kontakt."</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"For mange VCard-datafiler på minnekortet"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"For langt filnavn kreves («<xliff:g id="FILENAME">%s</xliff:g>»)"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Kan ikke åpne eller opprette målkatalogen «<xliff:g id="DIR_NAME">%s</xliff:g>»"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksporterer kontaktdata"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Eksporterer kontaktdata til «<xliff:g id="FILE_NAME">%s</xliff:g>»"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Kunne ikke starte eksporteringen: «<xliff:g id="EXACT_REASON">%s</xliff:g>»"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Det oppstod feil ved eksport: «<xliff:g id="EXACT_REASON">%s</xliff:g>»"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Klarte ikke å hente databaseinformasjon"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Det finnes ingen eksporterbar kontakt."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Det finnes ingen eksporterbare kontakter. Hvis du har kontakter på telefonen, kan disse i enkelte tilfeller ikke eksporteres. Dette skyldes i så fall at dataleverandøren ikke tillater det."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Objektet for vCard-redigering er ikke riktig initialisert"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Kunne ikke åpne «<xliff:g id="FILE_NAME">%s</xliff:g>»: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"Kunne ikke åpne «<xliff:g id="FILE_NAME">%1$s</xliff:g>»: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontakter"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Navn på kontakter"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Legg til pause på 2 sek."</string>
<string name="add_wait" msgid="3360818652790319634">"Legg til Vent"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Ring"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Ring med"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Send SMS med"</string>
<string name="make_primary" msgid="5829291915305113983">"Husk dette valget"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Alle kontakter"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Hvis «<xliff:g id="GROUP">%s</xliff:g>» fjernes·fra synkroniseringen, vil også alle ugrupperte kontakter fjernes fra synkroniseringen."</string>
<string name="account_phone" msgid="4025734638492419713">"Kun telefon (usynkronisert)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Visningsnavn"</string>
<string name="call_custom" msgid="7756571794763171802">"Ring <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Ring (privat)"</string>
<string name="call_mobile" msgid="7502236805487609178">"Ring mobil"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Ring annet"</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="7777261153532968503">"Ring annen faks"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"Send SMS (annet)"</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="3930666870074006114">"Send SMS til annen faks"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"Send e-post (annet)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-post"</string>
<string name="email_custom" msgid="7548003991586214105">"Send e-post (<xliff:g id="CUSTOM">%s</xliff:g>)"</string>
<string name="email" msgid="5668400997660065897">"E-post"</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="5560707927535653892">"Vis andre adresser"</string>
+ <string name="map_other" msgid="3817820803587012641">"Vis adresse"</string>
<string name="map_custom" msgid="6184363799976265281">"Vis <xliff:g id="CUSTOM">%s</xliff:g> adresse"</string>
<string name="chat_aim" msgid="2588492205291249142">"Nettprat med AIM"</string>
<string name="chat_msn" msgid="8041633440091073484">"Nettprat med Windows Live"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Fonetisk fornavn"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetisk mellomnavn"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Fonetisk etternavn"</string>
- <string name="split_label" msgid="8262112659919449087">"Del opp"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Gjør disse dataene om til en egen kontakt."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Fra <xliff:g id="SOURCE">%1$s</xliff:g>-konto: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-kontakt"</string>
<string name="from_account_format" msgid="687567483928582084">"fra <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Bruk dette bildet"</string>
<string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g>-kontaktinformasjon kan ikke redigeres på denne enheten."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Ingen utfyllende informasjon for denne kontakten"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Sorter listen etter"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Fornavn"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Etternavn"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Vis kontaktnavn som"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Fornavn først"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Etternavn først"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Søk etter kontakter"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Søk i alle kontakter"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Ta bilde"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Velg bilde fra galleriet"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktlisten er oppdatert med nytt språk."\n\n"Vent litt ..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Kontaktlisten oppdateres."\n\n"Vent litt ..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Oppgradering av kontakter pågår. "\n\n"Oppgraderingsprosessen krever cirka <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB internt minne på telefonen."\n\n"Velg ett av følgende alternativer:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Avinstaller noen programmer"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Prøv å oppgradere på nytt"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Søkeresultater for <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Søker ..."</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 6c41e23..22214fa 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Contacten"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"<xliff:g id="NAME">%s</xliff:g> bellen"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Toevoegen aan favorieten"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Uit favorieten verwijderen"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Barcode weergeven"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Contact bewerken"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Contact verwijderen"</string>
<string name="menu_call" msgid="3992595586042260618">"Contact bellen"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Als standaardnummer instellen"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Instellen als standaard e-mailadres"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Scheiden"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Contact splitsen"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Contacten gescheiden"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Contacten scheiden"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Weet u zeker dat u dit enkele contact wilt scheiden in meerdere contacten: één contact voor elke verzameling contactgegevens die aan het contact is gekoppeld?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Samenvoegen"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Bronnen weergeven"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Bronnen verbergen"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Contact samenvoegen"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Contacten samenvoegen"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Selecteer het contact dat u met <xliff:g id="NAME">%s</xliff:g> wilt samenvoegen."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Alle contacten weergeven"</string>
@@ -69,26 +65,16 @@
<string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Als u dit contact verwijdert, worden gegevens van meerdere accounts verwijderd."</string>
<string name="deleteConfirmation" msgid="811706994761610640">"Dit contact wordt verwijderd."</string>
<string name="menu_done" msgid="796017761764190697">"Gereed"</string>
- <string name="menu_doNotSave" msgid="2174577548513895144">"Terugkeren"</string>
+ <string name="menu_doNotSave" msgid="2174577548513895144">"Terugzetten"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Contact bewerken"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Nieuw contact"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Meer informatie"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonetisch"</string>
<string name="label_notes" msgid="8337354953278341042">"Opmerkingen"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Beltoon"</string>
- <string name="label_groups" msgid="7304551384542859026">"Groepen"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Groepen bewerken"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Voor- en achternaam"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Fonetisch gespelde naam"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Bedrijf"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Positie"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Chatnaam"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Mijn opmerking"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Telefoonnummer"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-mailadres"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Postadres"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Groep weergeven"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Het contact bestaat niet."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Nieuw contact maken"</string>
<string name="selectLabel" msgid="4255424123394910733">"Label selecteren"</string>
@@ -96,33 +82,23 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-mailadres"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Postadres"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Overig"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organisatie"</item>
<item msgid="7196592230748086755">"Opmerking"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Geen foto\'s"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Er zijn geen foto\'s beschikbaar op de telefoon."</string>
<string name="attachToContact" msgid="8820530304406066714">"Pictogram voor contact"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Aangepaste labelnaam"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Weergaveopties"</string>
<string name="displayGroups" msgid="2278964020773993336">"Weergaveopties"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Sync.groepen bewerken"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Contacten importeren"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Oproepen rechtstreeks naar voicemail verzenden"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Oproepen worden rechtstreeks naar voicemail verzonden."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Standaard"</string>
- <string name="addPicture" msgid="1594679312161537678">"Pictogram toevoegen"</string>
<string name="changePicture" msgid="2943329047610967714">"Pictogram wijzigen"</string>
<string name="removePicture" msgid="3041230993155966350">"Pictogram verwijderen"</string>
<string name="noContacts" msgid="8579310973261953559">"Geen contacten."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Kan geen overeenkomende contacten vinden."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Geen contacten met telefoonnummers."</string>
- <string name="noFavorites" msgid="812766386743315815">"Geen favorieten."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Groepen"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"De groep \'<xliff:g id="GROUPNAME">%s</xliff:g>\' is leeg."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Alle contacten"</string>
- <string name="showFilterPhones" msgid="4184858075465653970">"Alleen contacten met telefoonnummers"</string>
+ <string name="showFilterPhones" msgid="4184858075465653970">"Alleen contacten met tel.nr."</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Alleen contacten weergeven met telefoonnummers"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Contacten voor weergave kiezen"</string>
<plurals name="groupDescrip">
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> contacten, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> met telefoonnummers"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Alle contacten synchroniseren"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Mijn contacten"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Contacten met telefoonnummers"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Met ster in Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Contact opslaan..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Weergaveopties opslaan..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Contact is gemaakt."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Contact opgeslagen."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Fout. Kan wijzigingen in contact niet opslaan."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Nummer bellen"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Telefoonnummers"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Sms verzenden"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"E-mail verzenden"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"E-mailadressen"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Chatbericht verzenden"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Chatadressen"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Adres op kaart weergeven"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Postadressen"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organisaties"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Groepen"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Overige informatie"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Andere opties"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Meer"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"1 contact met telefoonnummer"</item>
<item quantity="other" msgid="6133262880804110289">"<xliff:g id="COUNT">%d</xliff:g> contacten met telefoonnummers"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"<xliff:g id="COUNT">%d</xliff:g> contacten gevonden"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Contact niet gevonden"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Sociaal"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 contact"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> contacten"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Contact"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriet"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefoon"</string>
@@ -184,7 +144,9 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Verwijderen uit Gesprekken"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Gesprekken wissen"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Gesprekken is leeg"</string>
- <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Oproeplogboek wissen"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Weet u zeker dat u het oproeplogboek wilt wissen?"</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI-nummer"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
<string name="unknown" msgid="740067747858270469">"Onbekend"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Oproep toevoegen"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laden vanaf SIM-kaart..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contacten op SIM-kaart"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Synchroniseer uw Google-contacten!"</font>" "\n"Zodra uw telefoon is gesynchroniseerd, heeft u uw contacten altijd ter beschikking."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"U heeft geen contacten om weer te geven. Als u zojuist een account heeft toegevoegd, kan het enkele minuten duren voordat de contacten zijn gesynchroniseerd."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"U heeft geen contacten om weer te geven."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"U heeft geen contacten om weer te geven."\n\n"Als u contacten wilt toevoegen, drukt u op "<font fgcolor="#ffffffff"><b>"\'Menu\'"</b></font>" en raakt u de volgende opties aan:"\n" "\n<li><font fgcolor="#ffffffff"><b>"\'Accounts\'"</b></font>" om een account toe te voegen of een account te configureren met contacten die u kunt synchroniseren met de telefoon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Nieuw contact\'"</b></font>" om een geheel nieuw contact te maken"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Importeren/exporteren\'"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"U heeft geen contacten om weer te geven. (Als u net een account heeft toegevoegd, kan het enkele minuten duren voordat de contacten zijn gesynchroniseerd.)"\n\n"Als u contacten wilt toevoegen, drukt u op "<font fgcolor="#ffffffff"><b>"\'Menu\'"</b></font>" en raakt u de volgende opties aan:"\n" "\n<li><font fgcolor="#ffffffff"><b>"\'Accounts\'"</b></font>" om een account toe te voegen of een account te configureren met contacten die u kunt synchroniseren met de telefoon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Weergaveopties\'"</b></font>" om de zichtbaarheid van contacten te wijzigen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Nieuw contact\'"</b></font>" om een geheel nieuw contact te maken"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Importeren/exporteren\'"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"U heeft geen contacten om weer te geven."\n\n"Als u contacten wilt toevoegen, drukt u op "<font fgcolor="#ffffffff"><b>"\'Menu\'"</b></font>" en raakt u de volgende opties aan:"\n" "\n<li><font fgcolor="#ffffffff"><b>"\'Account "</b></font>" om een account toe te voegen of een account te configureren met contacten die u kunt synchroniseren met de telefoon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Nieuw contact\'"</b></font>" om een geheel nieuw contact te maken"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Importeren/exporteren\'"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"U heeft geen contacten om weer te geven. (Als u net een account heeft toegevoegd, kan het enkele minuten duren voordat de contacten zijn gesynchroniseerd.)"\n\n"Als u contacten wilt toevoegen, drukt u op "<font fgcolor="#ffffffff"><b>"\'Menu\'"</b></font>" en raakt u de volgende opties aan:"\n" "\n<li><font fgcolor="#ffffffff"><b>"\'Accounts\'"</b></font>" om een account toe te voegen of een account te configureren met contacten die u kunt synchroniseren met de telefoon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Weergaveopties\'"</b></font>" om de zichtbaarheid van contacten te wijzigen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Nieuw contact\'"</b></font>" om een geheel nieuw contact te maken"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Importeren/exporteren\'"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"U heeft geen favorieten."\n\n"U kunt als volgt een contact toevoegen aan uw lijst met favorieten:"\n\n" "<li>"Raak het tabblad \'"<b>"Contacten"</b>"\' aan."\n</li>" "\n<li>"Raak het contact aan dat u wilt toevoegen aan uw favorieten."\n</li>" "\n<li>"Raak de ster aan die wordt weergegeven naast de naam van het contact."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Groepen selecteren om te synchroniseren"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Alle contacten"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Met ster"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoons"</string>
@@ -209,31 +171,17 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Oproep toevoegen"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Gespreksgegevens"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Kan geen gegevens over het gevraagde gesprek vinden."</string>
- <string name="call_type" msgid="3213526349444862087">"Type"</string>
<string name="type_incoming" msgid="6502076603836088532">"Inkomende oproep"</string>
<string name="type_outgoing" msgid="343108709599392641">"Uitgaand gesprek"</string>
<string name="type_missed" msgid="2720502601640509542">"Oproep gemist"</string>
- <string name="call_time" msgid="5805575214626630975">"Tijd"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Duur"</string>
- <string name="header_actions" msgid="229583643365836321">"Acties"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Beltoon: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Meer items toevoegen"</string>
- <string name="actionCall" msgid="695145166039381504">"<xliff:g id="TYPE">%s</xliff:g> bellen"</string>
- <string name="actionEmail" msgid="3870371552333656807">"E-mail <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Tekst <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chatten via <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"<xliff:g id="TYPE">%s</xliff:g>-adres bekijken"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Inkomende oproepen"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Wordt direct naar voicemail verzonden"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Ingesteld op <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Vaak gebeld"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sec."</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Regelmatig contact"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Contact toevoegen"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" toevoegen aan contacten?"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" toe aan contactpersonen?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Alles"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"één"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"twee"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"ster"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"hekje"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"bellen"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"nummer om te bellen"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"contactfoto"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"min"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Geen SD-kaart"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Geen SD-kaart gedetecteerd"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Zoeken naar vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Waarvandaan wilt u contacten importeren?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importeren van SIM-kaart"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importeren van SD-kaart"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exporteren naar SD-kaart"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Zichtbare contacten delen"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Eén vCard-bestand importeren"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Meerdere vCard-bestanden importeren"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Alle vCard-bestanden importeren"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Parseren van vCard is mislukt om onbekende reden"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Kan vCard niet parseren, ook al lijkt de indeling geldig. vCard wordt niet ondersteund door de huidige implementatie"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Geen vCard-bestand gevonden op SD-kaart"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Geen geldig vCard-item gevonden voor uw selectie"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Een of meer bestanden kunnen niet worden geïmporteerd (%s)"</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Onbekende fout"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"vCard-bestand selecteren"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Selecteer een vCard-bestand om te importeren"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"vCard lezen"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"vCard-bestand(en) lezen"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"vCard-gegevens importeren"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Lezen van vCard-gegevens is mislukt"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Kan vCard niet lezen."\n"Reden voor de fout: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\'"</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacten"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> bestanden"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Alle contacten"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Lokaal opgeslagen contacten"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Contacten exporteren"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contacten"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> bestanden"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Exporteren bevestigen"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Weet u zeker dat u uw lijst met contacten wilt exporteren naar \'<xliff:g id="VCARD_FILENAME">%s</xliff:g>\'?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Exporteren van contactgegevens mislukt"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Er is geen contact dat geëxporteerd kan worden"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Te veel vCard-gegevens op de SD-kaart"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Vereiste bestandsnaam is te lang (\'<xliff:g id="FILENAME">%s</xliff:g>\')"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Kan de doeldirectory \'<xliff:g id="DIR_NAME">%s</xliff:g>\' niet openen of maken"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Contactgegevens exporteren"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Contactgegevens exporteren naar \'<xliff:g id="FILE_NAME">%s</xliff:g>\'"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Kan het exportprogramma niet initialiseren: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Fout opgetreden tijdens export: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Databasegegevens ophalen mislukt"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Er is geen contact dat geëxporteerd kan worden. Mogelijk heeft u niet-exporteerbare gegevens gekozen."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Er is geen contact dat kan worden geëxporteerd. Als er contacten op uw telefoon staan, kan het exporteren van alle contacten vanaf uw telefoon mogelijk worden geblokkeerd door een gegevensprovider."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"De vCard-editor is niet juist geïnitialiseerd"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Kan \'<xliff:g id="FILE_NAME">%s</xliff:g>\' niet openen: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"Kan \'<xliff:g id="FILE_NAME">%1$s</xliff:g>\' niet openen: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contacten"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Namen van uw contacten"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Pauze van 2 seconden toevoegen"</string>
<string name="add_wait" msgid="3360818652790319634">"Wachten toevoegen"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Bellen"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Bellen met"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Sms\'en met"</string>
<string name="make_primary" msgid="5829291915305113983">"Deze keuze onthouden"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Alle contacten"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Als u \'<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="account_phone" msgid="4025734638492419713">"Alleen voor telefoon (niet gesynchroniseerd)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Weergavenaam"</string>
<string name="call_custom" msgid="7756571794763171802">"<xliff:g id="CUSTOM">%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>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Bellen naar overig"</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="7777261153532968503">"Bellen naar andere fax"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"Sms\'en naar overig"</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="3930666870074006114">"Sms\'en naar andere fax"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"E-mailen naar overig"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
<string name="email_custom" msgid="7548003991586214105">"E-mailadres <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-mail"</string>
<string name="map_home" msgid="1243547733423343982">"Thuisadres weergeven"</string>
<string name="map_work" msgid="1360474076921878088">"Werkadres weergeven"</string>
- <string name="map_other" msgid="5560707927535653892">"Andere adressen weergeven"</string>
+ <string name="map_other" msgid="3817820803587012641">"Adres weergeven"</string>
<string name="map_custom" msgid="6184363799976265281">"<xliff:g id="CUSTOM">%s</xliff:g> adres weergeven"</string>
<string name="chat_aim" msgid="2588492205291249142">"Chatten via AIM"</string>
<string name="chat_msn" msgid="8041633440091073484">"Chatten via Windows Live"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Fonetische roepnaam"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetische tweede voornaam"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Fonetische achternaam"</string>
- <string name="split_label" msgid="8262112659919449087">"Splitsen"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Maak van deze gegevens een nieuw contact."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Van <xliff:g id="SOURCE">%1$s</xliff:g>-account: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
<string name="from_account_format" msgid="687567483928582084">"van <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Deze foto gebruiken"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Contactgegevens van <xliff:g id="SOURCE">%1$s</xliff:g> kunnen niet worden bewerkt op dit apparaat."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Geen extra gegevens voor dit contact"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Lijst sorteren op"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Roepnaam"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Achternaam"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Contactnamen weergeven als"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Roepnaam eerst"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Achternaam eerst"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Contacten zoeken"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Alle contacten zoeken"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Foto maken"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Foto selecteren in Galerij"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Lijst met contacten wordt bijgewerkt om de gewijzigde taal te weerspiegelen."\n\n"Een ogenblik geduld..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Lijst met contacten wordt bijgewerkt."\n\n"Een ogenblik geduld..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Contacten worden bijgewerkt. "\n\n"Voor het upgradeproces is ongeveer <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB interne telefoonopslag vereist."\n\n"Kies een van de volgende opties:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Verwijder enkele toepassingen"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Upgrade opnieuw proberen"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Zoekresultaten voor: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Zoeken..."</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 0769bfc..aa050dd 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,14 +12,15 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Kontakty"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Telefonowanie bezpośrednie"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Wiadomość bezpośrednia"</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, aby nawiązać połączenie"</string>
<string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Wybierz numer, aby wysłać wiadomość"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Zadzwoń do: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Dodaj do ulubionych"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Usuń z ulubionych"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Pokaż kod kreskowy"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Edytuj kontakt"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Usuń kontakt"</string>
<string name="menu_call" msgid="3992595586042260618">"Zadzwoń do kontaktu"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Ustaw ten numer jako domyślny"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Ustaw jako domyślny adres e-mail"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Podziel"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Podziel kontakt"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Kontakty zostały podzielone"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Podziel kontakt"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Czy na pewno chcesz podzielić ten pojedynczy kontakt na kilka kontaktów: po jednym dla każdego zawartego w nim zestawu informacji kontaktowych?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Połącz"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Pokaż źródła"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Ukryj źródła"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Połącz kontakt"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Połącz kontakty"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"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>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Przywróć"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Edytuj kontakt"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Nowy kontakt"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Więcej informacji"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonetycznie"</string>
<string name="label_notes" msgid="8337354953278341042">"Notatki"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Dzwonek"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupy"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Edytuj grupy"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Imię i nazwisko"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Nazwisko (fonetycznie)"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Firma"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Stanowisko"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Nazwa na czacie"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Moja notatka"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Numer telefonu"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-mail"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Adres pocztowy"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Wyświetl grupę"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Stanowisko"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Kontakt nie istnieje."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Utwórz nowy kontakt"</string>
<string name="selectLabel" msgid="4255424123394910733">"Wybierz etykietę"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Komunikatory"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Adres pocztowy"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Inne"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organizacja"</item>
<item msgid="7196592230748086755">"Notatka"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Brak zdjęć"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"W telefonie brak dostępnych zdjęć."</string>
<string name="attachToContact" msgid="8820530304406066714">"Ikona kontaktu"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nazwa etykiety niestandardowej"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Opcje wyświetlania"</string>
<string name="displayGroups" msgid="2278964020773993336">"Opcje wyświetlania"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Synchronizacja grup"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importuj kontakty"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Przekieruj połączenia bezpośrednio na pocztę głosową"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Połączenia są przekazywane bezpośrednio do poczty głosowej."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Domyślny"</string>
- <string name="addPicture" msgid="1594679312161537678">"Dodaj ikonę"</string>
<string name="changePicture" msgid="2943329047610967714">"Zmień ikonę"</string>
<string name="removePicture" msgid="3041230993155966350">"Usuń ikonę"</string>
<string name="noContacts" msgid="8579310973261953559">"Brak kontaktów"</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Nie znaleziono pasujących kontaktów."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Brak kontaktów z numerami telefonów"</string>
- <string name="noFavorites" msgid="812766386743315815">"Brak ulubionych"</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupy"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Grupa „<xliff:g id="GROUPNAME">%s</xliff:g>” jest pusta."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Wszystkie kontakty"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Tylko kontakty z numerami telefonów"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Wyświetlaj tylko kontakty zawierające numery telefonów"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Wybierz kontakty do wyświetlenia"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"Liczba kontaktów: <xliff:g id="COUNT_0">%1$d</xliff:g>, liczba kontaktów z numerami telefonów: <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g>"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Synchronizuj wszystkie kontakty"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Moje kontakty"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Kontakty z numerami telefonu"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Z gwiazdką w systemie Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Trwa zapisywanie kontaktu..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Trwa zapisywanie opcji wyświetlania..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Utworzono kontakt."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Kontakt został zapisany."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Błąd. Nie można zapisać zmian wprowadzonych w kontakcie."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Wybierz numer"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Numery telefonów"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Wyślij tekst"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Wyślij e-mail"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Adresy e-mail"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Wyślij wiadomość czatu"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Adresy czatu"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Pokaż adres na mapie"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Adresy pocztowe"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organizacje"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupy"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Inne informacje"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Inne opcje"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Więcej"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Wyświetlanie 1 kontaktu z numerem telefonu"</item>
<item quantity="other" msgid="6133262880804110289">"Wyświetlanych kontaktów z numerami telefonów: <xliff:g id="COUNT">%d</xliff:g>"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"Znalezionych kontaktów: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Nie znaleziono kontaktu"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Społeczeństwo"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"Liczba kontaktów: 1"</item>
+ <item quantity="other" msgid="5660384247071761844">"Liczba kontaktów: <xliff:g id="COUNT">%d</xliff:g>"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Kontakty"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Ulubione"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Usuń z rejestru połączeń"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Wyczyść rejestr połączeń"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Rejestr połączeń jest pusty."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Wyczyść rejestr połączeń"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Czy na pewno chcesz wyczyścić rejestr połączeń?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"Numer MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Poczta głosowa"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Dodaj nowe poł."</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Wczytywanie z karty SIM…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakty z karty SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Zsynchronizuj kontakty Google!"</font>" "\n"Po zsynchronizowaniu telefonu zawsze będziesz mieć kontakty pod ręką."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Nie masz żadnych kontaktów do wyświetlenia (jeśli konto zostało dopiero dodane, synchronizacja kontaktów może potrwać kilka minut)."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Nie masz żadnych kontaktów do wyświetlenia."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Nie masz żadnych kontaktów do wyświetlenia."\n\n"Aby dodać kontakty, naciśnij przycisk "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i dotknij opcji:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konta"</b></font>", aby dodać lub skonfigurować konto zawierające kontakty, które można synchronizować z telefonem."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>", aby utworzyć nowy kontakt od początku."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuj/eksportuj"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Nie masz żadnych kontaktów do wyświetlenia. (Jeśli przed chwilą dodano konto, synchronizacja kontaktów może potrwać kilka minut)."\n\n"Aby dodać kontakty, naciśnij przycisk "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i dotknij opcji:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konta"</b></font>", aby dodać lub skonfigurować konto zawierające kontakty, które można synchronizować z telefonem."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcje wyświetlania"</b></font>", aby zmienić widoczne typy kontaktów."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>", aby utworzyć nowy kontakt od początku."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuj/eksportuj"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Nie masz żadnych kontaktów do wyświetlenia."\n\n"Aby dodać kontakty, naciśnij przycisk "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i dotknij opcji:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konta"</b></font>", aby dodać lub skonfigurować konto zawierające kontakty, które można synchronizować z telefonem."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>", aby utworzyć nowy kontakt od początku."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuj/eksportuj"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Nie masz żadnych kontaktów do wyświetlenia. (Jeśli przed chwilą dodano konto, synchronizacja kontaktów może potrwać kilka minut)."\n\n"Aby dodać kontakty, naciśnij przycisk "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i dotknij opcji:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konta"</b></font>", aby dodać lub skonfigurować konto zawierające kontakty, które można synchronizować z telefonem."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcje wyświetlania"</b></font>", aby zmienić widoczne typy kontaktów."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>", aby utworzyć nowy kontakt od początku."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuj/eksportuj"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nie masz żadnych ulubionych kontaktów."\n\n"Aby dodać kontakt do listy ulubionych:"\n\n" "<li>"Dotknij karty "<b>"Kontakty"</b>"."\n</li>" "\n<li>"Dotknij kontaktu, który chcesz dodać do ulubionych."\n</li>" "\n<li>"Dotknij ikony gwiazdki obok nazwy kontaktu."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Wybierz grupy do zsynchronizowania"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Wszystkie kontakty"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Oznaczone gwiazdką"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefony"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Dodaj połączenie"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Szczegóły połączenia"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Nie można odczytać szczegółów żądanego połączenia."</string>
- <string name="call_type" msgid="3213526349444862087">"Typ"</string>
<string name="type_incoming" msgid="6502076603836088532">"Połączenie"</string>
<string name="type_outgoing" msgid="343108709599392641">"Połączenie wychodzące"</string>
<string name="type_missed" msgid="2720502601640509542">"Nieodebrane połączenia"</string>
- <string name="call_time" msgid="5805575214626630975">"Godzina"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Czas trwania"</string>
- <string name="header_actions" msgid="229583643365836321">"Czynności"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Dźwięk dzwonka: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Dodaj więcej elementów"</string>
- <string name="actionCall" msgid="695145166039381504">"Połącz: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Wyślij e-mail: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Wyślij SMS: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Czatuj przez <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Wyświetl adres: <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Połączenia przychodzące"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Zostaną wysłane bezpośrednio na pocztę głosową"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Ustaw na <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Częste połączenia"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Częste kontakty"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Dodaj kontakt"</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="all_tab_label" msgid="4003124364397916826">"Wszystkie"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"gwiazdka"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"funt"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"poczta głosowa"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"wybierz numer"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"numer do wybrania"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"zdjęcie kontaktu"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Brak karty SD"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Nie wykryto karty SD"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Wyszukiwanie danych vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Skąd chcesz zaimportować kontakty?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importuj z karty SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importuj z karty SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Eksportuj na kartę SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Udostępnij widoczne kontakty"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importuj jeden plik vCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importuj wiele plików vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importuj wszystkie pliki vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Nie można zanalizować pliku vCard z nieoczekiwanego powodu"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Nie można zanalizować pliku vCard, mimo że prawdopodobnie ma on prawidłowy format. Bieżąca wersja go nie obsługuje."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Na karcie SD nie znaleziono żadnego pliku vCard"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"W wybranym zakresie nie znaleziono prawidłowego wpisu vCard"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Nie można zaimportować co najmniej jednego pliku (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Nieznany błąd"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Wybierz plik vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Wybierz plik vCard do zaimportowania"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Odczytywanie danych vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Odczytywanie plików vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importowanie danych vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Odczytywanie danych vCard nie powiodło się"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Nie można odczytać danych vCard."\n"Przyczyna niepowodzenia: „<xliff:g id="FAIL_REASON">%s</xliff:g>”."</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"Kontakt <xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"plik <xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Wszystkie kontakty"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Kontakty przechowywane lokalnie"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Eksportuj kontakty"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"Kontakt <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"plik <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Potwierdź eksport"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Czy na pewno chcesz wyeksportować listę kontaktów do pliku „<xliff:g id="VCARD_FILENAME">%s</xliff:g>”?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Nie można wyeksportować danych kontaktu"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Brak kontaktów, które można wyeksportować"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Zbyt dużo plików vCard na karcie SD"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Wymagana nazwa pliku jest zbyt długa („<xliff:g id="FILENAME">%s</xliff:g>”)"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Nie można otworzyć lub utworzyć katalogu docelowego „<xliff:g id="DIR_NAME">%s</xliff:g>”"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksportowanie danych kontaktowych"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Eksportowanie danych kontaktowych do pliku „<xliff:g id="FILE_NAME">%s</xliff:g>”"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Nie można zainicjować programu eksportującego: „<xliff:g id="EXACT_REASON">%s</xliff:g>”"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Wystąpił błąd podczas eksportowania: „<xliff:g id="EXACT_REASON">%s</xliff:g>”"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Nie można pobrać informacji o bazie danych"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Brak kontaktów, które można wyeksportować. Być może wybrano dane, których nie można eksportować."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Brak kontaktów, które można wyeksportować. Jeśli faktycznie masz kontakty w telefonie, wyeksportowanie któregokolwiek z nich poza telefon może być zabronione przez dostawcę danych."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Obiekt tworzenia danych vCard nie został poprawnie zainicjowany"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Nie można otworzyć pliku „<xliff:g id="FILE_NAME">%s</xliff:g>”: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"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="exporting_contact_list_progress" msgid="560522409559101193">"Kontakt <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Imiona i nazwiska oraz nazwy w Twoich kontaktach"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Dodaj 2-sekundową pauzę"</string>
<string name="add_wait" msgid="3360818652790319634">"Dodaj oczekiwanie"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Wybierz numer"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Zadzwoń przy użyciu"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Wyślij SMS przy użyciu"</string>
<string name="make_primary" msgid="5829291915305113983">"Zapamiętaj ten wybór"</string>
@@ -311,7 +257,7 @@
<string name="menu_import_export" msgid="3765725645491577190">"Importuj/eksportuj"</string>
<string name="dialog_import_export" msgid="4771877268244096596">"Importuj/eksportuj kontakty"</string>
<string name="menu_share" msgid="943789700636542260">"Udostępnij"</string>
- <string name="share_via" msgid="563121028023030093">"Udostępnij kontakt za pośrednictwem"</string>
+ <string name="share_via" msgid="563121028023030093">"Udostępnij kontakt przez"</string>
<string name="share_error" msgid="4374508848981697170">"Tego kontaktu nie można udostępniać."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nazwa"</string>
<string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonim"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Wszystkie kontakty"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"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="account_phone" msgid="4025734638492419713">"Tylko telefon (brak synchronizacji)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Nazwa wyświetlana"</string>
<string name="call_custom" msgid="7756571794763171802">"Połącz – <xliff:g id="CUSTOM">%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>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Połącz – inny"</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="7777261153532968503">"Połącz – inny faks"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"Tekst – inny"</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="3930666870074006114">"SMS – inny faks"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"E-mail – inny"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
<string name="email_custom" msgid="7548003991586214105">"E-mail – <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-mail"</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="5560707927535653892">"Wyświetl inny adres"</string>
+ <string name="map_other" msgid="3817820803587012641">"Wyświetl adres"</string>
<string name="map_custom" msgid="6184363799976265281">"Wyświetl adres: <xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Imię (fonetycznie)"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Drugie imię (fonetycznie)"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Nazwisko (fonetycznie)"</string>
- <string name="split_label" msgid="8262112659919449087">"Podziel"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Utwórz dla tych danych osobny kontakt."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Z konta <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Kontakt <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"z <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Użyj tego zdjęcia"</string>
<string name="contact_read_only" msgid="1203216914575723978">"W tym urządzeniu nie można edytować informacji kontaktowych <xliff:g id="SOURCE">%1$s</xliff:g>."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Brak dodatkowych informacji dla tego kontaktu"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Sortuj listę według"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Imię"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Nazwisko"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Wyświetl nazwy kontaktów jako"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Najpierw imię"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Najpierw nazwisko"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Szukaj kontaktów"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Szukaj wszystkich kontaktów"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Zrób zdjęcie"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Wybierz zdjęcie z galerii"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Lista kontaktów jest aktualizowana, aby odzwierciedlić zmianę języka."\n\n"Czekaj..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Lista kontaktów jest aktualizowana."\n\n"Czekaj..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Trwa proces uaktualniania kontaktów. "\n\n"Proces uaktualniania wymaga w przybliżeniu <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB wewnętrznej pamięci telefonu."\n\n"Wybierz jedną z następujących opcji:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Odinstaluj część aplikacji"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Ponów próbę uaktualnienia"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Wyniki wyszukiwania dla: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Trwa wyszukiwanie..."</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index ae35da1..4ce4588 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Contactos"</string>
@@ -34,10 +35,9 @@
<string name="menu_search" msgid="9147752853603483719">"Pesquisar"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Novo contacto"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Visualizar contacto"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Telefonar a <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="5142851348489387516">"Ligar a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Mostrar código de barras"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Editar contacto"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Eliminar contacto"</string>
<string name="menu_call" msgid="3992595586042260618">"Ligar para contacto"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Utilizar como número predefinido"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Predefinir e-mail"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Separar"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Separar contacto"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Contactos separados"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Separar contacto"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Tem a certeza de que quer separar este contacto único em vários contactos: um para cada conjunto de informações de contacto que lhe foi agregado?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Associar"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Mostrar origens"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Ocultar origens"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Associar contacto"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Associar contactos"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Seleccione o contacto que pretende associar a <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contactos"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Reverter"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Editar contacto"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Novo contacto"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Mais informações"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonético"</string>
<string name="label_notes" msgid="8337354953278341042">"Notas"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Toque"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupos"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Editar grupos"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Primeiro e último"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Nome fonético"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Cargo"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Nome de MI"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"A minha nota"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Número de telefone"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Endereço de e-mail"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Endereço postal"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Mostrar grupo"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"O contacto não existe."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contacto"</string>
<string name="selectLabel" msgid="4255424123394910733">"Seleccionar etiqueta"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"MI"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Endereço postal"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Outro"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organização"</item>
<item msgid="7196592230748086755">"Nota"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Sem imagens"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Não existem imagens disponíveis no telefone."</string>
<string name="attachToContact" msgid="8820530304406066714">"Ícone de contacto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome da etiqueta personalizada"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Opções de visualização"</string>
<string name="displayGroups" msgid="2278964020773993336">"Opções de visualização"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Editar grupos sincronizados"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importar contactos"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar as chamadas directamente para o correio de voz"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"As chamadas são enviadas directamente para o correio de voz."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Predefinido"</string>
- <string name="addPicture" msgid="1594679312161537678">"Adicionar ícone"</string>
<string name="changePicture" msgid="2943329047610967714">"Alterar ícone"</string>
<string name="removePicture" msgid="3041230993155966350">"Remover ícone"</string>
<string name="noContacts" msgid="8579310973261953559">"Sem contactos."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Não foram encontrados contactos correspondentes."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Sem contactos com números de telefone."</string>
- <string name="noFavorites" msgid="812766386743315815">"Sem favoritos."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupos"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"O seu grupo \"<xliff:g id="GROUPNAME">%s</xliff:g>\" está vazio."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Todos os contactos"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Apenas contactos com telefones"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Apresentar apenas contactos que tenham números de telefone"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Escolher contactos a apresentar"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> contactos, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> com telefone"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Sincronizar todos os contactos"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Os meus contactos"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Contactos com números de telefone"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Marcado com estrela no Android"</string>
<string name="savingContact" msgid="4075751076741924939">"A guardar contacto..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"A guardar opções de visualização..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Contacto criado."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Contacto guardado."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Erro, impossível guardar alterações do contacto."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Marcar número"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Números de telefone"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Enviar texto"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Enviar e-mail"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Endereços de e-mail"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Enviar mensagem instantânea"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Endereços de chat"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Endereço no mapa"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Endereços postais"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organizações"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupos"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Outras informações"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Outras opções"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Mais"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"1 contacto com número de telefone"</item>
<item quantity="other" msgid="6133262880804110289">"<xliff:g id="COUNT">%d</xliff:g> contactos com números de telefone"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"Foram encontrados <xliff:g id="COUNT">%d</xliff:g> contactos"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Contacto não encontrado"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Social"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 contacto"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> contactos"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Contactos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefone"</string>
@@ -178,12 +138,14 @@
<string name="liveFolderFavorites" msgid="3100957542927222282">"Contactos marcados com estrela"</string>
<string name="liveFolderPhone" msgid="3739376066610926780">"Contactos com números de telefone"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Enviar mensagem de texto"</string>
- <string name="recentCalls_callNumber" msgid="1756372533999226126">"Telefonar a <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Ligar a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Editar número antes de efectuar a chamada"</string>
<string name="recentCalls_addToContact" msgid="1429899535546487008">"Adicionar aos contactos"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Remover do registo de chamadas"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Limpar registo de chamadas"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"O registo de chamadas está vazio."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Limpar registo de chamadas"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Tem a certeza de que pretende limpar o registo de chamadas?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Correio de voz"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Marcar para adicionar uma chamada"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"A carregar a partir do cartão SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contactos no cartão SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Sincronize os seus contactos do Google!"</font>" "\n"Depois de efectuar a sincronização para o seu telefone, os seus contactos ficarão disponíveis onde quer que esteja."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Não existem contactos a apresentar. (Se acabou de adicionar uma conta, pode demorar alguns minutos a sincronizar os contactos.)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Não existem contactos a apresentar."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Não tem contactos para apresentar."\n\n"Para adicionar contactos, prima "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contactos que pode sincronizar no telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contacto"</b></font>" para criar um novo contacto de raiz"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Não tem contactos para apresentar (se acabou de adicionar uma conta, pode demorar alguns minutos a sincronizar os contactos)."\n\n"Para adicionar contactos, prima "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com os contactos que pode sincronizar no telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de visualização"</b></font>" para alterar os contactos visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contacto"</b></font>" para criar uma nova conta de raiz"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Não tem contactos para apresentar."\n\n"Para adicionar contactos, prima "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contactos que pode sincronizar no telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contacto"</b></font>" para criar um novo contacto de raiz"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Não tem contactos para apresentar (se acabou de adicionar uma conta, pode demorar alguns minutos a sincronizar os contactos)."\n\n"Para adicionar contactos, prima "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com os contactos que pode sincronizar no telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de visualização"</b></font>" para alterar os contactos visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contacto"</b></font>" para criar uma nova conta de raiz"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Não tem favoritos."\n\n"Para adicionar um contacto à sua lista de favoritos:"\n\n" "<li>"Toque no separador "<b>"Contactos"</b>" "\n</li>" "\n<li>"Toque no contacto que pretende adicionar aos favoritos"\n</li>" "\n<li>"Toque na estrela junto ao nome do contacto"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Seleccionar grupos para sincronizar"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Todos os contactos"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Marcado com estrela"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefones"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Adicionar chamada"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalhes da chamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Não foi possível ler os detalhes da chamada solicitada."</string>
- <string name="call_type" msgid="3213526349444862087">"Tipo"</string>
<string name="type_incoming" msgid="6502076603836088532">"Chamada recebida"</string>
<string name="type_outgoing" msgid="343108709599392641">"Chamada efectuada"</string>
<string name="type_missed" msgid="2720502601640509542">"Chamada não atendida"</string>
- <string name="call_time" msgid="5805575214626630975">"Hora"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Duração"</string>
- <string name="header_actions" msgid="229583643365836321">"Acções"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Toque: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Adicionar mais itens"</string>
- <string name="actionCall" msgid="695145166039381504">"Telefonar a <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"E-mail <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Texto <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chat utilizando <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Visualizar endereço de <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Chamadas recebidas"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Será enviada directamente para o correio de voz"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Definido para <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> seg"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Números de marcação frequente"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> seg"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Contactos frequentes"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Adicionar contacto"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Todos"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"estrela"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"correio de voz"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"retrocesso"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"número a marcar"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"fotografia do contacto"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"menos"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Nenhum cartão SD"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Não foi detectado nenhum cartão SD"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"A procurar vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"De onde pretende importar contactos?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar do cartão SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importar do cartão SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exportar para cartão SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Partilhar contactos visíveis"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importar um ficheiro VCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar vários ficheiros vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos os ficheiros VCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Falha na análise do vCard por motivo inesperado"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Falha na análise do vCard embora o formato pareça válido, uma vez que não é suportado pela implementação actual"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Não foi encontrado nenhum ficheiro vCard no cartão SD"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Não foi encontrada nenhuma entrada vCard válida para a sua selecção"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"A importação de um ou vários ficheiros falhou (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Erro desconhecido"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Seleccionar ficheiro vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Seleccione um ficheiro vCard para importar"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"A ler vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"A ler ficheiro(s) vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"A importar dados do vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Falha na leitura de dados do vCard"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Não foi possível ler o vCard."\n"Motivo da falha: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> ficheiros"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Todos os contactos"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Contactos armazenados localmente"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Exportar contactos"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contactos"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ficheiros"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Confirmar exportação"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Tem a certeza de que pretende exportar a lista de contactos para \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Falha ao exportar dados de contacto"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Não existe um contacto exportável"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Demasiados ficheiros vCard no cartão SD"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Nome de ficheiro demasiado longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Não é possível abrir ou criar o directório de destino \"<xliff:g id="DIR_NAME">%s</xliff:g>\""</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportar dados do contacto"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Exportar dados do contacto para \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Erro ocorrido durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Falha na obtenção de informações da base de dados"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Não existe nenhum contacto exportável. Pode ter escolhido dados não exportáveis"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Não existe nenhum contacto exportável. Se tiver realmente contactos no telefone, a sua exportação para fora do telefone por parte de alguns fornecedores de dados pode não ser autorizada."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"O compositor vCard não foi inicializado correctamente"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"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="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contactos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nomes dos contactos"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Adicionar pausa de 2 seg."</string>
<string name="add_wait" msgid="3360818652790319634">"Adicionar espera"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Marcar"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Ligar utilizando"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Enviar SMS utilizando"</string>
<string name="make_primary" msgid="5829291915305113983">"Memorizar esta escolha"</string>
@@ -314,7 +260,7 @@
<string name="share_via" msgid="563121028023030093">"Partilhar contacto através de"</string>
<string name="share_error" msgid="4374508848981697170">"Não é possível partilhar este contacto."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
- <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Alcunha"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudónimo"</string>
<string name="organizationLabelsGroup" msgid="2478611760751832035">"Organização"</string>
<string name="websiteLabelsGroup" msgid="4202998982804009261">"Web site"</string>
<string name="eventLabelsGroup" msgid="8069912895912714412">"Evento"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Todos os contactos"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Ao remover \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronização, removerá também quaisquer contactos não agrupados."</string>
<string name="account_phone" msgid="4025734638492419713">"Apenas telefone (não sincronizado)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Nome a apresentar"</string>
<string name="call_custom" msgid="7756571794763171802">"Ligar para <xliff:g id="CUSTOM">%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>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Ligar para outros"</string>
+ <string name="call_other" msgid="8563753966926932052">"Ligar"</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="7777261153532968503">"Ligar para outro fax"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"Enviar SMS para outros"</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="3930666870074006114">"Enviar SMS para outro fax"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"Enviar e-mail para outro"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
<string name="email_custom" msgid="7548003991586214105">"Enviar e-mail a <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-mail"</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="5560707927535653892">"Ver outros endereços"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ver endereço"</string>
<string name="map_custom" msgid="6184363799976265281">"Ver endereço de <xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Fonética do segundo nome"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Fonética do primeiro apelido"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Fonética do segundo apelido"</string>
- <string name="split_label" msgid="8262112659919449087">"Separar"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Fazer destes dados o seu próprio contacto."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Da conta <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Contacto de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Utilizar esta fotografia"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Não é possível editar as informações de contacto do <xliff:g id="SOURCE">%1$s</xliff:g> neste dispositivo."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Não há informações adicionais para este contacto"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Ordenar lista por"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Nome próprio"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Apelido"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Visualizar nomes de contactos como"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Nome próprio em primeiro lugar"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Apelido em primeiro lugar"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Pesquisar contactos"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Pesquisar todos os contactos"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Tirar fotografia"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Seleccionar fotografia da Galeria"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"A lista de contactos está a ser actualizada para reflectir a alteração do idioma."\n\n"Aguarde..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"A lista de contactos está a ser actualizada."\n\n"Aguarde..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Os contactos estão no processo de serem actualizados. "\n\n"O processo de actualização requer aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB de armazenamento de telefone interno."\n\n"Escolha uma das seguintes opções:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algumas aplicações"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Repetir actualização"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Resultados de pesquisa para: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"A pesquisar..."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 2ea7a02..d540264 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Contatos"</string>
@@ -27,17 +28,16 @@
<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="viewContactDesription" msgid="214186610887547860">"Visualizar contato"</string>
+ <string name="viewContactDesription" msgid="214186610887547860">"Ver contato"</string>
<string name="editContactDescription" msgid="2947202828256214947">"Editar contato"</string>
<string name="insertContactDescription" msgid="4709878105452681987">"Criar contato"</string>
<string name="searchHint" msgid="8482945356247760701">"Pesquisar contatos"</string>
- <string name="menu_search" msgid="9147752853603483719">"Pesquisar"</string>
+ <string name="menu_search" msgid="9147752853603483719">"Pesquisa"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Novo contato"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Visualizar contato"</string>
+ <string name="menu_viewContact" msgid="2795575601596468581">"Ver contato"</string>
<string name="menu_callNumber" msgid="5142851348489387516">"Chamar <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Mostrar código de barras"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Editar contato"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Excluir contato"</string>
<string name="menu_call" msgid="3992595586042260618">"Chamar contato"</string>
@@ -47,16 +47,12 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Tornar o número padrão"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Tornar o e-mail padrão"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Separar"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Dividir contato"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Contatos separados"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Separar contato"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Tem certeza de que deseja separar este único contato em diversos contatos, um para cada conjunto de informações de contato unificado?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Unir"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Mostrar fontes"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Ocultar fontes"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Unir contato"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Unir contatos"</string>
- <string name="blurbJoinContactDataWith" msgid="995870557595050304">"Selecione o contato que deseja unir com <xliff:g id="NAME">%s</xliff:g>."</string>
+ <string name="blurbJoinContactDataWith" msgid="995870557595050304">"Selecione o contato que deseja mesclar 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>
@@ -67,28 +63,18 @@
<string name="readOnlyContactWarning" msgid="1390849295342594265">"Não é possível excluir os contatos das contas somente de leitura, mas você pode ocultá-los nas suas listas de contatos."</string>
<string name="readOnlyContactDeleteConfirmation" msgid="2137170726670196909">"Este contato contém informações de diversas contas. As informações de contas somente de leitura ficarão ocultas nas suas listas de contatos, mas não serão excluídas."</string>
<string name="multipleContactDeleteConfirmation" msgid="938900978442960800">"Excluir este contato irá excluir informações de várias contas."</string>
- <string name="deleteConfirmation" msgid="811706994761610640">"Esse evento será excluído."</string>
+ <string name="deleteConfirmation" msgid="811706994761610640">"Este contato será excluído."</string>
<string name="menu_done" msgid="796017761764190697">"Concluído"</string>
<string name="menu_doNotSave" msgid="2174577548513895144">"Reverter"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Editar contato"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Novo contato"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Mais informações"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonética"</string>
<string name="label_notes" msgid="8337354953278341042">"Observações"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Toque"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupos"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Editar grupos"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Nome e sobrenome"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Nome fonético"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Posição"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Nome no programa de mensagens instantâneas"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Minha observação"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Número de telefone"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Endereço de e-mail"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Endereço postal"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Exibir grupo"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"O contato não existe."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contato"</string>
<string name="selectLabel" msgid="4255424123394910733">"Selecionar marcador"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Mensagem instantânea"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Endereço postal"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Outros"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organização"</item>
<item msgid="7196592230748086755">"Observação"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Nenhuma imagem"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Nenhuma imagem disponível no telefone."</string>
<string name="attachToContact" msgid="8820530304406066714">"Ícone de contato"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Personalizar nome do marcador"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Opções de exibição"</string>
<string name="displayGroups" msgid="2278964020773993336">"Opções de exibição"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Editar grupos sincronizados"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importar contatos"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar chamadas diretamente para o correio de voz"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"As chamadas são enviadas diretamente para o correio de voz."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Padrão"</string>
- <string name="addPicture" msgid="1594679312161537678">"Adicionar ícone"</string>
<string name="changePicture" msgid="2943329047610967714">"Alterar ícone"</string>
<string name="removePicture" msgid="3041230993155966350">"Remover ícone"</string>
<string name="noContacts" msgid="8579310973261953559">"Nenhum contato."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Nenhum contato correspondente foi encontrado."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Nenhum contato com números de telefone."</string>
- <string name="noFavorites" msgid="812766386743315815">"Nenhum favorito"</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupos"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Seu grupo \"<xliff:g id="GROUPNAME">%s</xliff:g>\" está vazio."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Todos os contatos"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Apenas contatos com telefones"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Exibir apenas os contatos com números de telefone"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Escolha os contatos para exibir"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> contatos, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> com telefones"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Sincronizar todos os contatos"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Meus contatos"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Contatos com números de telefone"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Com estrela no Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Salvando contato…"</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Salvando opções de exibição…"</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Contato criado."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Contato salvo."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Erro: não é possível salvar as alterações do contato."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Discar número"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Números de telefone"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Enviar mensagem de texto"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Enviar e-mail"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Endereços de e-mail"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Enviar mensagem instantânea"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Endereços de bate-papo"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Endereço no mapa"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Endereços postais"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organizações"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupos"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Outras informações"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Outras opções"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Mais"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Exibindo 1 contato com número de telefone"</item>
<item quantity="other" msgid="6133262880804110289">"Exibindo <xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"<xliff:g id="COUNT">%d</xliff:g> contatos encontrados"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Contato não encontrado"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Social"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 contato"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> contatos"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Contatos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefone"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Remover do registro de chamadas"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Limpar registro de chamadas"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"O registro de chamadas está vazio."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Limpar registro de chamadas"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Tem certeza de que deseja limpar o registro de chamadas?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Correio de voz"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Discar para adicionar uma chamada"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Carregando do cartão SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contatos do cartão SIM"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">" Sincronize seus contatos do Google!"</font>" "\n"Após sincronizar para o seu telefone, seus contatos estarão disponíveis em qualquer lugar que você vá."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Você não tem contatos para exibir. Se você acabou de adicionar uma conta, pode levar alguns minutos para sincronizar os contatos."</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Você não tem contatos para exibir."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Você não tem nenhum contato para exibir."\n\n"Para adicionar contatos, pressione "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contatos que possam ser sincronizados com o telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contato"</b></font>" para criar um novo contato do início"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Você não tem contatos para exibir (se acabou de adicionar uma conta, pode levar alguns minutos para sincronizar os contatos.)"\n\n"Para adicionar contatos, pressione"<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contatos que possam ser sincronizados com o telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de exibição"</b></font>" para alterar quais contatos ficam visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contato"</b></font>" para criar um novo contato do início"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Você não tem nenhum contato para exibir."\n\n"Para adicionar contatos, pressione "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contatos que possam ser sincronizados com o telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contato"</b></font>" para criar um novo contato do início"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Você não tem nenhum contato para exibir."\n\n"Para adicionar contatos, pressione "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contatos que possam ser sincronizados com o telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contato"</b></font>" para criar um novo contato do início"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Você não tem contatos para exibir (se acabou de adicionar uma conta, pode levar alguns minutos para sincronizar os contatos.)"\n\n"Para adicionar contatos, pressione"<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contatos que possam ser sincronizados com o telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de exibição"</b></font>" para alterar quais contatos ficam visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contato"</b></font>" para criar um novo contato do início"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Você não tem nenhum favorito."\n\n"Para adicionar um contato à sua lista de favoritos:"\n\n" "<li>"Toque na guia "<b>"Contatos"</b>\n</li>" "\n<li>"Toque no contato que deseja adicionar aos seus favoritos"\n</li>" "\n<li>"Toque na estrela ao lado do nome do contato"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Selecionar grupos para sincronizar"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Todos os contatos"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Com estrela"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefones"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Adicionar chamada"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalhes da chamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Não foi possível ler os detalhes para a chamada solicitada."</string>
- <string name="call_type" msgid="3213526349444862087">"Tipo"</string>
<string name="type_incoming" msgid="6502076603836088532">"Recebendo chamada"</string>
<string name="type_outgoing" msgid="343108709599392641">"Chamada enviada"</string>
<string name="type_missed" msgid="2720502601640509542">"Chamada perdida"</string>
- <string name="call_time" msgid="5805575214626630975">"Horário"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Duração"</string>
- <string name="header_actions" msgid="229583643365836321">"Ações"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Toque: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Adicionar mais itens"</string>
- <string name="actionCall" msgid="695145166039381504">"Chamar <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Enviar e-mail para <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Enviar mensagem de texto para <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Bater papo usando <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Visualizar endereço de <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Chamadas recebidas"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Será enviado diretamente para o correio de voz"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Definir para <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
<string name="callBack" msgid="5498224409038809224">"Retornar chamada"</string>
<string name="callAgain" msgid="3197312117049874778">"Chamar novamente"</string>
<string name="returnCall" msgid="8171961914203617813">"Retornar chamada"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> s"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Frequentemente chamado"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Chamados frequentemente"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Adicionar contato"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contatos?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Todos"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"estrela"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"correio de voz"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"discar"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"número para discagem"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"foto do contato"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"menos"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Nenhum cartão SD"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Nenhum cartão SD detectado"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Pesquisando vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"De onde você gostaria de importar contatos?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar do cartão SIM"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importar do cartão SD"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exportar para cartão SD"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Compartilhar contatos visíveis"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importar um arquivo do vCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importar vários arquivos do vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos os arquivos do vCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Falha ao analisar o vCard por razão inesperada"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Falha ao analisar o vCard. Embora o formato pareça ser válido, a implementação atual não oferece suporte a ele."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Nenhum arquivo de vCard encontrado no cartão SD"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Nenhuma entrada válida no vCard foi encontrada para a sua seleção"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Falha na importação de um ou mais arquivos (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Erro desconhecido"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Selecionar arquivo do vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Selecione um arquivo do vCard para importar"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Lendo vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Lendo os arquivos do vCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importando os dados do vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"A leitura dos dados do vCard falhou"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Não foi possível ler o vCard."\n"Motivo da falha: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contatos"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> arquivos"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Todos os contatos"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Contatos armazenados localmente"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Exportar contatos"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contatos"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> arquivos"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Confirmar exportação"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Tem certeza de que deseja exportar a sua lista de contatos para \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Falha ao exportar dados do contato"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Não há contatos exportáveis"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Muitos arquivos do vCard no cartão SD"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"O nome de arquivo exigido é muito longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Não é possível abrir ou criar o diretório de destino \"<xliff:g id="DIR_NAME">%s</xliff:g>\""</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando dados do contato"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Exportando dados do contato para \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Ocorreu um erro durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Falha ao acessar informações do banco de dados"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Não há contatos exportáveis. Você precisa escolher dados não exportáveis."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Não há contatos exportáveis. Se você realmente tiver contatos no seu telefone, talvez a exportação não seja permitida por algum provedor de dados."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"O vCard não foi iniciado corretamente"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"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="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> contatos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Adicionar pausa de 2 segundos"</string>
<string name="add_wait" msgid="3360818652790319634">"Adicionar espera"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Discar"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Chamar usando"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Enviar mensagem de texto usando"</string>
<string name="make_primary" msgid="5829291915305113983">"Lembrar desta escolha"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Todos os contatos"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"A remoção de \'<xliff:g id="GROUP">%s</xliff:g>\' da sincronização também removerá todos os contatos não agrupados da sincronização."</string>
<string name="account_phone" msgid="4025734638492419713">"Somente telefone (não sincronizado)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Nome de exibição"</string>
<string name="call_custom" msgid="7756571794763171802">"Chamar <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Chamar residência"</string>
<string name="call_mobile" msgid="7502236805487609178">"Chamar celular"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Chamar outros"</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="7777261153532968503">"Chamar outro fax"</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>
@@ -363,13 +308,13 @@
<string name="sms_fax_work" msgid="8028189067816907075">"Enviar mensagem de texto para o fax comercial"</string>
<string name="sms_fax_home" msgid="9204042076306809634">"Enviar mensagem de texto para fax residencial"</string>
<string name="sms_pager" msgid="7730404569637015192">"Enviar mensagem de texto para o pager"</string>
- <string name="sms_other" msgid="5131921487474531617">"Enviar mensagem de texto para outras pessoas"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar mensagem de texto"</string>
<string name="sms_callback" msgid="5004824430094288752">"Enviar mensagem de texto para retorno de chamada"</string>
<string name="sms_car" msgid="7444227058437359641">"Enviar mensagem de texto para o carro"</string>
<string name="sms_company_main" msgid="118970873419678087">"Enviar mensagem de texto para empresa (principal)"</string>
<string name="sms_isdn" msgid="8153785037515047845">"Mandar mensagem de texto para ISDN"</string>
<string name="sms_main" msgid="8621625784504541679">"Enviar mensagem de texto para o principal"</string>
- <string name="sms_other_fax" msgid="3930666870074006114">"Enviar mensagem de texto para outro fax"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar mensagem de texto para fax"</string>
<string name="sms_radio" msgid="3329166673433967820">"Enviar mensagem de texto para o rádio"</string>
<string name="sms_telex" msgid="9034802430065267848">"Enviar mensagem de texto para telex"</string>
<string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar mensagem de texto para TTY/TDD"</string>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"E-mail (outros)"</string>
- <string name="email_custom" msgid="7548003991586214105">"E-mail (<xliff:g id="CUSTOM">%s</xliff:g>)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="7548003991586214105">"Enviar e-mail para <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-mail"</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="5560707927535653892">"Ver outro endereço"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visualizar endereço"</string>
<string name="map_custom" msgid="6184363799976265281">"Visualizar endereço de <xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Nome fonético"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Nome do meio fonético"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Sobrenome fonético"</string>
- <string name="split_label" msgid="8262112659919449087">"Dividir"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Transformar esses dados em um contato."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Da conta do <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Contato de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Usar esta foto"</string>
<string name="contact_read_only" msgid="1203216914575723978">"As informações de contato de <xliff:g id="SOURCE">%1$s</xliff:g> não podem ser editadas neste aparelho."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Não há informações adicionais para este contato"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Classificar lista por"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Nome"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Sobrenome"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Visualizar nomes de contato como"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Nome primeiro"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Sobrenome primeiro"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Pesquisar contatos "</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Pesquisar em todos os contatos"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Tirar foto"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Selecionar foto da Galeria"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"A lista de contatos está sendo atualizada para refletir a alteração do idioma."\n\n"Aguarde..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"A lista de contatos está sendo atualizada."\n\n"Aguarde..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Os contatos estão sendo atualizados no momento. "\n\n"O processo de atualização requer aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB de armazenamento interno do telefone."\n\n"Escolha uma das seguintes opções:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar alguns aplicativos"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Tentar atualizar novamente"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Resultados da pesquisa para: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Pesquisando..."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 82dc007..9f29fc2 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Контакты"</string>
@@ -25,7 +26,7 @@
<string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Выбрать номер для отправки сообщения"</string>
<string name="starredList" msgid="4817256136413959463">"Помеченные"</string>
<string name="frequentList" msgid="7154768136473953056">"Часто вызываемые"</string>
- <string name="strequentList" msgid="5640192862059373511">"Избранные"</string>
+ <string name="strequentList" msgid="5640192862059373511">"Избранное"</string>
<string name="viewContactTitle" msgid="7989394521836644384">"Сведения о контакте"</string>
<string name="viewContactDesription" msgid="214186610887547860">"Просмотреть контакт"</string>
<string name="editContactDescription" msgid="2947202828256214947">"Изменить контакт"</string>
@@ -34,10 +35,9 @@
<string name="menu_search" msgid="9147752853603483719">"Поиск"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Новый контакт"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Просмотреть контакт"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"<xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Добавить в избранные"</string>
+ <string name="menu_callNumber" msgid="5142851348489387516">"Вызов: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Добавить в избранное"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Удалить из избранных"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"Показать штрих-код"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Изменить контакт"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Удалить контакт"</string>
<string name="menu_call" msgid="3992595586042260618">"Позвонить"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Сделать номером по умолчанию"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Установить этот адрес по умолчанию"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Отделить"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Разделить контакт"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Контакты разделены."</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Разделить контакты"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Вы действительно хотите разделить этот контакт на несколько контактов: по одному для каждого набора контактной информации, содержащейся в этом контакте?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Присоединить"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Показать источники"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Скрыть источники"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Присоединить контакт"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Объединить контакты"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Выберите контакт, который нужно объединить с этим адресатом: <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Показать все контакты"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Отмена"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Изменить контакт"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Новый контакт"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Добавить информацию"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Произношение"</string>
<string name="label_notes" msgid="8337354953278341042">"Примечания"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Мелодия"</string>
- <string name="label_groups" msgid="7304551384542859026">"Группы"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Изменить группы"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Имя и фамилия"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Произношение имени"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Компания"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Должность"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Имя в чате"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Мое примечание"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Номер телефона"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"Адрес электронной почты"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Почтовый адрес"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Показать группу"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Название"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Контакт не существует."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Создать новый контакт"</string>
<string name="selectLabel" msgid="4255424123394910733">"Выбор ярлыка"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"Адрес электронной почты"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Чат"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Почтовый адрес"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Прочее"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Организация"</item>
<item msgid="7196592230748086755">"Примечание"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Нет картинок"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"В телефоне нет картинок."</string>
<string name="attachToContact" msgid="8820530304406066714">"Значок контакта"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Особая метка"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Варианты отображения"</string>
<string name="displayGroups" msgid="2278964020773993336">"Варианты отображения"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Изменить группы синхронизации"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Импортировать контакты"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Направлять вызовы в голосовую почту"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Звонки направляются в голосовую почту"</string>
<string name="default_ringtone" msgid="9099988849649827972">"По умолчанию"</string>
- <string name="addPicture" msgid="1594679312161537678">"Добавить значок"</string>
<string name="changePicture" msgid="2943329047610967714">"Изменить значок"</string>
<string name="removePicture" msgid="3041230993155966350">"Удалить значок"</string>
<string name="noContacts" msgid="8579310973261953559">"Нет контактов."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Подходящие контакты не найдены."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Нет контактов с номерами телефонов."</string>
- <string name="noFavorites" msgid="812766386743315815">"Нет избранных."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Группы"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Группа \"<xliff:g id="GROUPNAME">%s</xliff:g>\" пуста."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Все контакты"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Контакты с телефонами"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Отображать только контакты, содержащие номера телефонов"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Выберите контакты для показа"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"Контактов: <xliff:g id="COUNT_0">%1$d</xliff:g>; с тел. номерами: <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g>"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Синхронизировать все контакты"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Мои контакты"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Контакты с номерами телефонов"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Помеченные в Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Контакт сохраняется..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Варианты отображения сохраняются..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Контакт создан."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Контакт сохранен."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Ошибка. Не удалось сохранить изменения контакта."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Набрать номер"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Номера телефонов"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Отправить SMS/MMS"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Отправить письмо"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"Адреса электронной почты"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Отправить мгновенное сообщение"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Адреса в чате"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Адрес на карте"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Почтовые адреса"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Организации"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Группы"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Другая информация"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Другие параметры"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Добавить"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Показан 1 контакт с номером телефона"</item>
<item quantity="other" msgid="6133262880804110289">"Показаны контакты с номерами телефонов: <xliff:g id="COUNT">%d</xliff:g>"</item>
@@ -169,69 +126,60 @@
<item quantity="other" msgid="7752927996850263152">"Найдено контактов: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Контакт не найден."</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Социальные"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 контакт"</item>
+ <item quantity="other" msgid="5660384247071761844">"Контактов: <xliff:g id="COUNT">%d</xliff:g>"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Контакты"</string>
- <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Избранные"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Избранное"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Кнопки"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Вызовы"</string>
<string name="liveFolderAll" msgid="4789010460767506206">"Все контакты"</string>
<string name="liveFolderFavorites" msgid="3100957542927222282">"Помеченные контакты"</string>
<string name="liveFolderPhone" msgid="3739376066610926780">"Контакты с номерами телефонов"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Отправить SMS"</string>
- <string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Вызов: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Изменить номер и вызвать"</string>
<string name="recentCalls_addToContact" msgid="1429899535546487008">"Добавить в контакты"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Удалить из списка вызовов"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Очистить список вызовов"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Список вызовов пуст."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Очистить список вызовов"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Действительно очистить список вызовов?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Голосовая почта"</string>
<string name="unknown" msgid="740067747858270469">"Неизвестно"</string>
- <string name="private_num" msgid="6374339738119166953">"Частный номер"</string>
+ <string name="private_num" msgid="6374339738119166953">"Скрытый номер"</string>
<string name="payphone" msgid="4864313342828942922">"Телефон-автомат"</string>
<string name="dialerKeyboardHintText" msgid="5401660096579787344">"Наберите номер с клавиатуры"</string>
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Наберите номер, чтобы добавить вызов"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Загрузка с SIM-карты…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Контакты на SIM-карте"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Синхронизируйте контакты Google."</font>" "\n"После синхронизации с телефоном ваши контакты будут доступны отовсюду."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Отсутствуют контакты для отображения. (Если аккаунт был только что добавлен, потребуется несколько минут для синхронизации контактов.)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Отсутствуют контакты для отображения."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"У вас нет контактов."\n\n"Чтобы добавить контакты, нажмите "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Аккаунты"</b></font>", чтобы добавить или настроить аккаунт с контактами, которые можно будет синхронизировать с телефоном;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новый контакт"</b></font>", чтобы создать контакт \"с нуля\";"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт/Экспорт."</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"У вас нет контактов. (Если вы только что добавили аккаунт, синхронизация контактов может занять несколько минут.)"\n\n"Чтобы добавить контакты, нажмите "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Аккаунты"</b></font>", чтобы добавить или настроить аккаунт с контактами, которые можно будет синхронизировать с телефоном;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Варианты отображения"</b></font>", чтобы выбрать, какие контакты будут видны; "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новый контакт"</b></font>", чтобы создать контакт \"с нуля\";"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт/Экспорт."</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"У вас нет контактов."\n\n"Чтобы добавить контакты, нажмите "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Аккаунты"</b></font>", чтобы добавить или настроить аккаунт с контактами, которые можно будет синхронизировать с телефоном;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новый контакт"</b></font>", чтобы создать контакт \"с нуля\";"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт/Экспорт."</b></font>\n</li></string>
- <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Список контактов пуст. Если вы добавили аккаунт только что, контакты будут автоматически загружены в течение нескольких минут. "\n\n"Чтобы добавить контакты, нажмите кнопку "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Аккаунты"</b></font>", если вы хотите добавить контакты и другие данные из определенных аккаунтов;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Варианты отображения"</b></font>", если вы хотите выбрать определенные группы контактов для отображения в списке контактов; "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новый контакт"</b></font>", если вы хотите создать новый контакт самостоятельно;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт/Экспорт, если вы хотите копировать контакты с/на SD или SIM-карту."</b></font>\n</li></string>
- <string name="noFavoritesHelpText" msgid="3744655776704833277">"Список избранных контактов пуст."\n\n"Чтобы добавить контакт в избранные: "\n\n" "<li>"перейдите на вкладку "<b>"Контакты"</b>";"\n</li>" "\n<li>"выберите контакт;"\n</li>" "\n<li>"нажмите звездочку возле имени контакта."\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Выбрать группы для синхронизации"</string>
+ <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"У вас нет контактов. (Если вы только что добавили аккаунт, синхронизация контактов может занять несколько минут.)"\n\n"Чтобы добавить контакты, нажмите "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Аккаунты"</b></font>", чтобы добавить или настроить аккаунт с контактами, которые можно будет синхронизировать с телефоном;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Варианты отображения"</b></font>", чтобы выбрать, какие контакты будут видны; "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новый контакт"</b></font>", чтобы создать контакт \"с нуля\";"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт/Экспорт."</b></font>\n</li></string>
+ <string name="noFavoritesHelpText" msgid="3744655776704833277">"У вас нет избранных контактов."\n\n"Чтобы сделать контакт избранным,"\n\n" "<li>"нажмите вкладку "<b>"Контакты"</b>";"\n</li>" "\n<li>"нажмите контакт, который нужно сделать избранным;"\n</li>" "\n<li>"нажмите звездочку возле имени контакта."\n</li></string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Все контакты"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Помеченные"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Телефоны"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Использовать тональный набор"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Вернуться к ожидающему вызову"</string>
- <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Добавить вызов"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Доб. вызов"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Сведения о вызове"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Не удается получить сведения о вызове."</string>
- <string name="call_type" msgid="3213526349444862087">"Тип"</string>
<string name="type_incoming" msgid="6502076603836088532">"Входящий вызов"</string>
<string name="type_outgoing" msgid="343108709599392641">"Исходящий вызов"</string>
<string name="type_missed" msgid="2720502601640509542">"Пропущенный вызов"</string>
- <string name="call_time" msgid="5805575214626630975">"Время"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Продолжительность"</string>
- <string name="header_actions" msgid="229583643365836321">"Действия"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Мелодия: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Добавить сведения"</string>
- <string name="actionCall" msgid="695145166039381504">"Вызов: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Эл. почта: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"SMS: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Начать чат в <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Адрес <xliff:g id="TYPE">%s</xliff:g> на карте"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Входящие вызовы"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Будут направляться в голосовую почту"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Выбрано: <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
<string name="callBack" msgid="5498224409038809224">"Перезвонить"</string>
<string name="callAgain" msgid="3197312117049874778">"Позвонить снова"</string>
<string name="returnCall" msgid="8171961914203617813">"Перезвонить"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g>:<xliff:g id="SECONDS">%s</xliff:g>"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Часто вызываемые"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g>:<xliff:g id="SECONDS">%2$s</xliff:g>"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Часто набираемые"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Добавить контакт"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Добавить в контакты <xliff:g id="EMAIL">%s</xliff:g>?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"Все"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"пометить"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"нуль"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"решетка"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"голосовая почта"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"набор номера"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"удаление последнего символа"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"набираемый номер"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"фотография контакта"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"минус"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Нет SD-карты"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"SD-карта не обнаружена"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Поиск vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Откуда импортировать контакты?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Импортировать с SIM-карты"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Импортировать с SD-карты"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Экспортировать на SD-карту"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Передать видимые контакты"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Импорт одного файла VCard"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Импорт нескольких файлов vCard"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Импорт всех файлов VCard"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Не удалось обработать vCard по неизвестной причине."</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Не удалось обработать vCard. Файл правильного формата, но не поддерживается в текущей реализации."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"На SD-карте не найдены файлы VCard"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Не найдено правильных записей vCard."</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"Не удалось импортировать один или несколько файлов (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Неизвестная ошибка"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Выберите файл vCard"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Выберите файл vCard для импорта"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Чтение vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Чтение файлов VCard"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Импорт данных vCard"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Не удается считать данные vCard"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Не удается прочитать vCard."\n"Причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"Контакт <xliff:g id="CURRENT_NUMBER">%s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"Файл <xliff:g id="CURRENT_NUMBER">%s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Все контакты"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Контакты, сохраненные локально"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Экспорт контактов"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"Контакт <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"Файл <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Подтверждение·экспорта"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Вы действительно хотите экспортировать контакты в файл <xliff:g id="VCARD_FILENAME">%s</xliff:g>?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Не удалось экспортировать данные контакта."</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Нет контактов, которые можно экспортировать."</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"Слишком много файлов VCard на SD-карте."</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Название файла слишком длинное (<xliff:g id="FILENAME">%s</xliff:g>)."</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Не удается открыть или создать целевой каталог \"<xliff:g id="DIR_NAME">%s</xliff:g>\""</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Экспорт данных контакта"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Экспорт данных контакта в \"<xliff:g id="FILE_NAME">%s</xliff:g>\""</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Не удается запустить функцию экспорта: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Ошибка при экспорте: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Не удалось получить информацию из базы данных."</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Нет контактов, пригодных для экспорта. Можно выбрать неэкспортируемые данные."</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Нет контактов для экспорта. Если в вашем телефоне имеются контакты, возможно они защищены от экспорта оператором услуг."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"Редактор vCard запущен некорректно"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Не удается открыть \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"Не удается открыть \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"Контакт <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Имена контактов"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Добавить двухсекундную паузу"</string>
<string name="add_wait" msgid="3360818652790319634">"Добавить паузу"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Набор номера"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Вызов"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Отправить SMS с помощью"</string>
<string name="make_primary" msgid="5829291915305113983">"Запомнить выбранное"</string>
@@ -334,58 +280,57 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Все контакты"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Удаление группы \"<xliff:g id="GROUP">%s</xliff:g>\" из синхронизации приведет к удалению любых несгруппированных контактов из синхронизации."</string>
<string name="account_phone" msgid="4025734638492419713">"Только телефон (несинхронизирован)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Показать имя"</string>
- <string name="call_custom" msgid="7756571794763171802">"<xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="call_custom" msgid="7756571794763171802">"Позвонить (<xliff:g id="CUSTOM">%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="5605584621798108205">"Без категории"</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="7777261153532968503">"Факс"</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="2141641383068514308">"<xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="call_assistant" msgid="2141641383068514308">"Вызов: <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
<string name="call_mms" msgid="6274041545876221437">"MMS-центр"</string>
- <string name="sms_custom" msgid="5932736853732191825">"SMS: <xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="sms_custom" msgid="5932736853732191825">"SMS (<xliff:g id="CUSTOM">%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="5131921487474531617">"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="3930666870074006114">"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">"SMS: <xliff:g id="ASSISTANT">%s</xliff:g>"</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="email_home" msgid="8573740658148184279">"Личная эл. почта"</string>
<string name="email_mobile" msgid="2042889209787989814">"Моб. эл. почта"</string>
<string name="email_work" msgid="2807430017302722689">"Рабочая эл.почта"</string>
- <string name="email_other" msgid="8093933498541795832">"Эл. почта"</string>
- <string name="email_custom" msgid="7548003991586214105">"<xliff:g id="CUSTOM">%s</xliff:g>"</string>
+ <string name="email_other" msgid="3454004077967657109">"Написать письмо"</string>
+ <string name="email_custom" msgid="7548003991586214105">"Эл. почта (<xliff:g id="CUSTOM">%s</xliff:g>)"</string>
<string name="email" msgid="5668400997660065897">"Эл. почта"</string>
<string name="map_home" msgid="1243547733423343982">"Просмотреть домашний адрес"</string>
<string name="map_work" msgid="1360474076921878088">"Просмотреть рабочий адрес"</string>
- <string name="map_other" msgid="5560707927535653892">"Просмотреть другой адрес"</string>
+ <string name="map_other" msgid="3817820803587012641">"Просмотр адреса"</string>
<string name="map_custom" msgid="6184363799976265281">"Просмотр адреса: <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="chat_aim" msgid="2588492205291249142">"Чат через AIM"</string>
<string name="chat_msn" msgid="8041633440091073484">"Чат через Windows Live"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Имя (транскрипция)"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Отчество (транскрипция)"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Фамилия (транскрипция)"</string>
- <string name="split_label" msgid="8262112659919449087">"Разделить"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Сделать эти данные отдельным контактом."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Из аккаунта <xliff:g id="SOURCE">%1$s</xliff:g>: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"Контакт <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="from_account_format" msgid="687567483928582084">"из <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Использовать эту фотографию"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Невозможно изменить контактную информацию <xliff:g id="SOURCE">%1$s</xliff:g> на этом устройстве."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Отсутствует дополнительная информация об этом контакте."</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Упорядочить контакты"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"По имени"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"По фамилии"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Показывать в контактах"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Сначала имя"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Сначала фамилию"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Поиск контактов"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Поиск всех контактов"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Сфотографировать"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Выбрать фото из фотоальбома"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Выполняется обновление списка контактов, чтобы изменение языка вступило в силу."\n\n"Подождите..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Обновляется список контактов."\n\n"Подождите..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Контакты обновляются. "\n\n" Для обновления требуется около <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> МБ внутренней памяти телефона."\n\n"Выберите один из следующих вариантов:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Удалить некоторые приложения"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Повторить попытку обновления"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Результаты поиска для: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Поиск..."</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index c42fe16..1a68355 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Kontakter"</string>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"Ring <xliff:g id="NAME">%s</xliff:g>"</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="menu_showBarcode" msgid="309973637178814132">"Visa streckkod"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Redigera kontakt"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Ta bort kontakt"</string>
<string name="menu_call" msgid="3992595586042260618">"Ring upp kontakt"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Använd som standardnummer"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Använd som standardadress"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Dela upp"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Avdela kontakt"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Kontakterna har delats upp"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Dela upp kontakt"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Vill du dela upp den här kontakten i flera kontakter, en för varje uppsättning kontaktinformation som kombinerats i den?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Slå ihop"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Visa källor"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Dölj källor"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Anslut kontakt"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kombinera kontakter"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"Välj en kontakt som du vill slå ihop med <xliff:g id="NAME">%s</xliff:g>."</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"Visa alla kontakter"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Återgå"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Redigera kontakt"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Ny kontakt"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Mer info"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonetiskt"</string>
<string name="label_notes" msgid="8337354953278341042">"Anteckningar"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Ringsignal"</string>
- <string name="label_groups" msgid="7304551384542859026">"Grupper"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Redigera grupper"</string>
<string name="ghostData_name" msgid="6490954238641157585">"För- och efternamn"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Fonetiskt namn"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Företag"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Position"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"Chattnamn"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Min anteckning"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Telefonnummer"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-postadress"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Postadress"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Visa grupp"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Kontakten finns inte."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Skapa ny kontakt"</string>
<string name="selectLabel" msgid="4255424123394910733">"Välj etikett"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-post"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"Chatt"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Postadress"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Övrigt"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organisation"</item>
<item msgid="7196592230748086755">"Anteckning"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Inga bilder"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Det finns inga bilder på telefonen."</string>
<string name="attachToContact" msgid="8820530304406066714">"Kontaktikon"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Anpassat etikettsnamn"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Visningsalternativ"</string>
<string name="displayGroups" msgid="2278964020773993336">"Visa alternativ"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Redigera synkgrupper"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Importera kontakter"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Skicka samtal direkt till röstbrevlåda"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Samtal skickas direkt till röstbrevlådan."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Standardinställning"</string>
- <string name="addPicture" msgid="1594679312161537678">"Lägg till ikon"</string>
<string name="changePicture" msgid="2943329047610967714">"Ändra ikon"</string>
<string name="removePicture" msgid="3041230993155966350">"Ta bort ikon"</string>
<string name="noContacts" msgid="8579310973261953559">"Inga kontakter."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Inga matchande kontakter hittades."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Inga kontakter med telefonnummer."</string>
- <string name="noFavorites" msgid="812766386743315815">"Inga favoriter."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Grupper"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"Din grupp, <xliff:g id="GROUPNAME">%s</xliff:g>, är tom."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Alla kontakter"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Bara kontakter med telefoner"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Visa bara kontakter med telefonnummer"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Välj kontakter att visa"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> kontakter, <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> med telefon"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Synka alla kontakter"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Mina kontakter"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Kontakter med telefonnummer"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Stjärnmärkta i Android"</string>
<string name="savingContact" msgid="4075751076741924939">"Sparar kontakt..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Sparar visningsalternativ ..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Kontakt skapad."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Kontakt sparad."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Fel: det går inte att spara kontakter."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Ring upp"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Telefonnummer"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"Skicka SMS"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"Skicka e-post"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"E-postadresser"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Skicka snabbmeddelande"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Chattadresser"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Visa adress på karta"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Postadress"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Organisationer"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Grupper"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Övrig information"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Övriga alternativ"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Mer"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Visar en kontakt med telefonnummer"</item>
<item quantity="other" msgid="6133262880804110289">"Visar <xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnummer"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"<xliff:g id="COUNT">%d</xliff:g> kontakter hittades"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Kontakten hittades inte"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Socialt"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 kontakt"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> kontakter"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Kontakter"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriter"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Ta bort från samtalshistorik"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Rensa samtalshistorik"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Samtalshistoriken är tom."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Rensa samtalshistorik"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Vill du rensa samtalshistoriken?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI-kod"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Röstbrevlåda"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Ring/lägga till"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Läser in från SIM-kort…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakter från SIM-kort"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Synka dina Google-kontakter!"</font>" "\n"När du har synkat med telefonen kan du använda dina kontakter var du än är."</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Du har inga kontakter att visa. (Om du nyss lade till ett konto kan det ta några minuter innan kontakterna synkroniserats.)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Du har inga kontakter att visa."</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"Det finns inga kontakter att visa."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>\n</li></string>
- <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Det finns inga kontakter att visa (om du nyss har lagt till ett konto kan det ta några minuter att synkronisera kontakter)."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativ"</b></font>" om du vill ändra vilka kontakter som är synliga"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Det finns inga kontakter att visa."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Det finns inga kontakter att visa (om du nyss har lagt till ett konto kan det ta några minuter att synkronisera kontakter)."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativ"</b></font>" om du vill ändra vilka kontakter som är synliga"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>\n</li></string>
+ <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Det finns inga kontakter att visa (om du nyss har lagt till ett konto kan det ta några minuter att synkronisera kontakter)."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativ"</b></font>" om du vill ändra vilka kontakter som är synliga"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Det finns inga kontakter att visa."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Det finns inga kontakter att visa (om du nyss har lagt till ett konto kan det ta några minuter att synkronisera kontakter)."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativ"</b></font>" om du vill ändra vilka kontakter som är synliga"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har inte några favoriter."\n\n"Så här lägger du till kontakter i favoritlistan:"\n\n" "<li>"Tryck på fliken "<b>"Kontakter"</b>\n</li>" "\n<li>"Tryck på den kontakt du vill lägga till i favoriterna"\n</li>" "\n<li>"Tryck på stjärnan bredvid kontaktens namn"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Välj grupper att synka"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Alla kontakter"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Stjärnmärkt"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoner"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Lägg t. samt."</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Samtalsinfo"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Det gick inte att läsa information om samtalet."</string>
- <string name="call_type" msgid="3213526349444862087">"Typ"</string>
<string name="type_incoming" msgid="6502076603836088532">"Inkommande samtal"</string>
<string name="type_outgoing" msgid="343108709599392641">"Utgående samtal"</string>
<string name="type_missed" msgid="2720502601640509542">"Missat samtal"</string>
- <string name="call_time" msgid="5805575214626630975">"Tid"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Längd"</string>
- <string name="header_actions" msgid="229583643365836321">"Aktiviteter"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Ringsignal: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Lägg till fler objekt"</string>
- <string name="actionCall" msgid="695145166039381504">"Ring <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"Skicka e-post till <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"Skicka SMS till <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"Chatta med <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionMap" msgid="1977955782051732775">"Visa adress, <xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Inkommande samtal"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Skickas direkt till röstbrevlådan"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"Inställd på <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> minuter <xliff:g id="SECONDS">%s</xliff:g> sekunder"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Ringer ofta"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> minuter <xliff:g id="SECONDS">%2$s</xliff:g> sekunder"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Ofta kontaktade"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Lägg till kontakt"</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="all_tab_label" msgid="4003124364397916826">"Alla"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"Stjärna"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"noll"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pund"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"röstbrevlåda"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backsteg"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"nummer att ringa"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"kontaktbild"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"minus"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"Inget SD-kort"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Inget SD-kort hittades"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"Söker efter vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Varifrån vill du importera dina kontakter?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importera från SIM-kort"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"Importera från SD-kort"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"Exportera till SD-kort"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Dela synliga kontakter"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Importera en vCard-fil"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Importera flera vCard-filer"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importera alla vCard-filer"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Det gick inte att analysera vCard av okänd anledning"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Det gick inte att analysera vCard trots att formatet verkar vara giltigt. Den aktuella implementeringen stöder inte det."</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"Ingen vCard-fil hittades på SD-kortet"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Det finns ingen vCard-post i den valda filen"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"En eller flera filer kunde inte importeras: (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Okänt fel"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"Välj vCard-fil"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Välj en vCard-fil att importera"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"Läser vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"Läser vCard-filer"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"Importera vCard-data"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"Det gick inte att läsa vCard-data"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"Det gick inte att läsa vCard."\n"Orsak: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> filer"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Alla kontakter"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Lokalt sparade kontakter"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Exportera kontakter"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontakter"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> filer"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Bekräfta export"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"Vill du exportera kontaktlistan till \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\"?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Det gick inte att exportera kontaktdata"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Det finns ingen kontakt som kan exporteras"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"För många vCard-filer på SD-kortet"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Det obligatoriska filnamnet är för långt (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"Det går inte att öppna målkatalogen <xliff:g id="DIR_NAME">%s</xliff:g>"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporterar kontaktuppgifter"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"Exporterar kontaktuppgifter till: <xliff:g id="FILE_NAME">%s</xliff:g>"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Det gick inte att starta exportverktyget: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Ett fel uppstod under export: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Det gick inte att hämta databasinformation"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Det finns ingen kontakt som kan exporteras. Du kan välja data som inte kan exporteras"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Det finns ingen kontakt som kan exporteras. Om du vet att du har kontakter i din telefon kan problemet vara att en leverantör förhindrar att kontakterna exporteras från telefonen."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"vCard-kompositören är inte korrekt initierad"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"Det gick inte att öppna <xliff:g id="FILE_NAME">%s</xliff:g>: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"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="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kontakter"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Dina kontakters namn"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Lägg till en paus på 2 sek."</string>
<string name="add_wait" msgid="3360818652790319634">"Lägg till väntetid"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Ring"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Ring upp med"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Skicka SMS med"</string>
<string name="make_primary" msgid="5829291915305113983">"Kom ihåg det här valet"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Alla kontakter"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"Om du tar bort \"<xliff:g id="GROUP">%s</xliff:g>\" från synkroniseringen tas även alla kontakter som inte tillhör grupper bort från synkroniseringen."</string>
<string name="account_phone" msgid="4025734638492419713">"Bara telefon (osynkad)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Visningsnamn"</string>
<string name="call_custom" msgid="7756571794763171802">"Ring <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"Ring hem"</string>
<string name="call_mobile" msgid="7502236805487609178">"Ring mobilen"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"Ring – annan"</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="7777261153532968503">"Ring upp annan fax"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"SMS – annan"</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="3930666870074006114">"Skicka SMS till annan fax"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"Skicka e-post till annan"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-post"</string>
<string name="email_custom" msgid="7548003991586214105">"Skicka e-post till <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-post"</string>
<string name="map_home" msgid="1243547733423343982">"Visa hemadress"</string>
<string name="map_work" msgid="1360474076921878088">"Visa jobbadress"</string>
- <string name="map_other" msgid="5560707927535653892">"Visa annan adress"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visa adress"</string>
<string name="map_custom" msgid="6184363799976265281">"Visa adress, <xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Fonetiskt förnamn"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetiskt mellannamn"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Fonetiskt efternamn"</string>
- <string name="split_label" msgid="8262112659919449087">"Dela"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Gör dessa data till en egen kontakt."</string>
- <string name="account_name_format" msgid="4421123930035299208">"Från <xliff:g id="SOURCE">%1$s</xliff:g>-konto: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-kontakt"</string>
<string name="from_account_format" msgid="687567483928582084">"från <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Använd det här fotot"</string>
<string name="contact_read_only" msgid="1203216914575723978">"Kontaktinformation för <xliff:g id="SOURCE">%1$s</xliff:g> kan inte redigeras i den här enheten."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Det finns ingen mer information för kontakten"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Sortera lista efter"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Förnamn"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Efternamn"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Visa kontaktnamn som"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Förnamn först"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Efternamn först"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Sök efter kontakter"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Sök efter alla kontakter"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Ta en bild"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Välj ett foto från galleriet"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktlistan uppdateras så att språkändringen visas."\n\n"Vänta..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Kontaktlistan uppdateras."\n\n"Vänta..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Kontakter håller på att uppgraderas. "\n\n"Uppgraderingen kräver ungefär <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g>MB av telefonens internminne."\n\n"Välj något av följande alternativ:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Avinstallera några program"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Försök uppgradera igen"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Sökresultat för: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Söker..."</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index df91cdc..b360da8 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"Kişiler"</string>
@@ -34,10 +35,9 @@
<string name="menu_search" msgid="9147752853603483719">"Ara"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Yeni kişi"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Kişiyi görüntüle"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Çağrı yap (<xliff:g id="NAME">%s</xliff:g>)"</string>
+ <string name="menu_callNumber" msgid="5142851348489387516">"Şunu sesli ara: <xliff:g id="NAME">%s</xliff:g>"</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="menu_showBarcode" msgid="309973637178814132">"Barkodu göster"</string>
<string name="menu_editContact" msgid="3452858480713561396">"Kişiyi düzenle"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"Kişiyi sil"</string>
<string name="menu_call" msgid="3992595586042260618">"Çağrı yap"</string>
@@ -47,16 +47,12 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"Varsayılan numara yap"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"Varsayılan e-posta yap"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"Ayır"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"Kişiyi ayır"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"Kişi ayrıldı"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"Kişiyi Ayır"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"Bu tek kişiyi birden fazla kişiye ayırmak istediğinizden emin misiniz? Bu kişiye eklenen kişi bilgileri setinin her biri için bir kişi oluşturulsun mu?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"Birleştir"</string>
- <string name="menu_showSources" msgid="885215611438295455">"Kaynakları göster"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"Kaynakları gizle"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"Kişi birleştir"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"Kişileri birleştir"</string>
- <string name="blurbJoinContactDataWith" msgid="995870557595050304">"<xliff:g id="NAME">%s</xliff:g> ile birleştirmek istediğiniz kişiyi seçin."</string>
+ <string name="blurbJoinContactDataWith" msgid="995870557595050304">"<xliff:g id="NAME">%s</xliff:g> ile katılmak 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>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"Geri Döndür"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"Kişiyi düzenle"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"Yeni kişi"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"Daha fazla bilgi"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"Fonetik"</string>
<string name="label_notes" msgid="8337354953278341042">"Notlar"</string>
<string name="label_ringtone" msgid="8833166825330686244">"Zil sesi"</string>
- <string name="label_groups" msgid="7304551384542859026">"Gruplar"</string>
- <string name="group_list" msgid="8583361685440161307">", <xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"Grupları düzenle"</string>
<string name="ghostData_name" msgid="6490954238641157585">"Adı ve Soyadı"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"Fonetik adı"</string>
<string name="ghostData_company" msgid="5414421120553765775">"Şirket"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"Konum"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"IM adı"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"Notum"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"Telefon numarası"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"E-posta adresi"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"Posta adresi"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"Grubu görüntüle"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Başlık"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"Kişi mevcut değil."</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Yeni kişi oluştur"</string>
<string name="selectLabel" msgid="4255424123394910733">"Etiketi seç"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"E-posta"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"Posta adresi"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"Diğer"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Kuruluş"</item>
<item msgid="7196592230748086755">"Not"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"Resim yok"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"Telefonda hiçbir resim yok."</string>
<string name="attachToContact" msgid="8820530304406066714">"Kişi simgesi"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Özel etiket adı"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"Seçenekleri görüntüle"</string>
<string name="displayGroups" msgid="2278964020773993336">"Seçenekleri görüntüle"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"Senk. grupları düzenle"</string>
- <string name="importFromSim" msgid="8383900146531125319">"Kişileri içe aktar"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Çağrıları doğrudan sesli mesaja gönder"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"Çağrılar doğrudan sesli mesaja gönderildi."</string>
<string name="default_ringtone" msgid="9099988849649827972">"Varsayılan"</string>
- <string name="addPicture" msgid="1594679312161537678">"Simge ekle"</string>
<string name="changePicture" msgid="2943329047610967714">"Simgeyi değiştir"</string>
<string name="removePicture" msgid="3041230993155966350">"Simgeyi kaldır"</string>
<string name="noContacts" msgid="8579310973261953559">"Hiçbir kişi yok."</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Eşleşen kişi bulunamadı."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Telefon numarası olan hiçbir kişi yok."</string>
- <string name="noFavorites" msgid="812766386743315815">"Sık kullanılan yok."</string>
- <string name="select_group_title" msgid="7955698611959835612">"Gruplar"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"\"<xliff:g id="GROUPNAME">%s</xliff:g>\" grubunuz boş."</string>
- <string name="showAllGroups" msgid="5164410117611094297">"Tüm kişiler"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"Yalnızca telefonu olan kişiler"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"Yalnızca telefon numarası olan kişileri görüntüle"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"Görüntülenecek kişileri seçin"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> kişi, telefonu olan <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> kişi"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"Tüm kişileri senkronize et"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"Kişilerim"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"Telefon numarası olan kişiler"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Android\'de yıldızlı"</string>
<string name="savingContact" msgid="4075751076741924939">"Kişi kaydediliyor..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"Görüntüleme seçenekleri kaydediliyor..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"Kişi oluşturuldu."</string>
<string name="contactSavedToast" msgid="7152589189385441091">"Kişi kaydedildi."</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Hata, kişi değişiklikleri kaydedilemiyor."</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"Numarayı çevir"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"Telefon numaraları"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"SMS gönder"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"E-posta gönder"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"E-posta adresleri"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"Anlık ileti gönder"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"Sohbet adresleri"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"Adresi haritada göster"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"Posta adresleri"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"Kuruluşlar"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"Gruplar"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"Diğer bilgiler"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"Diğer seçenekler"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"Diğer"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"Telefon numarası olan 1 kişi görüntüleniyor"</item>
<item quantity="other" msgid="6133262880804110289">"Telefon numarası olan <xliff:g id="COUNT">%d</xliff:g> kişi görüntüleniyor"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"<xliff:g id="COUNT">%d</xliff:g> kişi bulundu"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"Kişi bulunamadı"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"Sosyal"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 kişi"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> kişi"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"Kişiler"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Sık Kullanılanlar"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
@@ -178,12 +138,14 @@
<string name="liveFolderFavorites" msgid="3100957542927222282">"Yıldızlı kişiler"</string>
<string name="liveFolderPhone" msgid="3739376066610926780">"Telefon numarası olan kişiler"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Kısa mesaj gönder"</string>
- <string name="recentCalls_callNumber" msgid="1756372533999226126">"Çağrı yap (<xliff:g id="NAME">%s</xliff:g>)"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Şunu sesli ara: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Önce numarayı düzenle"</string>
<string name="recentCalls_addToContact" msgid="1429899535546487008">"Kişilere ekle"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Çağrı kaydından kaldır"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Çağrı kaydını temizle"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"Çağrı kaydı boş."</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"Çağrı kaydını temizle"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"Çağrı kaydını silmek istediğinizden emin misiniz?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"Sesli Mesaj"</string>
@@ -194,13 +156,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"Arama eklemek için çevir"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM karttan yükleniyor..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM kart kişileri"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"Google kişilerinizi senkronize edin!"</font>" "\n"Telefonunuzu senkronize ettikten sonra, kişilerinize gittiğiniz her yerden ulaşabilirsiniz."</string>
- <string name="noContactsHelpText" msgid="6788487368878712350">"Görüntülenecek kişiniz yok."\n\n"Kişi eklemek için, "<font fgcolor="#ffffffff"><b>"Menü"</b></font>"\'ye basın ve şunlara dokunun:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Hesaplar"</b></font>" (telefon ile senkronize edebileceğiniz kişilere sahip olan bir hesap eklemek veya yapılandırmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Yeni kişi"</b></font>" (en baştan yeni bir kişi eklemek için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"İçe/Dışa Aktar"</b></font>\n</li></string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Görüntülenecek kişiniz yok. (Hesabı yeni eklediyseniz, kişilerin senkronize edilmesi birkaç dakika sürebilir.)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Görüntülenecek kişiniz yok."</string>
+ <string name="noContactsHelpText" msgid="6788487368878712350">"Görüntülenecek hiçbir kişiniz yok."\n\n"Kişi eklemek için, "<font fgcolor="#ffffffff"><b>"Menü"</b></font>"\'ye basın ve şunlara dokunun:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Hesaplar"</b></font>" (telefon ile senkronize edebileceğiniz kişilere sahip olan bir hesap eklemek veya yapılandırmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Yeni kişi"</b></font>" (en baştan yeni bir kişi eklemek için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"İçe/Dışa Aktar"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"Görüntülenecek hiçbir kişiniz yok. (Kısa süre önce bir hesap eklediyseniz, kişileri senkronize etmek birkaç dakika sürebilir.)"\n\n"Kişi eklemek için, "<font fgcolor="#ffffffff"><b>"Menü"</b></font>"\'ye basın ve şunlara dokunun:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Hesaplar"</b></font>" (telefon ile senkronize edebileceğiniz kişilere sahip olan bir hesap eklemek veya yapılandırmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Seçenekleri görüntüle"</b></font>" (görülebilir kişileri değiştirmek için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Yeni kişi"</b></font>" (en baştan yeni bir kişi oluşturmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"İçe/Dışa Aktar"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"Görüntülenecek hiçbir kişiniz yok."\n\n"Kişi eklemek için, "<font fgcolor="#ffffffff"><b>"Menü"</b></font>"\'ye basın ve şunlara dokunun:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Hesaplar"</b></font>" (telefon ile senkronize edebileceğiniz kişilere sahip olan bir hesap eklemek veya yapılandırmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Yeni kişi"</b></font>" (en baştan yeni bir kişi eklemek için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"İçe/Dışa Aktar"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"Görüntülenecek hiçbir kişiniz yok. (Kısa süre önce bir hesap eklediyseniz, kişileri senkronize etmek birkaç dakika sürebilir.)"\n\n"Kişi eklemek için, "<font fgcolor="#ffffffff"><b>"Menü"</b></font>"\'ye basın ve şunlara dokunun:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Hesaplar"</b></font>" (telefon ile senkronize edebileceğiniz kişilere sahip olan bir hesap eklemek veya yapılandırmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Seçenekleri görüntüle"</b></font>" (görülebilir kişileri değiştirmek için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Yeni kişi"</b></font>" (en baştan yeni bir kişi oluşturmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"İçe/Dışa Aktar"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Favoriniz bulunmuyor."\n\n"Favoriler listenize kişi eklemek için:"\n\n" "<li><b>"Kişiler"</b>" sekmesine dokunun"\n</li>" "\n<li>"Favorilerinize eklemek istediğiniz kişiye dokunun"\n</li>" "\n<li>"Kişi adının yanındaki yıldız simgesine dokunun"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"Senkronize edilecek grupları seç"</string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"Tüm kişiler"</string>
<string name="liveFolder_favorites_label" msgid="2674341514070517105">"Yıldızlı"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefonlar"</string>
@@ -209,29 +171,15 @@
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Çağrı ekle"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Çağrı ayrıntıları"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"İstenen çağrı için ayrıntılar okunamadı."</string>
- <string name="call_type" msgid="3213526349444862087">"Tür"</string>
<string name="type_incoming" msgid="6502076603836088532">"Gelen çağrı"</string>
<string name="type_outgoing" msgid="343108709599392641">"Giden çağrı"</string>
<string name="type_missed" msgid="2720502601640509542">"Cevapsız çağrı"</string>
- <string name="call_time" msgid="5805575214626630975">"Saat"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"Süre"</string>
- <string name="header_actions" msgid="229583643365836321">"İşlemler"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"Zil sesi: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"Daha fazla öğe ekle"</string>
- <string name="actionCall" msgid="695145166039381504">"Çağrı yap (<xliff:g id="TYPE">%s</xliff:g>)"</string>
- <string name="actionEmail" msgid="3870371552333656807">"E-posta gönder: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"SMS gönder: <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"<xliff:g id="TYPE">%s</xliff:g> kullanarak sohbet et"</string>
- <string name="actionMap" msgid="1977955782051732775">"<xliff:g id="TYPE">%s</xliff:g> adresini görüntüle"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Gelen çağrılar"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"Doğrudan sesli mesaja gönderilecek"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"<xliff:g id="RINGTONE_NAME">%s</xliff:g> olarak ayarla"</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="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> dak <xliff:g id="SECONDS">%s</xliff:g> sn"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"Sık aranan"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> dak <xliff:g id="SECONDS">%2$s</xliff:g> sn"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"Sık iletişim kurulanlar"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"Kişi ekle"</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="all_tab_label" msgid="4003124364397916826">"Tümü"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"yıldız"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"sıfır"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"Sesli mesaj"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"çevir"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"geri tuşu"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"çevrilecek numara"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"kişi fotoğrafı"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"eksi"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"artı"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"SD kart yok"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"Hiçbir SD kart tespit edilmedi"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"vCard aranıyor"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"Kişilerin nereden içe aktarılmasını istiyorsunuz?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"SIM karttan içe aktar"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"SD karttan içe aktar"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"SD karta dışa aktar"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"Görülebilir kişileri paylaş"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"Bir vCard dosyasını içe aktar"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"Birden fazla vCard dosyasını içe aktar"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"Tüm vCard dosyalarını içe aktar"</string>
@@ -264,43 +219,34 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"Beklenmedik bir nedenden dolayı vCard ayrıştırılamadı"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"Geçerli biçimde görünmesine rağmen vCard ayrıştırılamadı, çünkü şu anki uygulama vCard\'ı desteklemiyor"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"SD kartta hiçbir vCard dosyası bulunamadı"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"Seçiminiz için geçerli vCard girdisi bulunamadı"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"İçe aktarılamayan bir veya birden fazla dosya (%s)."</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"Bilinmeyen hata"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"vCard dosyasını seç"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"Lütfen içe aktarılacak bir vCard dosyası seçin"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"vCard okunuyor"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"vCard dosyaları okunuyor"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"vCard verileri içe aktarılıyor"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"vCard verileri okunamadı"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"vCard okunamadı."\n"Hata nedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kişi"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"toplam <xliff:g id="TOTAL_NUMBER">%s</xliff:g> dosyadan <xliff:g id="CURRENT_NUMBER">%s</xliff:g>. dosya"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"Tüm kişiler"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"Yerel olarak depolanan kişiler"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"Kişileri dışa aktar"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"Toplam <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kişiden <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> kişi"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"toplam <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> dosyadan <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>. dosya"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"Dışa aktarımı onayla"</string>
- <string name="confirm_export_message" msgid="3875683519257829750">"Kişi listenizi \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\" dosyasına dışa aktarmak istediğinizden emin misiniz?"</string>
+ <string name="confirm_export_message" msgid="3875683519257829750">"Kişi listenizi \"<xliff:g id="VCARD_FILENAME">%s</xliff:g>\" için dışa aktarmak istediğinizden emin misiniz?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"Kişi verileri dışa aktarılamadı"</string>
<string name="exporting_contact_failed_message" msgid="4151348002470298092">"Kişi verileri dışa aktarılamadı."\n"Hata nedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"Dışa aktarılabilen hiçbir kişi yok"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"SD kartta çok fazla vCard dosyası var"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"Gereken dosya adı çok uzun (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"\"<xliff:g id="DIR_NAME">%s</xliff:g>\" hedef dizini açılamıyor veya oluşturulamıyor"</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="5640326540405486055">"Kişi verileri \"<xliff:g id="FILE_NAME">%s</xliff:g>\" dosyasına dışa aktarılıyor"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"Dışa aktarıcı başlatılamadı: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"Dışa aktarma sırasında hata oluştu: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"Veri tabanı bilgileri alınamadı"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"Dışa aktarılabilir kişi yok. Dışa aktarılamayan veriler seçmiş olabilirsiniz"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"Dışa aktarılabilir kişi yok. Telefonunuzda aslında kişi kayıtları varsa, veri sağlayıcısı tarafından tüm kişilerin telefon dışına aktarılması yasaklanmış olabilir."</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"vCard oluşturucu doğru bir şekilde başlatılmamış"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" dosyası açılamadı: <xliff:g id="EXACT_REASON">%s</xliff:g>"</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> kişi"</string>
+ <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" dosyası açılamadı: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"Toplam <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> kişiden <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> kişi"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Kişilerinizin adları"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2 saniyelik duraklama ekle"</string>
<string name="add_wait" msgid="3360818652790319634">"Bekleme ekle"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"Çevir"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"Şunu kullanarak çağrı yap"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"Şunu kullanarak SMS gönder:"</string>
<string name="make_primary" msgid="5829291915305113983">"Bu tercihi anımsa"</string>
@@ -334,27 +280,26 @@
<string name="display_all_contacts" msgid="6846131371214707956">"Tüm Kişiler"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"\'<xliff:g id="GROUP">%s</xliff:g>\' grubunu senkronizasyondan kaldırmak, gruplandırılmamış tüm kişileri de senkronizasyondan kaldırır."</string>
<string name="account_phone" msgid="4025734638492419713">"Yalnızca telefon (senkronize edilmemiş)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"Adı görüntüle"</string>
- <string name="call_custom" msgid="7756571794763171802">"Çağrı yap (<xliff:g id="CUSTOM">%s</xliff:g>)"</string>
+ <string name="call_custom" msgid="7756571794763171802">"Ara (<xliff:g id="CUSTOM">%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="5605584621798108205">"Çağrı yap (diğer)"</string>
+ <string name="call_other" msgid="8563753966926932052">"Sesli arama yap"</string>
<string name="call_callback" msgid="1910165691349426858">"Çağrı yap (geri arama)"</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">"Çağrı yap (ISDN)"</string>
<string name="call_main" msgid="6082900571803441339">"Çağrı yap (ana hat)"</string>
- <string name="call_other_fax" msgid="7777261153532968503">"Çağrı yap (diğer faks)"</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">"Çağrı yap (teleks)"</string>
<string name="call_tty_tdd" msgid="8951266948204379604">"Çağrı yap (TTY/TDD)"</string>
<string name="call_work_mobile" msgid="8707874281430105394">"Çağrı yap (iş cep telefonu)"</string>
<string name="call_work_pager" msgid="3419348514157949008">"Çağrı yap (iş çağrı cihazı)"</string>
- <string name="call_assistant" msgid="2141641383068514308">"Çağrı yap (<xliff:g id="ASSISTANT">%s</xliff:g>)"</string>
+ <string name="call_assistant" msgid="2141641383068514308">"Çağrı: <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
<string name="call_mms" msgid="6274041545876221437">"Çağrı yap (MMS)"</string>
<string name="sms_custom" msgid="5932736853732191825">"Metin <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="sms_home" msgid="7524332261493162995">"SMS gönder (ev)"</string>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"SMS gönder (diğer)"</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="3930666870074006114">"SMS Gönder (diğer faks)"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"E-posta gönder (diğer)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-posta"</string>
<string name="email_custom" msgid="7548003991586214105">"E-posta <xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"E-posta"</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="5560707927535653892">"Diğer adresi görüntüle"</string>
+ <string name="map_other" msgid="3817820803587012641">"Adresi görüntüle"</string>
<string name="map_custom" msgid="6184363799976265281">"<xliff:g id="CUSTOM">%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>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Fonetik adı"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetik ikinci ad"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Fonetik soyadı"</string>
- <string name="split_label" msgid="8262112659919449087">"Ayır"</string>
- <string name="split_explanation" msgid="1824739956426973592">"Bu veriyi kendi kişisi haline getirin."</string>
- <string name="account_name_format" msgid="4421123930035299208">"<xliff:g id="SOURCE">%1$s</xliff:g> hesabından: <xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kişi"</string>
<string name="from_account_format" msgid="687567483928582084">"kaynak: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"Bu fotoğrafı kullan"</string>
<string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g> kişi bilgileri bu cihazda düzenlenemez."</string>
<string name="no_contact_details" msgid="6754415338321837001">"Bu kişi için ek bilgi yok"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"Listeyi şu ölçüte göre sırala:"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"Adı"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"Soyadı"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"Kişi adlarını görüntüleme şekli:"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"Önce adı"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"Önce soyadı"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"Kişileri ara"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"Tüm kişilerde ara"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Fotoğraf çek"</string>
+ <string name="pick_photo" msgid="448886509158039462">"Galeri\'den fotoğraf seç"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"Kişi listesi, dil değişikliğini yansıtmak üzere güncelleniyor."\n\n"Lütfen bekleyin..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"Kişi listesi güncelleniyor."\n\n"Lütfen bekleyin..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"Kişiler yeni sürüme geçiriliyor. "\n\n"Yeni sürüme geçirme işlemi yaklaşık <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g>Mb dahili telefon depolama alanı gerektirir."\n\n"Aşağıdaki seçeneklerden birini belirleyin:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Bazı uygulamaları kaldır"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Yeni sürüme geçmeyi tekrar dene"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"Şunun için arama sonuçları: <xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Aranıyor..."</string>
</resources>
diff --git a/res/values-zh-rCN/donottranslate_config.xml b/res/values-zh-rCN/donottranslate_config.xml
new file mode 100644
index 0000000..c5d3aea
--- /dev/null
+++ b/res/values-zh-rCN/donottranslate_config.xml
@@ -0,0 +1,35 @@
+<?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.
+*/
+-->
+
+<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 20cbf18..65af296 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,10 +12,11 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"联系人"</string>
+ <string name="contactsList" msgid="8661624236494819731">"通讯录"</string>
<string name="launcherDialer" msgid="8636288196618486553">"拨号"</string>
<string name="shortcutContact" msgid="749243779392912958">"联系人"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"直接拨打"</string>
@@ -23,7 +24,7 @@
<string name="shortcutActivityTitle" msgid="6642877210643565436">"选择联系人快捷方式"</string>
<string name="callShortcutActivityTitle" msgid="6065749861423648991">"选择一个可直接拨号的号码"</string>
<string name="messageShortcutActivityTitle" msgid="3084542316620335911">"选择一个可直接向其发送短信的号码"</string>
- <string name="starredList" msgid="4817256136413959463">"已加星标"</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>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"呼叫<xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"添加到收藏"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"从收藏中删除"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"显示条形码"</string>
<string name="menu_editContact" msgid="3452858480713561396">"编辑联系人"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"删除联系人"</string>
<string name="menu_call" msgid="3992595586042260618">"呼叫联系人"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"设置默认号码"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"设置为默认电子邮件"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"拆分"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"分离联系人"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"已拆分联系人"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"拆分联系人"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"您确定要将此单一联系人拆分为多位联系人(即,其中包含的每条联系信息分别对应一位联系人)吗?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"合并"</string>
- <string name="menu_showSources" msgid="885215611438295455">"显示来源"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"隐藏来源"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"合并联系人"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"合并联系人"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"选择要与<xliff:g id="NAME">%s</xliff:g>合并的联系人。"</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"显示所有联系人"</string>
@@ -72,56 +68,36 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"取消"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"编辑联系人"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"新建联系人"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"详细信息"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"拼音"</string>
<string name="label_notes" msgid="8337354953278341042">"备注"</string>
<string name="label_ringtone" msgid="8833166825330686244">"铃声"</string>
- <string name="label_groups" msgid="7304551384542859026">"群组"</string>
- <string name="group_list" msgid="8583361685440161307">"、<xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"编辑群组"</string>
<string name="ghostData_name" msgid="6490954238641157585">"姓名"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"姓名拼音"</string>
<string name="ghostData_company" msgid="5414421120553765775">"公司"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"职位"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"即时通讯帐号"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"我的备注"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"电话号码"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"电子邮件地址"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"邮政地址"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"显示群组"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"职位"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"该联系人不存在。"</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"新建联系人"</string>
<string name="selectLabel" msgid="4255424123394910733">"选择标签"</string>
<string name="phoneLabelsGroup" msgid="6468091477851199285">"电话"</string>
- <string name="emailLabelsGroup" msgid="8389931313045344406">"电子邮件"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"发送电子邮件"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"即时消息"</string>
- <string name="postalLabelsGroup" msgid="1618078212734693682">"邮政地址"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"其他"</string>
+ <string name="postalLabelsGroup" msgid="1618078212734693682">"通信地址"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"组织"</item>
<item msgid="7196592230748086755">"备注"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"没有照片"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"手机上没有照片。"</string>
<string name="attachToContact" msgid="8820530304406066714">"联系人图标"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"自定义标签名称"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"显示选项"</string>
<string name="displayGroups" msgid="2278964020773993336">"显示选项"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"编辑同步群组"</string>
- <string name="importFromSim" msgid="8383900146531125319">"导入联系人"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"直接将来电发送到语音信箱"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"来电将直接发送到语音信箱。"</string>
- <string name="default_ringtone" msgid="9099988849649827972">"默认"</string>
- <string name="addPicture" msgid="1594679312161537678">"添加图标"</string>
+ <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"直接将来电转到语音信箱"</string>
+ <string name="default_ringtone" msgid="9099988849649827972">"默认日历"</string>
<string name="changePicture" msgid="2943329047610967714">"更改图标"</string>
<string name="removePicture" msgid="3041230993155966350">"删除图标"</string>
<string name="noContacts" msgid="8579310973261953559">"没有联系人。"</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"未找到匹配的联系人。"</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"没有联系人拥有电话号码。"</string>
- <string name="noFavorites" msgid="812766386743315815">"未收藏任何联系人。"</string>
- <string name="select_group_title" msgid="7955698611959835612">"群组"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"“<xliff:g id="GROUPNAME">%s</xliff:g>”群组为空。"</string>
- <string name="showAllGroups" msgid="5164410117611094297">"所有联系人"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"仅显示有电话号码的联系人"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"仅显示有电话号码的联系人"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"选择要显示的联系人"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"共 <xliff:g id="COUNT_0">%1$d</xliff:g> 位联系人,其中 <xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> 位有电话号码"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"同步所有联系人"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"我的联系人"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"有电话号码的联系人"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"Android 中加星标的联系人"</string>
<string name="savingContact" msgid="4075751076741924939">"正在保存联系人…"</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"正在保存显示选项…"</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"已创建联系人。"</string>
<string name="contactSavedToast" msgid="7152589189385441091">"此联系人已保存。"</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"发生错误,无法保存联系人更改。"</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"拨打电话"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"电话号码"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"发送短信"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"发送电子邮件"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"电子邮件地址"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"发送即时消息"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"聊天地址"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"地图地址"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"邮政地址"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"组织"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"群组"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"其他信息"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"其他选项"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"更多"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"显示 1 位有电话号码的联系人"</item>
<item quantity="other" msgid="6133262880804110289">"显示 <xliff:g id="COUNT">%d</xliff:g> 位有电话号码的联系人"</item>
@@ -169,8 +126,11 @@
<item quantity="other" msgid="7752927996850263152">"找到 <xliff:g id="COUNT">%d</xliff:g> 位联系人"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"未找到联系人"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"社交"</string>
- <string name="contactsIconLabel" msgid="7666609097606552806">"联系人"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 位联系人"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> 位联系人"</item>
+ </plurals>
+ <string name="contactsIconLabel" msgid="7666609097606552806">"通讯录"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"收藏"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"拨号"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"通话记录"</string>
@@ -184,6 +144,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"从通话记录中删除"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"清除通话记录"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"通话记录为空。"</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"清除通话记录"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"确定要清除通话记录吗?"</string>
<string name="imei" msgid="3045126336951684285">"移动通信国际识别码"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"语音信箱"</string>
@@ -194,46 +156,32 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"拨号以添加通话"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"正从 SIM 卡中载入..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM 卡联系人"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">"同步您的 Google 联系人!"</font>" "\n"将联系人同步到您的手机后,无论您走到哪里,都可以与他们联系。"</string>
- <string name="noContactsHelpText" msgid="6788487368878712350">"您没有任何联系人。"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"Menu"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"帐户"</b></font>"-添加或配置可同步到手机的联系人的帐户"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"-从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
- <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"您还没有联系人。(如果您刚刚添加了一个帐户,则需要几分钟时间同步联系人。)"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"Menu"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Google 帐户"</b></font>"-添加或配置帐户(您可将其联系人同步到手机)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"显示选项"</b></font>"-更改可见的联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"-从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"您还没有联系人。"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"MENU"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"帐户"</b></font>"-添加或配置帐号(您可将其联系人同步到手机)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"-从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
- <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"您还没有联系人。(如果您刚刚添加了一个帐户,则需要几分钟时间同步联系人。)"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"Menu"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"帐户"</b></font>"-添加或配置帐户(您可将其联系人同步到手机)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"显示选项"</b></font>"-更改可见的联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"-从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
- <string name="noFavoritesHelpText" msgid="3744655776704833277">"您未做任何收藏。"\n\n"要收藏加联系人,请执行以下操作:"\n\n<li>"触摸"<b>"联系人"</b>"标签"\n</li>\n<li>"触摸您要加入收藏的联系人"\n</li>\n<li>"触摸联系人姓名旁边的星标"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"选择要同步的群组"</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"没有任何联系人可供显示。(如果您刚刚添加了一个帐户,则系统需要几分钟的时间同步联系人。)"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"没有任何联系人可供显示。"</string>
+ <string name="noContactsHelpText" msgid="6788487368878712350">"您没有可显示的联系人。"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Google 帐户"</b></font>"以添加或配置可同步到手机的联系人的帐户"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"以从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
+ <string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"您没有可显示的联系人。(如果您刚刚添加了一个帐户,则需要几分钟时间同步联系人。)"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Google 帐户"</b></font>"以添加或配置可同步到手机的联系人的帐户"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"显示选项"</b></font>"以更改可见的联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"以从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpText" msgid="6553845386917463292">"您没有可显示的联系人。"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Google 帐户"</b></font>"以添加或配置可同步到手机的联系人的帐户"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"以从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
+ <string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"您没有可显示的联系人。(如果您刚刚添加了一个帐户,则需要几分钟时间同步联系人。)"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Google 帐户"</b></font>"以添加或配置可同步到手机的联系人的帐户"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"显示选项"</b></font>"以更改可见的联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"以从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>\n</li></string>
+ <string name="noFavoritesHelpText" msgid="3744655776704833277">"您未收藏任何联系人。"\n\n"要向您的收藏列表添加联系人,请执行以下操作:"\n\n" "<li>"触摸"<b>"联系人"</b>"标签"\n</li>\n<li>"触摸您要加入收藏的联系人"\n</li>\n<li>"触摸联系人姓名旁边的星标"\n</li></string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"所有联系人"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"已加星标"</string>
+ <string name="liveFolder_favorites_label" msgid="2674341514070517105">"已加星标的内容"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"电话"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"使用按键式键盘"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"返回正在进行的通话"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"添加通话"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"通话详情"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"无法读取所请求呼叫的详细信息。"</string>
- <string name="call_type" msgid="3213526349444862087">"类型"</string>
<string name="type_incoming" msgid="6502076603836088532">"来电"</string>
<string name="type_outgoing" msgid="343108709599392641">"外拨电话"</string>
<string name="type_missed" msgid="2720502601640509542">"未接电话"</string>
- <string name="call_time" msgid="5805575214626630975">"时间"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"通话时间"</string>
- <string name="header_actions" msgid="229583643365836321">"操作"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"铃声:<xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"添加更多信息"</string>
- <string name="actionCall" msgid="695145166039381504">"呼叫<xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"发送电子邮件至<xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"发送信息至<xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"使用<xliff:g id="TYPE">%s</xliff:g>聊天"</string>
- <string name="actionMap" msgid="1977955782051732775">"查看<xliff:g id="TYPE">%s</xliff:g>"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"来电"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"将直接发送到语音信箱"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"设为<xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
<string name="callBack" msgid="5498224409038809224">"回电"</string>
<string name="callAgain" msgid="3197312117049874778">"重拨"</string>
<string name="returnCall" msgid="8171961914203617813">"回拨"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> 分钟 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"经常呼叫的联系人"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> 分 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"常用联系人"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"添加联系人"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"将 <xliff:g id="EMAIL">%s</xliff:g> 添加为联系人?"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"将“<xliff:g id="EMAIL">%s</xliff:g>”添加到联系人?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"全部"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"一"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"二"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"星形符号"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"零"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"英镑符号"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"语音信箱"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"拨打"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"退格"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"要拨打的号码"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"联系人照片"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"删除"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"添加"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"无 SD 卡"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"未检测到 SD 卡"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"正在搜索 vCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"您希望从何处导入联系人?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"从 SIM 卡导入"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"从 SD 卡导入"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"导出到 SD 卡"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"分享可见的联系人"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"导入一个 vCard 文件"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"导入多个 vCard 文件"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"导入所有 vCard 文件"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"由于意外原因而无法解析 vCard"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"虽然 vCard 似乎使用了有效的格式,但系统无法对其进行解析,因为当前的实现方案不支持该格式。"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"未在 SD 卡上找到 vCard 文件"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"未找到与所选内容对应的有效 vCard 条目"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"一个或多个文件导入失败 (%s)。"</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"未知错误"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"选择 vCard 文件"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"请选择要导入的 vCard 文件"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"正在读取 vCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"正在读取 vCard 文件"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"正在导入 vCard 数据"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"读取 vCard 数据失败"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"无法读取 vCard。"\n"失败原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 个,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 个联系人"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 个,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 个文件"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"所有联系人"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"本地存储的联系人"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"导出联系人"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 个联系人(共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 个)"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 个,共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 个文件"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"确认导出"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"确定要将您的联系人列表导出到“<xliff:g id="VCARD_FILENAME">%s</xliff:g>”中吗?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"导出联系人数据失败"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"没有可导出的联系人"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"SD 卡中的 vCard 文件太多"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"所需文件名太长(“<xliff:g id="FILENAME">%s</xliff:g>”)"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"无法打开或创建目标目录“<xliff:g id="DIR_NAME">%s</xliff:g>”"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"正在导出联系人数据"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"正在向“<xliff:g id="FILE_NAME">%s</xliff:g>”导出联系人数据"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"无法初始化导出程序:“<xliff:g id="EXACT_REASON">%s</xliff:g>”"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"导出时出错:“<xliff:g id="EXACT_REASON">%s</xliff:g>”"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"获取数据库信息失败"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"没有可导出的联系人。您可能选择了无法导出的数据。"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"没有可导出的联系人。如果您的手机中确实有联系人,则可能是某个数据提供程序禁止您从手机中导出任何联系人。"</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"vCard 制作程序未正确初始化"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"无法打开“<xliff:g id="FILE_NAME">%s</xliff:g>”:<xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"无法打开“<xliff:g id="FILE_NAME">%1$s</xliff:g>”:<xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 个联系人(共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 个)"</string>
<string name="search_settings_description" msgid="2675223022992445813">"联系人姓名"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"暂停时间延长 2 秒"</string>
<string name="add_wait" msgid="3360818652790319634">"延长等待时间"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"拨打"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"呼叫方式"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"短信发送方式"</string>
<string name="make_primary" msgid="5829291915305113983">"记住此选择"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"所有联系人"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"如果从同步中删除群组“<xliff:g id="GROUP">%s</xliff:g>”,则会同时删除其中所有未分组的联系人。"</string>
<string name="account_phone" msgid="4025734638492419713">"仅保存在手机中(不同步)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"显示名称"</string>
<string name="call_custom" msgid="7756571794763171802">"呼叫<xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"呼叫住宅电话"</string>
<string name="call_mobile" msgid="7502236805487609178">"呼叫手机"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"呼叫其他号码"</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="7777261153532968503">"呼叫其他传真"</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>
@@ -356,20 +301,20 @@
<string name="call_work_pager" msgid="3419348514157949008">"呼叫单位寻呼机"</string>
<string name="call_assistant" msgid="2141641383068514308">"呼叫<xliff:g id="ASSISTANT">%s</xliff:g>"</string>
<string name="call_mms" msgid="6274041545876221437">"呼叫彩信号码"</string>
- <string name="sms_custom" msgid="5932736853732191825">"向<xliff:g id="CUSTOM">%s</xliff:g>发送短信"</string>
+ <string name="sms_custom" msgid="5932736853732191825">"向<xliff:g id="CUSTOM">%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="5131921487474531617">"向其他手机发送短信"</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="3930666870074006114">"向其他传真发送短信"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"向其他邮箱发送电子邮件"</string>
+ <string name="email_other" msgid="3454004077967657109">"发送电子邮件"</string>
<string name="email_custom" msgid="7548003991586214105">"向<xliff:g id="CUSTOM">%s</xliff:g>发送电子邮件"</string>
<string name="email" msgid="5668400997660065897">"电子邮件"</string>
<string name="map_home" msgid="1243547733423343982">"查看住宅地址"</string>
<string name="map_work" msgid="1360474076921878088">"查看单位地址"</string>
- <string name="map_other" msgid="5560707927535653892">"查看其他地址"</string>
+ <string name="map_other" msgid="3817820803587012641">"查看地址"</string>
<string name="map_custom" msgid="6184363799976265281">"查看<xliff:g id="CUSTOM">%s</xliff:g>地址"</string>
<string name="chat_aim" msgid="2588492205291249142">"使用 AIM 聊天"</string>
<string name="chat_msn" msgid="8041633440091073484">"使用 Windows Live 聊天"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"名字拼音"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"中间名拼音"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"姓氏拼音"</string>
- <string name="split_label" msgid="8262112659919449087">"分离"</string>
- <string name="split_explanation" msgid="1824739956426973592">"使数据各归其主。"</string>
- <string name="account_name_format" msgid="4421123930035299208">"来自<xliff:g id="SOURCE">%1$s</xliff:g>帐户:<xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> 联系人"</string>
<string name="from_account_format" msgid="687567483928582084">"来自 <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"使用此照片"</string>
<string name="contact_read_only" msgid="1203216914575723978">"<xliff:g id="SOURCE">%1$s</xliff:g> 联系人信息在此设备上不可编辑。"</string>
<string name="no_contact_details" msgid="6754415338321837001">"无此联系人的其他信息"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"列表排序依据"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"名字"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"姓氏"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"联系人姓名的显示方式"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"名字在前"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"姓氏在前"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"搜索联系人"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"搜索所有联系人"</string>
+ <string name="take_photo" msgid="7496128293167402354">"拍照"</string>
+ <string name="pick_photo" msgid="448886509158039462">"从图库中选择照片"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"正在更新联系人列表,以反映语言的变更。"\n\n"请稍候..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"正在更新联系人列表。"\n\n"请稍候..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"正在升级联系人。"\n\n"升级过程需要约 <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> Mb 的手机内存。"\n\n"请选择以下选项之一:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"卸载一些应用程序"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"重新尝试升级"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"“<xliff:g id="QUERY">%s</xliff:g>”的搜索结果"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"正在搜索..."</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 0000000..c5d3aea
--- /dev/null
+++ b/res/values-zh-rTW/donottranslate_config.xml
@@ -0,0 +1,35 @@
+<?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.
+*/
+-->
+
+<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 601583a..4f0c93e 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!-- 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.
@@ -12,7 +12,8 @@
WITHOUT 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="contactsList" msgid="8661624236494819731">"聯絡人"</string>
@@ -23,7 +24,7 @@
<string name="shortcutActivityTitle" msgid="6642877210643565436">"選擇聯絡人捷徑"</string>
<string name="callShortcutActivityTitle" msgid="6065749861423648991">"選擇去電號碼"</string>
<string name="messageShortcutActivityTitle" msgid="3084542316620335911">"選擇傳訊號碼"</string>
- <string name="starredList" msgid="4817256136413959463">"已標記星號"</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>
@@ -37,7 +38,6 @@
<string name="menu_callNumber" msgid="5142851348489387516">"撥打電話給 <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"新增至我的最愛"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"從我的最愛中移除"</string>
- <string name="menu_showBarcode" msgid="309973637178814132">"顯示條碼"</string>
<string name="menu_editContact" msgid="3452858480713561396">"編輯聯絡人"</string>
<string name="menu_deleteContact" msgid="1916555454274101750">"刪除聯絡人"</string>
<string name="menu_call" msgid="3992595586042260618">"去電聯絡人"</string>
@@ -47,14 +47,10 @@
<string name="menu_makeDefaultNumber" msgid="4838759253316649534">"設為預設號碼"</string>
<string name="menu_makeDefaultEmail" msgid="2599044610375789994">"設為預設電子郵件"</string>
<string name="menu_splitAggregate" msgid="8368636463748691868">"分割"</string>
- <string name="splitAggregate_title" msgid="2053462872948058798">"分割聯絡人"</string>
<string name="contactsSplitMessage" msgid="5253490235863170269">"已分割的聯絡人"</string>
<string name="splitConfirmation_title" msgid="6716467920283502570">"分割聯絡人"</string>
<string name="splitConfirmation" msgid="1150797297503944823">"您確定要將這個聯絡人分割成多組聯絡資訊嗎 (個別分到相關的聯絡資訊分類)?"</string>
<string name="menu_joinAggregate" msgid="5027981918265667970">"合併"</string>
- <string name="menu_showSources" msgid="885215611438295455">"顯示來源"</string>
- <string name="menu_hideSources" msgid="71367585820555477">"隱藏來源"</string>
- <string name="titleJoinAggregate" msgid="6970566008563147202">"合併聯絡人"</string>
<string name="titleJoinContactDataWith" msgid="7684875775798635354">"合併聯絡人"</string>
<string name="blurbJoinContactDataWith" msgid="995870557595050304">"選取要與<xliff:g id="NAME">%s</xliff:g>合併的聯絡人。"</string>
<string name="showAllContactsJoinItem" msgid="2189695051430392383">"顯示所有聯絡人"</string>
@@ -72,23 +68,13 @@
<string name="menu_doNotSave" msgid="2174577548513895144">"取消"</string>
<string name="editContact_title_edit" msgid="7678695190666836093">"編輯聯絡人"</string>
<string name="editContact_title_insert" msgid="9125600232291405757">"新增聯絡人"</string>
- <string name="menu_addItem" msgid="6106836852570790250">"更多資訊"</string>
<string name="label_phonetic_name" msgid="2288082649573927286">"拼音"</string>
<string name="label_notes" msgid="8337354953278341042">"附註"</string>
<string name="label_ringtone" msgid="8833166825330686244">"鈴聲"</string>
- <string name="label_groups" msgid="7304551384542859026">"群組"</string>
- <string name="group_list" msgid="8583361685440161307">"、<xliff:g id="GROUPNAME">%s</xliff:g>"</string>
- <string name="menu_viewGroup" msgid="1401851715586577551">"編輯群組"</string>
<string name="ghostData_name" msgid="6490954238641157585">"姓名"</string>
<string name="ghostData_phonetic_name" msgid="7852749081984070902">"姓名拼音"</string>
<string name="ghostData_company" msgid="5414421120553765775">"公司"</string>
- <string name="ghostData_title" msgid="7662602222400641187">"職位"</string>
- <string name="ghostData_im" msgid="7737174936595812794">"即時訊息帳號"</string>
- <string name="ghostData_notes" msgid="3044201271296187724">"我的附註"</string>
- <string name="ghostData_phone" msgid="6963153888271466620">"電話號碼"</string>
- <string name="ghostData_email" msgid="6184537075551565919">"電子郵件地址"</string>
- <string name="ghostData_postal" msgid="652611650594951897">"郵寄地址"</string>
- <string name="ghostData_group" msgid="4504591380347534114">"顯示群組"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"標題"</string>
<string name="invalidContactMessage" msgid="5816991830260044593">"聯絡人不存在。"</string>
<string name="pickerNewContactHeader" msgid="7750705279843568147">"建立新聯絡人"</string>
<string name="selectLabel" msgid="4255424123394910733">"選取標籤"</string>
@@ -96,32 +82,22 @@
<string name="emailLabelsGroup" msgid="8389931313045344406">"電子郵件"</string>
<string name="imLabelsGroup" msgid="3898238486262614027">"即時訊息"</string>
<string name="postalLabelsGroup" msgid="1618078212734693682">"郵寄地址"</string>
- <string name="otherLabelsGroup" msgid="6584626043193000238">"其他"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"機構"</item>
<item msgid="7196592230748086755">"附註"</item>
</string-array>
- <string name="errorDialogTitle" msgid="475272869218091715">"沒有相片"</string>
<string name="photoPickerNotFoundText" msgid="431331662154342581">"手機上沒有相片 。"</string>
<string name="attachToContact" msgid="8820530304406066714">"聯絡人圖示"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"自訂標籤名稱"</string>
<string name="menu_displayGroup" msgid="5655505437727616553">"顯示選項"</string>
<string name="displayGroups" msgid="2278964020773993336">"顯示選項"</string>
- <string name="syncGroupPreference" msgid="9028361137161162861">"編輯同步處理群組"</string>
- <string name="importFromSim" msgid="8383900146531125319">"匯入聯絡人"</string>
<string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"直接將來電轉到語音信箱"</string>
- <string name="send_to_voicemail_view" msgid="9124400414311776864">"來電已直接轉至語音信箱。"</string>
<string name="default_ringtone" msgid="9099988849649827972">"預設值"</string>
- <string name="addPicture" msgid="1594679312161537678">"新增圖示"</string>
<string name="changePicture" msgid="2943329047610967714">"變更圖示"</string>
<string name="removePicture" msgid="3041230993155966350">"移除圖示"</string>
<string name="noContacts" msgid="8579310973261953559">"沒有聯絡人。"</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"找不到符合的聯絡人。"</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"沒有包含電話號碼的聯絡人資訊。"</string>
- <string name="noFavorites" msgid="812766386743315815">"沒有我的最愛。"</string>
- <string name="select_group_title" msgid="7955698611959835612">"群組"</string>
- <string name="groupEmpty" msgid="6661950109828194595">"您的「<xliff:g id="GROUPNAME">%s</xliff:g>」群組是空的。"</string>
- <string name="showAllGroups" msgid="5164410117611094297">"所有聯絡人"</string>
<string name="showFilterPhones" msgid="4184858075465653970">"僅顯示有電話號碼的聯絡人"</string>
<string name="showFilterPhonesDescrip" msgid="6644443248815191067">"僅顯示有電話號碼的聯絡人"</string>
<string name="headerContactGroups" msgid="2426134991932503843">"選擇要顯示的聯絡人"</string>
@@ -131,29 +107,10 @@
<plurals name="groupDescripPhones">
<item quantity="other" msgid="3816047547470490208">"<xliff:g id="COUNT_0">%1$d</xliff:g> 位聯絡人,<xliff:g id="COUNTWITHPHONES">%2$d</xliff:g> 組電話號碼"</item>
</plurals>
- <string name="syncAllGroups" msgid="7512169081224806890">"同步處理所有聯絡人"</string>
- <string name="groupNameMyContacts" msgid="277995505294105439">"我的聯絡人"</string>
- <string name="groupNameWithPhones" msgid="6981588604041120497">"包含電話號碼的聯絡人資訊"</string>
- <string name="starredInAndroid" msgid="6495527538140213440">"在 Android 中標有星號的聯絡人"</string>
<string name="savingContact" msgid="4075751076741924939">"正在儲存聯絡人..."</string>
<string name="savingDisplayGroups" msgid="2133152192716475939">"正在儲存顯示選項..."</string>
- <string name="contactCreatedToast" msgid="8740102129968688060">"已建立聯絡人。"</string>
<string name="contactSavedToast" msgid="7152589189385441091">"聯絡人已儲存。"</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"發生錯誤,無法儲存聯絡人變更。"</string>
- <string name="listSeparatorCallNumber" msgid="7115321894439629408">"撥打號碼"</string>
- <string name="listSeparatorCallNumber_edit" msgid="2999167270900823334">"電話號碼"</string>
- <string name="listSeparatorSendSmsMms" msgid="5351657038532024412">"傳送簡訊"</string>
- <string name="listSeparatorSendEmail" msgid="5395590830304525721">"傳送電子郵件"</string>
- <string name="listSeparatorSendEmail_edit" msgid="6859593624213634454">"電子郵件地址"</string>
- <string name="listSeparatorSendIm" msgid="2209260633185984105">"傳送即時訊息"</string>
- <string name="listSeparatorSendIm_edit" msgid="3793290685553377986">"即時通訊地址"</string>
- <string name="listSeparatorMapAddress" msgid="7076401301758190804">"在地圖上顯示地址"</string>
- <string name="listSeparatorMapAddress_edit" msgid="298711187672067985">"聯絡地址"</string>
- <string name="listSeparatorOrganizations" msgid="7514083358440762504">"組織"</string>
- <string name="listSeparatorGroups" msgid="1593940073983422450">"群組"</string>
- <string name="listSeparatorOtherInformation" msgid="7844959649638482329">"其他資訊"</string>
- <string name="listSeparatorOtherInformation_edit" msgid="1326921768011367750">"其他選項"</string>
- <string name="listSeparatorMore_edit" msgid="858454837482243176">"更多"</string>
<plurals name="listTotalPhoneContacts">
<item quantity="one" msgid="8721111084815668845">"顯示 1 位附有電話號碼的聯絡人"</item>
<item quantity="other" msgid="6133262880804110289">"顯示 <xliff:g id="COUNT">%d</xliff:g> 位附有電話號碼的聯絡人"</item>
@@ -169,7 +126,10 @@
<item quantity="other" msgid="7752927996850263152">"已找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人"</item>
</plurals>
<string name="listFoundAllContactsZero" msgid="5554368784319460828">"找不到聯絡人"</string>
- <string name="socialStreamIconLabel" msgid="4367712449555075376">"社交"</string>
+ <plurals name="searchFoundContacts">
+ <item quantity="one" msgid="916648718690661777">"1 位聯絡人"</item>
+ <item quantity="other" msgid="5660384247071761844">"<xliff:g id="COUNT">%d</xliff:g> 位聯絡人"</item>
+ </plurals>
<string name="contactsIconLabel" msgid="7666609097606552806">"聯絡人"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"我的最愛"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"電話"</string>
@@ -184,54 +144,42 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"從通話記錄中移除"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"清除通話記錄"</string>
<string name="recentCalls_empty" msgid="247053222448663107">"無通話記錄。"</string>
+ <string name="clearCallLogConfirmation_title" msgid="718072843006222703">"清除通話記錄"</string>
+ <string name="clearCallLogConfirmation" msgid="7625927669136267636">"確定要清除通話記錄嗎?"</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="voicemail" msgid="3851469869202611441">"語音留言"</string>
- <string name="unknown" msgid="740067747858270469">"未知的"</string>
+ <string name="unknown" msgid="740067747858270469">"不明"</string>
<string name="private_num" msgid="6374339738119166953">"私人號碼"</string>
<string name="payphone" msgid="4864313342828942922">"公共電話"</string>
<string name="dialerKeyboardHintText" msgid="5401660096579787344">"使用鍵盤撥號"</string>
<string name="dialerDialpadHintText" msgid="5824490365898349041">"撥號即可新增通話"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"從 SIM 卡讀取中…"</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM 卡聯絡人"</string>
- <string name="contactsSyncPlug" msgid="7248276704957313698"><font fgcolor="#ffffffff">" 同步處理您的 Google 聯絡人!"</font>" "\n" 與手機同步處理後,無論您走到哪,都可存取聯絡人資訊。"</string>
+ <string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"您沒有任何聯絡人可供顯示 (如果您剛剛才新增帳戶,系統需要幾分鐘的時間才能同步聯絡人資訊)。"</string>
+ <string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"您沒有任何聯絡人可供顯示。"</string>
<string name="noContactsHelpText" msgid="6788487368878712350">"您沒有任何聯絡人。"\n\n"如要新增聯絡人,請按下 ["<font fgcolor="#ffffffff">"選單"<b></b></font>"] 並輕觸:"\n" "\n<li>"["<font fgcolor="#ffffffff">"帳戶"<b></b></font>" 來新增或設定您可以同步處理手機資料的聯絡人帳戶"\n</li>" "\n<li>"["<font fgcolor="#ffffffff">"新增聯絡人"<b></b></font>"] 從頭開始建立聯絡人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"匯入/匯出"</b></font>\n</li></string>
<string name="noContactsHelpTextWithSync" msgid="3734101165712848179">"您沒有任何聯絡人 (如果您剛剛才新增帳戶,系統需要幾分鐘的時間才能同步聯絡人資訊)。"\n\n"如要新增聯絡人,請按下 ["<font fgcolor="#ffffffff">"選單"</font><b></b>"] 並輕觸:"\n\n"["<li><font fgcolor="#ffffffff">"帳戶"<b></b></font>"] 來新增或設定您可以同步處理手機資料的聯絡人帳戶"\n</li>" "\n<li>"["<font fgcolor="#ffffffff">"顯示選項"<b></b></font>"] 來變更聯絡人的顯示狀態"\n</li>" "\n<li>"["<font fgcolor="#ffffffff">"新增聯絡人"<b></b></font>"] 從頭開始建立聯絡人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"匯入/匯出"</b></font>\n</li></string>
<string name="noContactsNoSimHelpText" msgid="6553845386917463292">"您沒有任何聯絡人。"\n\n"如要新增聯絡人,請按下 ["<font fgcolor="#ffffffff">"選單"<b></b></font>"] 並輕觸:"\n" "\n<li>"["<font fgcolor="#ffffffff">"帳戶"<b></b></font>" 來新增或設定您可以同步處理手機資料的聯絡人帳戶"\n</li>" "\n<li>"["<font fgcolor="#ffffffff">"新增聯絡人"<b></b></font>"] 從頭開始建立聯絡人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"匯入/匯出"</b></font>\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" msgid="1122296298361373488">"您沒有任何聯絡人 (如果您剛剛才新增帳戶,系統需要幾分鐘的時間才能同步聯絡人資訊)。"\n\n"如要新增聯絡人,請按下 ["<font fgcolor="#ffffffff">"選單"</font><b></b>"] 並輕觸:"\n\n"["<li><font fgcolor="#ffffffff">"帳戶"<b></b></font>"] 來新增或設定您可以同步處理手機資料的聯絡人帳戶"\n</li>" "\n<li>"["<font fgcolor="#ffffffff">"顯示選項"<b></b></font>"] 來變更聯絡人的顯示狀態"\n</li>" "\n<li>"["<font fgcolor="#ffffffff">"新增聯絡人"<b></b></font>"] 從頭開始建立聯絡人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"匯入/匯出"</b></font>\n</li></string>
- <string name="noFavoritesHelpText" msgid="3744655776704833277">"您沒有任何最愛。"\n\n"如要將聯絡人新增至最愛清單:"\n\n" "<li>"輕觸 [聯絡人"<b></b>"] 標籤"\n</li>" "\n<li>"輕觸要新增至最愛的聯絡人"\n</li>" "\n<li>"輕觸聯絡人名稱旁邊的星號圖示"\n</li></string>
- <string name="seclectSyncGroups_title" msgid="1235432026231325655">"選取要同步處理的群組"</string>
+ <string name="noFavoritesHelpText" msgid="3744655776704833277">"您沒有任何最愛。"\n\n"如要將聯絡人新增至最愛清單:"\n\n<li>"輕觸 [聯絡人"<b></b>"] 標籤"\n</li>" "\n<li>"輕觸要新增至最愛的聯絡人"\n</li>" "\n<li>"輕觸聯絡人名稱旁邊的星號圖示"\n</li></string>
<string name="liveFolder_all_label" msgid="5961411940473276616">"所有聯絡人"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"星號標記"</string>
+ <string name="liveFolder_favorites_label" msgid="2674341514070517105">"已加星號"</string>
<string name="liveFolder_phones_label" msgid="1709786878793436245">"電話"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"使用觸控音按鍵"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"返回進行中的通話"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"新增通話"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"通話詳細資料"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"無法解讀通話要求詳細資訊。"</string>
- <string name="call_type" msgid="3213526349444862087">"類型"</string>
<string name="type_incoming" msgid="6502076603836088532">"來電"</string>
<string name="type_outgoing" msgid="343108709599392641">"撥出電話"</string>
<string name="type_missed" msgid="2720502601640509542">"未接來電"</string>
- <string name="call_time" msgid="5805575214626630975">"時間"</string>
- <string name="datetime_relative" msgid="2906207446040994658">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
- <string name="call_duration" msgid="3941950339482985532">"持續時間"</string>
- <string name="header_actions" msgid="229583643365836321">"操作"</string>
- <string name="ringtone_spinner" msgid="7317823545379736528">"鈴聲:<xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
- <string name="add_more_items" msgid="7754115197545456663">"新增更多項目"</string>
- <string name="actionCall" msgid="695145166039381504">"撥打 <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionEmail" msgid="3870371552333656807">"傳送電子郵件至<xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionText" msgid="6399049224844880108">"傳送簡訊至 <xliff:g id="TYPE">%s</xliff:g>"</string>
- <string name="actionChat" msgid="31079429748650300">"透過 <xliff:g id="TYPE">%s</xliff:g> 進行即時通訊"</string>
- <string name="actionMap" msgid="1977955782051732775">"檢視<xliff:g id="TYPE">%s</xliff:g>地址"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"來電"</string>
- <string name="detailIncomingCallsGoToVoicemail" msgid="9163373178772231307">"來電將直接轉到語音信箱"</string>
- <string name="detailsRingtone" msgid="4052108748982701775">"設為<xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
<string name="callBack" msgid="5498224409038809224">"回播電話"</string>
<string name="callAgain" msgid="3197312117049874778">"重撥"</string>
<string name="returnCall" msgid="8171961914203617813">"回電"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
- <string name="favoritesFrquentSeparator" msgid="5007070838253932139">"常用聯絡人"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%1$s</xliff:g> 分 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+ <string name="favoritesFrquentSeparator" msgid="8107518433381283736">"常用聯絡人"</string>
<string name="add_contact_dlg_title" msgid="2896685845822146494">"新增聯絡人"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"要將「<xliff:g id="EMAIL">%s</xliff:g>」新增為聯絡人嗎?"</string>
<string name="all_tab_label" msgid="4003124364397916826">"全部"</string>
@@ -247,13 +195,20 @@
<string name="description_image_button_star" msgid="3365919907520767866">"星號"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"磅"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"語音信箱"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"撥號"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"撥號號碼"</string>
+ <string name="description_contact_photo" msgid="3387458082667894062">"聯絡人相片"</string>
+ <string name="description_minus_button" msgid="387136707700230172">"負號"</string>
+ <string name="description_plus_button" msgid="515164827856229880">"加號"</string>
<string name="no_sdcard_title" msgid="5911758680339949273">"無 SD 卡"</string>
<string name="no_sdcard_message" msgid="6019391476490445358">"未偵測到 SD 卡"</string>
<string name="searching_vcard_title" msgid="4970508055399376813">"正在搜尋 VCard"</string>
- <string name="select_import_type_title" msgid="2443742794103731022">"您要從哪裡匯入聯絡人?"</string>
<string name="import_from_sim" msgid="3859272228033941659">"從 SIM 卡匯入"</string>
<string name="import_from_sdcard" msgid="8550360976693202816">"從 SD 卡匯入"</string>
<string name="export_to_sdcard" msgid="2597105442616166277">"匯出至 SD 卡"</string>
+ <string name="share_visible_contacts" msgid="890150378880783797">"分享正常顯示的聯絡人"</string>
<string name="import_one_vcard_string" msgid="9059163467020328433">"匯入一個 vCard 檔案"</string>
<string name="import_multiple_vcard_string" msgid="3810226492811062392">"匯入多個 vCard 檔案"</string>
<string name="import_all_vcard_string" msgid="5518136113853448474">"匯入所有 vCard 檔案"</string>
@@ -264,22 +219,15 @@
<string name="fail_reason_vcard_parse_error" msgid="1201233722762680214">"因未預期原因,無法剖析 VCard"</string>
<string name="fail_reason_vcard_not_supported_error" msgid="655208100451286027">"VCard 格式正確,但目前的實作系統不支援此格式,因此無法剖析"</string>
<string name="fail_reason_no_vcard_file" msgid="6376516175882881595">"SD 卡上沒有 vCard 檔案"</string>
- <string name="fail_reason_no_vcard_entry" msgid="4733290752474073143">"所選的檔案中沒有有效的 VCard 項目"</string>
<string name="fail_reason_failed_to_read_files" msgid="3659521123567134029">"無法匯入一或多個檔案 (%s)。"</string>
<string name="fail_reason_unknown" msgid="999034019513096768">"未知的錯誤"</string>
<string name="select_vcard_title" msgid="3968948173786172468">"選取 VCard 檔案"</string>
- <string name="select_vcard_message" msgid="221189184212818304">"請選取要匯入的 VCard 檔案"</string>
- <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%s</xliff:g>"\n"<xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="progress_shower_message" msgid="5636525578293752526">"<xliff:g id="ACTION">%1$s</xliff:g>"\n"<xliff:g id="FILENAME">%2$s</xliff:g>"</string>
<string name="reading_vcard_title" msgid="4723433501579653199">"正在讀取 VCard"</string>
<string name="reading_vcard_message" msgid="6381368920030748743">"正在讀取 VCard 檔案"</string>
- <string name="importing_vcard_message" msgid="4046655384673753503">"正在匯入 VCard 資料"</string>
<string name="reading_vcard_failed_title" msgid="4923008144735294994">"無法讀取 VCard 資料"</string>
- <string name="reading_vcard_failed_message" msgid="5684089173948287107">"無法讀取 VCard。"\n"失敗原因:「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
- <string name="reading_vcard_contacts" msgid="3066834102042012868">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 位聯絡人,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 位"</string>
- <string name="reading_vcard_files" msgid="34180143726972661">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 個檔案,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 個"</string>
- <string name="export_all_contacts" msgid="2873892623335194071">"所有聯絡人"</string>
- <string name="export_phone_local_only" msgid="3380497955409896761">"儲存在本機的聯絡人"</string>
- <string name="export_contact_list" msgid="3165097742175874384">"匯出聯絡人"</string>
+ <string name="reading_vcard_contacts" msgid="3066834102042012868">"第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 位聯絡人,共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 位"</string>
+ <string name="reading_vcard_files" msgid="34180143726972661">"第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 個檔案,共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 個"</string>
<string name="confirm_export_title" msgid="7648747763127442983">"確認匯出"</string>
<string name="confirm_export_message" msgid="3875683519257829750">"確定要將聯絡人清單匯出至「<xliff:g id="VCARD_FILENAME">%s</xliff:g>」嗎?"</string>
<string name="exporting_contact_failed_title" msgid="585823094820602526">"無法匯出聯絡人資料"</string>
@@ -287,20 +235,18 @@
<string name="fail_reason_no_exportable_contact" msgid="4919714086648344495">"沒有可匯出的聯絡人"</string>
<string name="fail_reason_too_many_vcard" msgid="7084146295639672658">"SD 卡中的 VCard 檔案過多"</string>
<string name="fail_reason_too_long_filename" msgid="1915716071321839166">"要求的檔案名稱過長 (「<xliff:g id="FILENAME">%s</xliff:g>」)"</string>
- <string name="fail_reason_cannot_open_destination_dir" msgid="1739293936432987758">"無法開啟或建立目標目錄「<xliff:g id="DIR_NAME">%s</xliff:g>」"</string>
<string name="exporting_contact_list_title" msgid="9072240631534457415">"正在匯出聯絡人資料"</string>
<string name="exporting_contact_list_message" msgid="5640326540405486055">"正在將聯絡人資料匯出至「<xliff:g id="FILE_NAME">%s</xliff:g>」"</string>
<string name="fail_reason_could_not_initialize_exporter" msgid="4943708332700987376">"無法初始化匯出程式:「<xliff:g id="EXACT_REASON">%s</xliff:g>」"</string>
<string name="fail_reason_error_occurred_during_export" msgid="2151165129433831202">"匯出時發生錯誤:「<xliff:g id="EXACT_REASON">%s</xliff:g>」"</string>
<string name="composer_failed_to_get_database_infomation" msgid="3723109558155169053">"無法取得資料庫資訊"</string>
- <string name="composer_has_no_exportable_contact" msgid="2239503301380653777">"沒有可匯出的聯絡人,您可能選擇了不可匯出的資料。"</string>
+ <string name="composer_has_no_exportable_contact" msgid="754734132189369094">"沒有可匯出的聯絡人。如果您的手機中確實存有聯絡人資料,這可能是因為某些資料提供者禁止您將所有聯絡人匯出手機。"</string>
<string name="composer_not_initialized" msgid="8041534450748388843">"VCard 編輯器並未正確初始化"</string>
- <string name="fail_reason_could_not_open_file" msgid="4013520943128739511">"無法開啟「<xliff:g id="FILE_NAME">%s</xliff:g>」:<xliff:g id="EXACT_REASON">%s</xliff:g>"</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="fail_reason_could_not_open_file" msgid="4013520943128739511">"無法開啟「<xliff:g id="FILE_NAME">%1$s</xliff:g>」:<xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 位聯絡人,共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 位"</string>
<string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"新增 2 秒暫停功能"</string>
<string name="add_wait" msgid="3360818652790319634">"新增插播功能"</string>
- <string name="dial_button_label" msgid="7637725632722605863">"撥號"</string>
<string name="call_disambig_title" msgid="1911302597959335178">"去電使用"</string>
<string name="sms_disambig_title" msgid="4675399294513152364">"簡訊使用:"</string>
<string name="make_primary" msgid="5829291915305113983">"記住這個選擇"</string>
@@ -334,7 +280,6 @@
<string name="display_all_contacts" msgid="6846131371214707956">"所有聯絡人"</string>
<string name="display_warn_remove_ungrouped" msgid="2314043155909167610">"如果從同步處理群組中移除「<xliff:g id="GROUP">%s</xliff:g>」群組,系統也會從同步處理群組中移除所有未分組的聯絡人。"</string>
<string name="account_phone" msgid="4025734638492419713">"僅儲存於手機 (不會同步處理)"</string>
- <string name="label_email_display_name" msgid="5537802602754309600">"顯示名稱"</string>
<string name="call_custom" msgid="7756571794763171802">"去電<xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="call_home" msgid="1990519474420545392">"去電住家電話"</string>
<string name="call_mobile" msgid="7502236805487609178">"去電行動裝置"</string>
@@ -342,13 +287,13 @@
<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="5605584621798108205">"去電其他電話"</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="7777261153532968503">"去電其他傳真電話"</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>
@@ -363,13 +308,13 @@
<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="5131921487474531617">"傳送簡訊至其他裝置"</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="3930666870074006114">"傳送簡訊至其他傳真電話"</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>
@@ -380,12 +325,12 @@
<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="8093933498541795832">"傳送電子郵件至其他電子郵件地址"</string>
+ <string name="email_other" msgid="3454004077967657109">"傳送電子郵件"</string>
<string name="email_custom" msgid="7548003991586214105">"傳送電子郵件至<xliff:g id="CUSTOM">%s</xliff:g>"</string>
<string name="email" msgid="5668400997660065897">"傳送電子郵件"</string>
<string name="map_home" msgid="1243547733423343982">"檢視住家地址"</string>
<string name="map_work" msgid="1360474076921878088">"檢視公司地址"</string>
- <string name="map_other" msgid="5560707927535653892">"檢視其他地址"</string>
+ <string name="map_other" msgid="3817820803587012641">"檢視地址"</string>
<string name="map_custom" msgid="6184363799976265281">"檢視<xliff:g id="CUSTOM">%s</xliff:g>地址"</string>
<string name="chat_aim" msgid="2588492205291249142">"使用 AIM 進行即時通訊"</string>
<string name="chat_msn" msgid="8041633440091073484">"使用 Windows Live 進行即時通訊"</string>
@@ -411,12 +356,26 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"名字 (拼音)"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"中間名 (拼音)"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"姓氏 (拼音)"</string>
- <string name="split_label" msgid="8262112659919449087">"分割"</string>
- <string name="split_explanation" msgid="1824739956426973592">"使用這項資料新建聯絡人。"</string>
- <string name="account_name_format" msgid="4421123930035299208">"<xliff:g id="SOURCE">%1$s</xliff:g> 帳戶:<xliff:g id="ACCOUNT">%2$s</xliff:g>"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> 聯絡人"</string>
<string name="from_account_format" msgid="687567483928582084">"來自 <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="use_photo_as_primary" msgid="8807110122951157246">"使用此相片"</string>
<string name="contact_read_only" msgid="1203216914575723978">"無法在此裝置編輯 <xliff:g id="SOURCE">%1$s</xliff:g> 的聯絡人資訊"</string>
<string name="no_contact_details" msgid="6754415338321837001">"沒有此聯絡人的其他資訊"</string>
+ <string name="display_options_sort_list_by" msgid="6080091755852211076">"清單排序依據"</string>
+ <string name="display_options_sort_by_given_name" msgid="184916793466387067">"名字"</string>
+ <string name="display_options_sort_by_family_name" msgid="7857986975275712622">"姓氏"</string>
+ <string name="display_options_view_names_as" msgid="18022868169627979">"聯絡人姓名顯示方式"</string>
+ <string name="display_options_view_given_name_first" msgid="6968288511197363292">"名字在前"</string>
+ <string name="display_options_view_family_name_first" msgid="1447288164951453714">"姓氏在前"</string>
+ <string name="search_bar_hint" msgid="1012756309632856553">"搜尋聯絡人"</string>
+ <string name="search_for_all_contacts" msgid="6644963335787294131">"搜尋所有聯絡人"</string>
+ <string name="take_photo" msgid="7496128293167402354">"拍照"</string>
+ <string name="pick_photo" msgid="448886509158039462">"從圖片庫選取相片"</string>
+ <string name="locale_change_in_progress" msgid="1124266507671178413">"正在更新聯絡人清單以反映語言變更。"\n\n"請稍候..."</string>
+ <string name="upgrade_in_progress" msgid="7530893673211750223">"正在更新聯絡人清單。"\n\n"請稍候..."</string>
+ <string name="upgrade_out_of_memory" msgid="492151063059824962">"正在進行聯絡人升級。"\n\n"升級程序需要大約 <xliff:g id="SIZE_IN_MEGABYTES">%d</xliff:g> MB 的手機內部儲存空間。"\n\n"請選擇下列其中一個選項:"</string>
+ <string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"解除安裝一些應用程式"</string>
+ <string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"重試升級"</string>
+ <string name="search_results_for" msgid="8705490885073188513">"此項目之搜尋結果:<xliff:g id="QUERY">%s</xliff:g>"</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"搜尋中..."</string>
</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 661634b..0b263a4 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -13,27 +13,26 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<resources>
<!-- Maps a contact kind or mime-type to a RemoteViews XML formatter -->
<declare-styleable name="Mapping">
<!-- Mime-type handled by this mapping -->
- <attr name="mimeType" format="string" />
+ <attr name="mimeType" format="string"/>
<!-- RemoteViews XML that should be used to format this data -->
- <attr name="remoteViews" format="reference" />
+ <attr name="remoteViews" format="reference"/>
<!-- Icon that should be used to represent this data -->
- <attr name="icon" format="reference" />
+ <attr name="icon" format="reference"/>
<!-- Column in data table to summarize this data -->
- <attr name="summaryColumn" format="string" />
+ <attr name="summaryColumn" format="string"/>
<!-- Column in data table to show details of this data -->
- <attr name="detailColumn" format="string" />
+ <attr name="detailColumn" format="string"/>
</declare-styleable>
<declare-styleable name="EdgeTriggerView">
- <attr name="edgeWidth" format="dimension" />
+ <attr name="edgeWidth" format="dimension"/>
<attr name="listenEdges">
- <flag name="left" value="0x01" />
- <flag name="right" value="0x02" />
+ <flag name="left" value="0x01"/>
+ <flag name="right" value="0x02"/>
</attr>
</declare-styleable>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 69ab865..5f39532 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -22,4 +22,8 @@
<color name="quickcontact_disambig_divider">#afafaf</color>
<color name="edit_divider">#ff666666</color>
+ <color name="background_secondary">#ff202020</color>
+ <color name="pinned_header_background">#ff202020</color>
+
+ <color name="translucent_search_background">#cc000000</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 25189db..4a7a743 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -27,4 +27,16 @@
<dimen name="contact_shortcut_frame_width">50dip</dimen>
<dimen name="contact_shortcut_frame_height">56dip</dimen>
+
+ <!-- Dimensions for a list item -->
+ <dimen name="list_item_padding_top">4dip</dimen>
+ <dimen name="list_item_padding_right">11dip</dimen>
+ <dimen name="list_item_padding_bottom">4dip</dimen>
+ <dimen name="list_item_padding_left">4dip</dimen>
+ <dimen name="list_item_gap_between_image_and_text">8dip</dimen>
+ <dimen name="list_item_gap_between_label_and_data">5dip</dimen>
+ <dimen name="list_item_call_button_padding">14dip</dimen>
+ <dimen name="list_item_vertical_divider_margin">5dip</dimen>
+ <dimen name="list_item_presence_icon_margin">5dip</dimen>
+ <dimen name="list_item_header_text_width">56dip</dimen>
</resources>
diff --git a/res/values/config.xml b/res/values/donottranslate_config.xml
similarity index 81%
rename from res/values/config.xml
rename to res/values/donottranslate_config.xml
index 93d19e9..f1c6951 100644
--- a/res/values/config.xml
+++ b/res/values/donottranslate_config.xml
@@ -34,6 +34,9 @@
<!-- Flag indicating whether Contacts app is allowed to export contacts to SDCard -->
<bool name="config_allow_export_to_sdcard">true</bool>
+ <!-- Flag indicating whether Contacts app is allowed to share contacts with devices outside -->
+ <bool name="config_allow_share_visible_contacts">true</bool>
+
<!-- If true, enable vibration (haptic feedback) for dialer key presses.
The pattern is set on a per-platform basis using config_virtualKeyVibePattern.
TODO: If enough users are annoyed by this, we might eventually
@@ -79,4 +82,18 @@
(which can be overridden on a per-product basis.) -->
<bool name="config_show_onscreen_dial_button">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, the order of name fields in the editor is primary (i.e. given name first) -->
+ <bool name="config_editor_field_order_primary">true</bool>
</resources>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 8fe9d2f..ceb10f8 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -13,46 +13,33 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<resources>
<!-- The EditText for entries in the EditContactActivity -->
- <item type="id" name="data" />
-
- <item type="id" name="header_phones" />
-
- <item type="id" name="dialog_delete" />
- <item type="id" name="dialog_photo" />
- <item type="id" name="dialog_name" />
- <item type="id" name="dialog_label" />
- <item type="id" name="dialog_label_custom" />
-
- <item type="id" name="dialog_sync_add" />
-
- <item type="id" name="dialog_import_export" />
+ <item type="id" name="data"/>
+ <item type="id" name="header_phones"/>
+ <item type="id" name="dialog_sync_add"/>
+ <item type="id" name="dialog_import_export"/>
<!-- For ImportVCardActivity -->
- <item type="id" name="dialog_searching_vcard" />
- <item type="id" name="dialog_sdcard_not_found" />
- <item type="id" name="dialog_vcard_not_found" />
- <item type="id" name="dialog_select_import_type" />
- <item type="id" name="dialog_select_one_vcard" />
- <item type="id" name="dialog_select_multiple_vcard" />
- <item type="id" name="dialog_reading_vcard" />
- <item type="id" name="dialog_io_exception" />
- <item type="id" name="dialog_error_with_message" />
+ <item type="id" name="dialog_searching_vcard"/>
+ <item type="id" name="dialog_sdcard_not_found"/>
+ <item type="id" name="dialog_vcard_not_found"/>
+ <item type="id" name="dialog_select_import_type"/>
+ <item type="id" name="dialog_select_one_vcard"/>
+ <item type="id" name="dialog_select_multiple_vcard"/>
+ <item type="id" name="dialog_reading_vcard"/>
+ <item type="id" name="dialog_io_exception"/>
+ <item type="id" name="dialog_error_with_message"/>
<!-- For ContactsListActivity -->
- <item type="id" name="dialog_delete_contact_confirmation" />
- <item type="id" name="dialog_readonly_contact_hide_confirmation" />
- <item type="id" name="dialog_multiple_contact_delete_confirmation" />
- <item type="id" name="dialog_readonly_contact_delete_confirmation" />
+ <item type="id" name="dialog_delete_contact_confirmation"/>
+ <item type="id" name="dialog_readonly_contact_hide_confirmation"/>
+ <item type="id" name="dialog_multiple_contact_delete_confirmation"/>
+ <item type="id" name="dialog_readonly_contact_delete_confirmation"/>
<!-- For ExportVCard -->
- <item type="id" name="dialog_export_confirmation" />
- <item type="id" name="dialog_exporting_vcard" />
- <item type="id" name="dialog_fail_to_export_with_reason" />
-
- <!-- For RecentCallsListActivity -->
- <item type="id" name="dialog_clear_log" />
+ <item type="id" name="dialog_export_confirmation"/>
+ <item type="id" name="dialog_exporting_vcard"/>
+ <item type="id" name="dialog_fail_to_export_with_reason"/>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7c243d7..31e64c3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13,7 +13,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Title for the activity that shows contacts. This is the name
used in the Launcher icon. -->
@@ -90,9 +89,6 @@
<!-- Menu item used to remove a star from a contact, making the contact no longer show up at the top of favorites -->
<string name="menu_removeStar">Remove from favorites</string>
- <!-- Optional menu item to encode the current contact as a QR Code using Barcode Scanner. -->
- <string name="menu_showBarcode">Show barcode</string>
-
<!-- Menu item used to edit a specific contact -->
<string name="menu_editContact">Edit contact</string>
@@ -122,9 +118,6 @@
<!-- Menu item that splits an item from the contact detail into a separate aggregate -->
<string name="menu_splitAggregate">Separate</string>
- <!-- Dialog title for the list of constituent contacts in the split aggregate dialog. -->
- <string name="splitAggregate_title">Split contact</string>
-
<!-- Toast shown after a contact has been split from an aggregate by a user action -->
<string name="contactsSplitMessage">Contacts separated</string>
@@ -139,13 +132,6 @@
<!-- Menu item that joins an aggregate with another aggregate -->
<string name="menu_joinAggregate">Join</string>
- <!-- Menu item to toggle the tabs that show where the contact data comes from. -->
- <string name="menu_showSources">Show sources</string>
- <string name="menu_hideSources">Hide sources</string>
-
- <!-- Activity title for the Join Contact list -->
- <string name="titleJoinAggregate">Join contact</string>
-
<!-- Heading of the Join Contact screen -->
<string name="titleJoinContactDataWith">Join contacts</string>
@@ -173,9 +159,6 @@
<!-- Confirmation dialog title after users selects to delete a contact. -->
<string name="deleteConfirmation_title">Delete</string>
- <!-- Confirmation dialog title after users selects clear log. -->
- <string name="clearConfirmation_title">Clear call log</string>
-
<!-- Warning dialog contents after users selects to delete a ReadOnly contact. -->
<string name="readOnlyContactWarning">You cannot delete contacts from read-only accounts, but you can hide them in your contacts lists.</string>
@@ -188,9 +171,6 @@
<!-- Confirmation dialog contents after users selects to delete a Writable contact. -->
<string name="deleteConfirmation">This contact will be deleted.</string>
- <!-- Confirmation dialog contents after users selects to clear call log. -->
- <string name="clearLogConfirmation">All call log entries will be removed.</string>
-
<!-- Menu item to indicate you are done editing a contact and want to save the changes you've made -->
<string name="menu_done">Done</string>
@@ -203,9 +183,6 @@
<!-- The title of the activity that creates a new contact -->
<string name="editContact_title_insert">New contact</string>
- <!-- Button that adds more info to a contact, like a new phone number, email address, or postal address -->
- <string name="menu_addItem">More info</string>
-
<!-- The label describing the phonetic pronunciation/reading of a contact name -->
<string name="label_phonetic_name">Phonetic</string>
@@ -215,15 +192,6 @@
<!-- The label describing the custom ringtone for a contact -->
<string name="label_ringtone">Ringtone</string>
- <!-- The label for a list of all the groups that the contact is associated with -->
- <string name="label_groups">Groups</string>
-
- <!-- Provides a delimeter in a list of groups. For example, "g1, g2" has ", g2" generated using this string -->
- <string name="group_list">, <xliff:g id="groupName">%s</xliff:g></string>
-
- <!-- Menu item used to send user to the edit contact screen -->
- <string name="menu_viewGroup">Edit groups</string>
-
<!-- Hint text for the contact name when editing -->
<string name="ghostData_name">First and Last</string>
@@ -233,26 +201,8 @@
<!-- Hint text for the organization name when editing -->
<string name="ghostData_company">Company</string>
- <!-- Hint text for the organization position when editing -->
- <string name="ghostData_title">Position</string>
-
- <!-- Hint text for an IM account when editing -->
- <string name="ghostData_im">IM name</string>
-
- <!-- Hint text for the notes field when editing -->
- <string name="ghostData_notes">My note</string>
-
- <!-- Hint text for the phone number field when editing -->
- <string name="ghostData_phone">Phone number</string>
-
- <!-- Hint text for the email address field when editing -->
- <string name="ghostData_email">Email address</string>
-
- <!-- Hint text for the postal address field when editing -->
- <string name="ghostData_postal">Postal address</string>
-
- <!-- Hint text for the group field when editing -->
- <string name="ghostData_group">Display group</string>
+ <!-- Hint text for the organization title when editing -->
+ <string name="ghostData_title">Title</string>
<!-- Message displayed in a toast when you try to view the details of a contact that
for some reason doesn't exist anymore. -->
@@ -277,9 +227,6 @@
<!-- Header that expands to list all of the types of postal addresses when editing or creating an postal address for a contact -->
<string name="postalLabelsGroup">Postal address</string>
- <!-- Header that expands to list other types of data you can add to a contact, like notes and organizations -->
- <string name="otherLabelsGroup">Other</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. -->
@@ -290,9 +237,6 @@
<item>Note</item>
</string-array>
- <!-- Title of the dialog that appears if there are no pictures from which to create an icon for a contact -->
- <string name="errorDialogTitle">No pictures</string>
-
<!-- Description in the dialog that appears if there are no pictures from which to create an icon for a contact -->
<string name="photoPickerNotFoundText">No pictures are available on the phone.</string>
@@ -309,24 +253,12 @@
<!-- Title of activity that lets user pick which contact groups to display -->
<string name="displayGroups">Display options</string>
- <!-- The menu item that leads to the settings for contact syncing -->
- <string name="syncGroupPreference">Edit sync groups</string>
-
- <!-- The menu item that launches the SIM card import activity -->
- <string name="importFromSim">Import contacts</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>
- <!-- String letting the user know that calls from the contact they're viewing will be sent directly to voicemail -->
- <string name="send_to_voicemail_view">Calls are sent directly to voicemail.</string>
-
<!-- String used to indicate that a contact doesn't have a custom ringtone -->
<string name="default_ringtone">Default</string>
- <!-- The button/menu item that allows you to add a picture to a contact -->
- <string name="addPicture">Add icon</string>
-
<!-- The button/menu item that allows you to change an existing contact picture -->
<string name="changePicture">Change icon</string>
@@ -342,19 +274,6 @@
<!-- The text displayed when the contacts list is empty while displaying only contacts that have phone numbers -->
<string name="noContactsWithPhoneNumbers">No contacts with phone numbers.</string>
- <!-- The text displayed when the contacts list is empty while displaying favorite contacts -->
- <string name="noFavorites">No favorites.</string>
-
- <!-- Title for group selection dialog. The dialog contains a list of contact groups that the
- user can pick from, indicating they only want to see the contacts in that group. -->
- <string name="select_group_title">Groups</string>
-
- <!-- The text displayed when the contacts list is empty while displaying a single group of contacts -->
- <string name="groupEmpty">Your \"<xliff:g id="groupName">%s</xliff:g>\" group is empty.</string>
-
- <!-- The description of all groups when asking the user what they want to display -->
- <string name="showAllGroups">All contacts</string>
-
<!-- The title of the filter to only show contacts with phone numbers -->
<string name="showFilterPhones">Only contacts with phones</string>
@@ -374,75 +293,18 @@
<item quantity="other"><xliff:g id="count">%1$d</xliff:g> contacts, <xliff:g id="countWithPhones">%2$d</xliff:g> with phones</item>
</plurals>
- <!-- The setting to sync all contacts from the server -->
- <string name="syncAllGroups">Sync all contacts</string>
-
- <!-- The name of the system "My Contacts" group. This should be kept in sync with the web UI -->
- <string name="groupNameMyContacts">My contacts</string>
-
- <!-- The group type that displays only contacts with phone numbers -->
- <string name="groupNameWithPhones">Contacts with phone numbers</string>
-
- <!-- The group type that displays "Starred in Android" contacts -->
- <string name="starredInAndroid">Starred in Android</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>
<!-- Displayed in a spinner dialog as user changes to display options are saved -->
<string name="savingDisplayGroups">Saving display options\u2026</string>
- <!-- Toast displayed when a contact is created -->
- <string name="contactCreatedToast">Contact created.</string>
-
<!-- Toast displayed when a contact is saved -->
<string name="contactSavedToast">Contact saved.</string>
<!-- Toast displayed when saving a contact failed -->
<string name="contactSavedErrorToast">Error, unable to save contact changes.</string>
- <!-- Separator in the contact details list describing that the items below it will place a call when clicked -->
- <string name="listSeparatorCallNumber">Dial number</string>
-
- <!-- Section header in the Edit Contacts screen for phone numbers -->
- <string name="listSeparatorCallNumber_edit">Phone numbers</string>
-
- <!-- Separator in the contact details list describing that the items below it will send an SMS/MMS to a phone number -->
- <string name="listSeparatorSendSmsMms">Send text</string>
-
- <!-- Separator in the contact details list describing that the items below it will send an email -->
- <string name="listSeparatorSendEmail">Send email</string>
-
- <!-- Section header in the Edit Contacts screen for E-mail addresses -->
- <string name="listSeparatorSendEmail_edit">Email addresses</string>
-
- <!-- Separator in the contact details list describing that the items below it will send an IM -->
- <string name="listSeparatorSendIm">Send instant message</string>
-
- <!-- Section header in the Edit Contacts screen for Instant messanger accounts -->
- <string name="listSeparatorSendIm_edit">Chat addresses</string>
-
- <!-- Separator in the contact details list describing that the items below it will open maps with the given address -->
- <string name="listSeparatorMapAddress">Map address</string>
-
- <!-- Section header in the Edit Contacts screen for map addresses -->
- <string name="listSeparatorMapAddress_edit">Postal addresses</string>
-
- <!-- Separator in the contact details list describing that the items below are non-actionable organization information -->
- <string name="listSeparatorOrganizations">Organizations</string>
-
- <!-- Separator in the contact details list describing that the items below are non-actionable group information -->
- <string name="listSeparatorGroups">Groups</string>
-
- <!-- Separator in the contact details list describing that the items below are random other non-actionable information about a contact -->
- <string name="listSeparatorOtherInformation">Other information</string>
-
- <!-- Section header in the Edit Contacts screen for other options, such as setting ringtone -->
- <string name="listSeparatorOtherInformation_edit">Other options</string>
-
- <!-- Section header in the Edit Contacts screen for the "Add more items" button -->
- <string name="listSeparatorMore_edit">More</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">Displaying 1 contact with phone number</item>
@@ -470,8 +332,11 @@
<!-- Displayed at the top of the contacts showing the zero total number of contacts found when "Only contacts with phones" not selected -->
<string name="listFoundAllContactsZero">Contact not found</string>
- <!-- The description text for the social activity stream tab. Space is limited for this string, so the shorter the better -->
- <string name="socialStreamIconLabel">Social</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 contact</item>
+ <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts</item>
+ </plurals>
<!-- The description text for the contacts tab. Space is limited for this string, so the shorter the better -->
<string name="contactsIconLabel">Contacts</string>
@@ -509,6 +374,12 @@
<!-- Text displayed when the call log is empty -->
<string name="recentCalls_empty">Call log is empty.</string>
+ <!-- Title of the confirmation dialog for clearing the call log -->
+ <string name="clearCallLogConfirmation_title">Clear call log</string>
+
+ <!-- Confirmation dialog for clearing the call log -->
+ <string name="clearCallLogConfirmation">Are you sure you want to clear the call log?</string>
+
<!-- The title of a dialog that displays the IMEI of the phone -->
<string name="imei">IMEI</string>
@@ -543,10 +414,11 @@
<!-- Dialog title displayed when loading a phone number from the SIM card for speed dial -->
<string name="simContacts_title">SIM card contacts</string>
- <!-- Displayed when a user is prompted to setup a Google account for syncing -->
- <string name="contactsSyncPlug"><font fgcolor="#ffffffff">Sync your Google contacts!</font>
- \nAfter syncing to your phone, your contacts will be available to you wherever you go.</string>
+ <!-- Displayed full screen when the user want to create a shortcut, but there is no contacts, and contact syncing is enabled -->
+ <string name="noContactsHelpTextWithSyncForCreateShortcut">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)"</string>
+ <!-- Displayed full screen when the user want to create a shortcut, but there is no contacts -->
+ <string name="noContactsHelpTextForCreateShortcut">"You don't have any contacts to display."</string>
<!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled -->
<string name="noContactsHelpText">"You don't have any contacts to display.\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
@@ -586,7 +458,7 @@
</string>
<!-- Activity title for the activity that lets the user choose which groups of contacts to sync from the server -->
- <string name="seclectSyncGroups_title">Select groups to sync</string>
+
<!-- Live folder label for all contacts -->
<string name="liveFolder_all_label">All contacts</string>
@@ -618,9 +490,6 @@
<!-- Toast for call detail screen when couldn't read the requested details -->
<string name="toast_call_detail_error">Couldn\'t read details for the requested call.</string>
- <!-- In call detail screen, label for call type -->
- <string name="call_type">Type</string>
-
<!-- Title for incoming call details screen -->
<string name="type_incoming">Incoming call</string>
@@ -630,48 +499,9 @@
<!-- Title for missed call details screen -->
<string name="type_missed">Missed call</string>
- <!-- In call detail screen, label for call date/time -->
- <string name="call_time">Time</string>
-
- <!-- In call detail screen, combine date/time string and relative time to give verbose call date/time -->
- <string name="datetime_relative">"<xliff:g id="datetime" example="Dec 31, 2007, 11:00 am">%1$s</xliff:g> (<xliff:g id="relative" example="4 hours ago">%2$s</xliff:g>)"</string>
-
- <!-- In call detail screen, label for call duration -->
- <string name="call_duration">Duration</string>
-
- <!-- In call detail screen, header title for actions section -->
- <string name="header_actions">Actions</string>
-
- <!-- In edit contact screen, combine the actual ringtone name with prefix for placement in spinner -->
- <string name="ringtone_spinner">"Ringtone: <xliff:g id="ringtone" example="Caribbean Ice">%1$s</xliff:g>"</string>
-
- <!-- In edit contact screen, add more info spinner title -->
- <string name="add_more_items">Add more items</string>
-
- <!-- Action string for calling a phone number. -->
- <string name="actionCall">Call <xliff:g id="type" example="mobile">%s</xliff:g></string>
-
- <!-- Action string for sending an email to an email address. -->
- <string name="actionEmail">Email <xliff:g id="type" example="home">%s</xliff:g></string>
-
- <!-- Action string for sending a text message to a phone number. -->
- <string name="actionText">Text <xliff:g id="type" example="mobile">%s</xliff:g></string>
-
- <!-- Action string for sending an instant message to a chat buddy. -->
- <string name="actionChat">Chat using <xliff:g id="type" example="Google Talk">%s</xliff:g></string>
-
- <!-- Action string for viewing an address on a map. -->
- <string name="actionMap">View <xliff:g id="type" example="home">%s</xliff:g> address</string>
-
<!-- Description for incoming calls going to voice mail vs. not -->
<string name="actionIncomingCall">Incoming calls</string>
- <!-- Detail text for incoming calls going to voice mail -->
- <string name="detailIncomingCallsGoToVoicemail">Will be sent directly to voicemail</string>
-
- <!-- Description of what the contact specific ringtone is set to -->
- <string name="detailsRingtone">Set to <xliff:g id="ringtone_name" example="Flutey Phone">%s</xliff:g></string>
-
<!-- Action string for calling back a number in the call log -->
<string name="callBack">Call back</string>
@@ -682,10 +512,10 @@
<string name="returnCall">Return call</string>
<!-- A nicely formatted call duration displayed when viewing call details. For example "42 mins 28 secs" -->
- <string name="callDetailsDurationFormat"><xliff:g id="minutes" example="42">%s</xliff:g> mins <xliff:g id="seconds" example="28">%s</xliff:g> secs</string>
+ <string name="callDetailsDurationFormat"><xliff:g id="minutes" example="42">%1$s</xliff:g> mins <xliff:g id="seconds" example="28">%2$s</xliff:g> secs</string>
- <!-- A list separator for the Favorites tab indicating that items below it are frequently called contacts rather than starred contacts -->
- <string name="favoritesFrquentSeparator">Frequently called</string>
+ <!-- A list separator for the Favorites tab indicating that items below it are frequently contacted contacts rather than starred contacts -->
+ <string name="favoritesFrquentSeparator">Frequently contacted</string>
<!-- Dialog title when prompting before creating a contact -->
<string name="add_contact_dlg_title">Add contact</string>
@@ -696,8 +526,6 @@
<!-- Label for the all data tab in the view and edit card -->
<string name="all_tab_label">All</string>
- <!-- Content description values -->
-
<!-- String describing the image on ImageButton one
Note: AccessibilityServices use this attribute to announce what the view represents.
@@ -782,6 +610,48 @@
-->
<string name="description_image_button_pound">pound</string>
+ <!-- String describing the Voicemail ImageButton
+
+ Used by AccessibilityService to announce the purpose of the button.
+ -->
+ <string name="description_voicemail_button">voicemail</string>
+
+ <!-- String describing the Dial ImageButton
+
+ Used by AccessibilityService to announce the purpose of the button.
+ -->
+ <string name="description_dial_button">dial</string>
+
+ <!-- String describing the Delete/Backspace ImageButton
+
+ Used by AccessibilityService to announce the purpose of the button.
+ -->
+ <string name="description_delete_button">backspace</string>
+
+ <!-- String describing the digits text box containing the number to dial.
+
+ Used by AccessibilityService to announce the purpose of the view.
+ -->
+ <string name="description_digits_edittext">number to dial</string>
+
+ <!-- String describing the Contact Photo Image
+
+ Used by AccessibilityService to announce the purpose of the view.
+ -->
+ <string name="description_contact_photo">contact photo</string>
+
+ <!-- String describing the Contact Editor Minus button
+
+ Used by AccessibilityService to announce the purpose of the button.
+ -->
+ <string name="description_minus_button">minus</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>
+
<!-- Dialog title shown when SD Card does not exist -->
<string name="no_sdcard_title">No SD card</string>
@@ -791,9 +661,6 @@
<!-- Dialog title shown when searching VCard data from SD Card -->
<string name="searching_vcard_title">Searching for vCard</string>
- <!-- Dialog title shown when asking a user whether import contact data from SIM or SD Card -->
- <string name="select_import_type_title">Where would you like to import contacts from?</string>
-
<!-- Action string for selecting SIM for importing contacts -->
<string name="import_from_sim">Import from SIM card</string>
@@ -803,56 +670,67 @@
<!-- Action that exports all contacts to SD Card -->
<string name="export_to_sdcard">Export to SD card</string>
- <!-- "Import one vCard file" -->
+ <!-- Action that shares visible contacts -->
+ <string name="share_visible_contacts">Share visible contacts</string>
+
+ <!-- One of alternatives shown when the system allows a user to select how many vCard files
+ should be imported. This message shows only when the system is certain that there's more
+ than one vCard files available in the system. -->
<string name="import_one_vcard_string">Import one vCard file</string>
- <!-- "Import more than one vCard -->
+ <!-- One of alternatives shown when the system allows a user to select how many vCard files
+ should be imported. This message shows only when the system is certain that there's more
+ than one vCard files available in the system. -->
<string name="import_multiple_vcard_string">Import multiple vCard files</string>
- <!-- "Import all vCard files" -->
+ <!-- One of alternatives shown when the system allows a user to select how many vCard files
+ should be imported. This message shows only when the system is certain that there's more
+ than one vCard files available in the system. -->
<string name="import_all_vcard_string">Import all vCard files</string>
<!-- Dialog message shown when searching VCard data from SD Card -->
<string name="searching_vcard_message">Searching for vCard data on SD card</string>
- <!-- Dialog title shown when searching VCard data failed. -->
+ <!-- Dialog title shown when scanning VCard data failed. -->
<string name="scanning_sdcard_failed_title">Scanning SD card failed</string>
- <!-- Dialog message shown when searching VCard data failed. -->
+ <!-- Dialog message shown when searching VCard data failed.
+ An exact reason for the failure should -->
<string name="scanning_sdcard_failed_message">Scanning SD card failed (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
- <!-- The failed reason: "I/O Error" -->
+ <!-- The failed reason shown when Contacts app (especially vCard importer/exporter)
+ emitted some I/O error. Exact reason will be appended by the system. -->
<string name="fail_reason_io_error">I/O Error</string>
- <!-- The failed reason: "Failed to parse VCard data" -->
+ <!-- The failed reason shown when vCard parser was not able to be parsed by the current vCard
+ implementation. This might happen even when the input vCard is completely valid, though
+ we believe it is rather rare in the actual world. -->
<string name="fail_reason_vcard_parse_error">Failed to parse vCard for unexpected reason</string>
- <!-- The failed reason: "The VCard is not supported right now, but may be supported in the future" -->
+ <!-- The failed reason shown when the current vCard importer cannot parse the file since the
+ parser is incomplete (actually, there's missing part in the current vCard parser, though
+ our understanding is that the functionality missed by the current vCard parser
+ is rarely needed in the actual vCard...). -->
<string name="fail_reason_vcard_not_supported_error">Failed to parse vCard though it seems in valid format, since the current implementation does not support it</string>
- <!-- The failed reason: "There is no VCard file" -->
+ <!-- The failed reason shown when the system could not find any vCard file
+ (with extension ".vcf" in SDCard.) -->
<string name="fail_reason_no_vcard_file">No vCard file found on the SD card</string>
- <!-- The failed reason: "There is no valid VCard entry in the file(s)" -->
- <string name="fail_reason_no_vcard_entry">No valid vCard entry found for your selection</string>
-
- <!-- The failed reason: "One or more files failed to be imported. (<a list of file names>)" -->
+ <!-- The failed reason shown when the import of some of vCard files failed during multiple vCard
+ files import. It includes the case where all files were failed to be imported. -->
<string name="fail_reason_failed_to_read_files">One or more files failed to be imported (%s).</string>
- <!-- The failed reason: "Unknown error". This message should not be shown
- but it may in some buggy condition. -->
+ <!-- The failed reason which should not be shown but it may in some buggy condition. -->
<string name="fail_reason_unknown">Unknown error</string>
<!-- Dialog title shown when a user is asked to select VCard file -->
<string name="select_vcard_title">Select vCard file</string>
- <!-- Dialog message shown when a user is asked to choose VCard file -->
- <string name="select_vcard_message">Please select a vCard file to import</string>
-
<!-- The message shown while reading a vCard file/entry. The first argument is like
"Reading VCard" or "Reading VCard files" and the second is the display name of the current
data being parsed -->
- <string name="progress_shower_message"><xliff:g id="action" example="Reading VCard">%s</xliff:g>\n<xliff:g id="filename" example="foo.vcf">%s</xliff:g></string>
+ <string name="progress_shower_message"><xliff:g id="action" example="Reading VCard">%1$s</xliff:g>\n<xliff:g id="filename" example="foo.vcf">%2$s</xliff:g></string>
<!-- Dialog title shown when reading VCard data -->
<string name="reading_vcard_title">Reading vCard</string>
@@ -860,29 +738,14 @@
<!-- Dialog message shown when reading a VCard file -->
<string name="reading_vcard_message">Reading vCard file(s)</string>
- <!-- Dialog message shown when importing VCard data into local database -->
- <string name="importing_vcard_message">Importing vCard data</string>
-
<!-- Dialog title shown when reading VCard data failed -->
<string name="reading_vcard_failed_title">Reading of vCard data has failed</string>
- <!-- Dialog message shown when reading VCard data failed -->
- <string name="reading_vcard_failed_message">Could not read vCard.\nReason for failure: \"<xliff:g id="fail_reason">%s</xliff:g>\"</string>
-
<!-- Message while reading one vCard 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="reading_vcard_contacts"><xliff:g id="current_number">%s</xliff:g> of <xliff:g id="total_number">%s</xliff:g> contacts</string>
+ <string name="reading_vcard_contacts"><xliff:g id="current_number">%1$s</xliff:g> of <xliff:g id="total_number">%2$s</xliff:g> contacts</string>
<!-- Message while reading multiple vCard files "(current number) of (total number) files" The order of "current number" and "total number" cannot be changed (like "total: (total number), current: (current number)")-->
- <string name="reading_vcard_files"><xliff:g id="current_number">%s</xliff:g> of <xliff:g id="total_number">%s</xliff:g> files</string>
-
- <!-- The message for exporting all contacts in the phone, without caring its Account -->
- <string name="export_all_contacts">All contacts</string>
-
- <!-- The message for exporting only contacts is the phone locally, which are not associated with any account -->
- <string name="export_phone_local_only">Locally stored contacts</string>
-
- <!-- The menu item that launches VCard export activity -->
- <string name="export_contact_list">Export contacts</string>
+ <string name="reading_vcard_files"><xliff:g id="current_number">%1$s</xliff:g> of <xliff:g id="total_number">%2$s</xliff:g> files</string>
<!-- Dialog title shown when a user confirms whether he/she export Contact data -->
<string name="confirm_export_title">Confirm export</string>
@@ -896,44 +759,54 @@
<!-- Dialog message shown when exporting Contact data failed -->
<string name="exporting_contact_failed_message">Failed to export contact data.\nReason for failure: \"<xliff:g id="fail_reason">%s</xliff:g>\"</string>
- <!-- The failed reason: "There is no exportable contact" -->
+ <!-- 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. -->
<string name="fail_reason_no_exportable_contact">There is no exportable contact</string>
- <!-- The failed reason: "Too many vcard files on the SD Card" -->
+ <!-- The failed reason shown when vCard exporter could not create a file for the vCard since
+ there are too many files relevant to vCard. -->
<string name="fail_reason_too_many_vcard">Too many vCard files on the SD card</string>
- <!-- The failed reason: "Too long filename". This error usually does not happen. -->
+ <!-- The failed reason shown when the given file name is too long for the system.
+ The length limit of each file is different in each Android device, so we don't need to
+ mention it here. -->
<string name="fail_reason_too_long_filename">Required filename is too long (\"<xliff:g id="filename">%s</xliff:g>\")</string>
- <!-- The failed reason: "Cannot open or create the destination directory" -->
- <string name="fail_reason_cannot_open_destination_dir">Cannot open or create the destination directory\"<xliff:g id="dir_name">%s</xliff:g>\"</string>
-
<!-- Dialog title shown when the application is exporting contact data outside -->
<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">Exporting contact data to \"<xliff:g id="file_name">%s</xliff:g>\"</string>
- <!-- The failed reason: "Could not initialize the exporter" -->
+ <!-- The failed reason shown when contacts exporter fails to be initialized.
+ Some exact reason must follow this. -->
<string name="fail_reason_could_not_initialize_exporter">Could not initialize the exporter: \"<xliff:g id="exact_reason">%s</xliff:g>\"</string>
- <!-- The failed reason: "Error occured during export" -->
+ <!-- The failed reason shown when some error happend during contacts export.
+ Some exact reason must follow this. -->
<string name="fail_reason_error_occurred_during_export">Error occured during export: \"<xliff:g id="exact_reason">%s</xliff:g>\"</string>
- <!-- The error reason the vCard composer emits: "Failed to get database information" -->
+ <!-- The error reason the vCard composer "may" emit when database is corrupted or
+ something is going wrong. Usually users should not see this text. -->
<string name="composer_failed_to_get_database_infomation">Failed to get database information</string>
- <!-- The error reason the vCard composer emits: "There is no exportable contact. You might choose un-exportable data" -->
- <string name="composer_has_no_exportable_contact">There is no exportable contact. You might choose un-exportable data</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. -->
+ <string name="composer_has_no_exportable_contact">There is no exportable contact. If you have actualy have contacts on your phone, all the contacts may be prohibited from being exported to outside the phone by some data provider.</string>
- <!-- The error reason the vCard composer emits: "The vCard composer object is not correctly initialized" -->
+ <!-- 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. -->
<string name="composer_not_initialized">The vCard composer is not correctly initialized</string>
- <!-- The failed reason: "Could not open a specific file" -->
- <string name="fail_reason_could_not_open_file">Could not open \"<xliff:g id="file_name">%s</xliff:g>\": <xliff:g id="exact_reason">%s</xliff:g></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. -->
+ <string name="fail_reason_could_not_open_file">Could not open \"<xliff:g id="file_name">%1$s</xliff:g>\": <xliff:g id="exact_reason">%2$s</xliff:g></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>
+ <string name="exporting_contact_list_progress"><xliff:g id="current_number">%1$s</xliff:g> of <xliff:g id="total_number">%2$s</xliff:g> 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>
@@ -942,9 +815,6 @@
<string name="add_2sec_pause">Add 2-sec pause</string>
<string name="add_wait">Add wait</string>
- <!-- Label for onscreen "Dial" button -->
- <string name="dial_button_label">Dial</string>
-
<!-- Title for the call disambiguation dialog -->
<string name="call_disambig_title">Call using</string>
@@ -1036,10 +906,6 @@
and will not be synced. -->
<string name="account_phone">Phone-only (unsynced)</string>
- <!-- The label describing the display name field of an Email address, allowing the
- user to give a specific name to describe this address. -->
- <string name="label_email_display_name">Display name</string>
-
<!-- Action string for calling a custom phone number -->
<string name="call_custom">Call <xliff:g id="custom">%s</xliff:g></string>
<!-- Action string for calling a home phone number -->
@@ -1055,7 +921,7 @@
<!-- 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 other</string>
+ <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 -->
@@ -1067,7 +933,7 @@
<!-- 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 other fax</string>
+ <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 -->
@@ -1098,7 +964,7 @@
<!-- 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 other</string>
+ <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 -->
@@ -1110,7 +976,7 @@
<!-- 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 other fax</string>
+ <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 -->
@@ -1133,7 +999,7 @@
<!-- 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 other</string>
+ <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">%s</xliff:g></string>
@@ -1145,7 +1011,7 @@
<!-- 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 other address</string>
+ <string name="map_other">View address</string>
<!-- Action string for viewing a custom postal address -->
<string name="map_custom">View <xliff:g id="custom">%s</xliff:g> address</string>
@@ -1201,14 +1067,6 @@
<!-- Field title for the phonetic family name of a contact -->
<string name="name_phonetic_family">Phonetic family name</string>
- <!-- The title for the action to remove a contact from an aggregated contact -->
- <string name="split_label">Split</string>
- <!-- The explanation of what "split" will do. This needs word-smithing. -->
- <string name="split_explanation">Make this data its own contact.</string>
-
- <!-- Formatting string for account name -->
- <string name="account_name_format">From <xliff:g id="source" example="Gmail">%1$s</xliff:g> account: <xliff:g id="account" example="user@gmail.com">%2$s</xliff:g></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>
@@ -1223,4 +1081,57 @@
<!-- Text describing that a contact has no information available other than name and photo -->
<string name="no_contact_details">No additional information for this contact</string>
+
+ <!-- Label of the "sort list by" display option -->
+ <string name="display_options_sort_list_by">Sort list by</string>
+
+ <!-- An allowable value for the "sort list by" contact display option -->
+ <string name="display_options_sort_by_given_name">Given name</string>
+
+ <!-- An allowable value for the "sort list by" contact display option -->
+ <string name="display_options_sort_by_family_name">Family name</string>
+
+ <!-- Label of the "view names as" display option -->
+ <string name="display_options_view_names_as">View contact names as</string>
+
+ <!-- An allowable value for the "view names as" contact display option -->
+ <string name="display_options_view_given_name_first">Given name first</string>
+
+ <!-- An allowable value for the "view names as" contact display option -->
+ <string name="display_options_view_family_name_first">Family name first</string>
+
+ <!-- Gray hint displayed in the search field in Contacts when empty -->
+ <string name="search_bar_hint">Search contacts</string>
+
+ <!-- Button displayed underneath the list of filtered visible contacts -->
+ <string name="search_for_all_contacts">Search for all contacts</string>
+
+ <!-- An option in the 'change photo' or 'pick photo' dialog -->
+ <string name="take_photo">Take photo</string>
+
+ <!-- An option in the 'change photo' or 'pick photo' dialog -->
+ <string name="pick_photo">Select photo from Gallery</string>
+
+ <!-- Text shown in the contacts app while the background process updates contacts after a locale change -->
+ <string name="locale_change_in_progress">Contact list is being updated to reflect the change of language.\n\nPlease wait...</string>
+
+ <!-- Text shown in the contacts app while the background process updates contacts after a system upgrade -->
+ <string name="upgrade_in_progress">Contact list is being updated.\n\nPlease wait...</string>
+
+ <!-- Text shown in the contacts app if the background process updating contacts fails because of memory shortage -->
+ <string name="upgrade_out_of_memory">Contacts are in the process of being upgraded.
+ \n\nThe upgrade process requires approximately <xliff:g id="size_in_megabytes">%d</xliff:g>Mb of
+ internal phone storage.\n\nChoose one of the following options:</string>
+
+ <!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage -->
+ <string name="upgrade_out_of_memory_uninstall">Uninstall some applications</string>
+
+ <!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage -->
+ <string name="upgrade_out_of_memory_retry">Retry upgrade</string>
+
+ <!-- Title shown in the search result activity of contacts app -->
+ <string name="search_results_for">Search results for: <xliff:g id="query">%s</xliff:g></string>
+
+ <!-- Title shown in the search result activity of contacts app while searching -->
+ <string name="search_results_searching">Searching...</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8c5ae35..ad4f4f6 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -20,14 +20,20 @@
<item name="android:windowContentOverlay">@null</item>
</style>
+ <style name="ContactsSearchTheme" parent="@android:Theme.Translucent.NoTitleBar">
+ <item name="android:windowAnimationStyle">@style/ContactsSearchAnimation</item>
+ </style>
+
<style name="MinusButton">
<item name="android:background">@drawable/btn_circle</item>
<item name="android:src">@drawable/ic_btn_round_minus</item>
+ <item name="android:contentDescription">@string/description_minus_button</item>
</style>
<style name="PlusButton">
<item name="android:background">@drawable/btn_circle</item>
<item name="android:src">@drawable/ic_btn_round_plus</item>
+ <item name="android:contentDescription">@string/description_plus_button</item>
</style>
<style name="MoreButton">
@@ -35,6 +41,11 @@
<item name="android:src">@drawable/ic_btn_round_more</item>
</style>
+ <style name="LessButton">
+ <item name="android:background">@drawable/btn_circle</item>
+ <item name="android:src">@drawable/ic_btn_round_less</item>
+ </style>
+
<style name="TallTitleBarTheme" parent="android:Theme.NoTitleBar">
<item name="android:windowContentOverlay">@null</item>
</style>
@@ -81,8 +92,12 @@
<item name="android:windowExitAnimation">@anim/quickcontact_below_exit</item>
</style>
+ <style name="ContactsSearchAnimation">
+ <item name="android:windowEnterAnimation">@anim/search_bar_enter</item>
+ <item name="android:windowExitAnimation">@anim/search_bar_exit</item>
+ </style>
+
<style name="DummyAnimation">
<item name="android:windowExitAnimation">@anim/dummy_animation</item>
</style>
-
</resources>
diff --git a/res/xml/searchable.xml b/res/xml/searchable.xml
index af8b3ef..17ef37f 100644
--- a/res/xml/searchable.xml
+++ b/res/xml/searchable.xml
@@ -4,9 +4,9 @@
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -27,7 +27,7 @@
android:includeInGlobalSearch="true"
android:searchSuggestAuthority="com.android.contacts"
android:searchSuggestIntentAction="android.provider.Contacts.SEARCH_SUGGESTION_CLICKED"
- android:searchSuggestIntentData="content://com.android.contacts/contacts"
+ android:searchSuggestIntentData="content://com.android.contacts/contacts/lookup"
android:searchSettingsDescription="@string/search_settings_description"
>
diff --git a/src/com/android/contacts/ButtonGridLayout.java b/src/com/android/contacts/ButtonGridLayout.java
deleted file mode 100644
index 6ce3e71..0000000
--- a/src/com/android/contacts/ButtonGridLayout.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.contacts;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View.MeasureSpec;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * Create a 4x3 grid of dial buttons.
- *
- * It was easier and more efficient to do it this way than use
- * standard layouts. It's perfectly fine (and actually encouraged) to
- * use custom layouts rather than piling up standard layouts.
- *
- * The horizontal and vertical spacings between buttons are controlled
- * by the amount of padding (attributes on the ButtonGridLayout element):
- * - horizontal = left + right padding and
- * - vertical = top + bottom padding.
- *
- * This class assumes that all the buttons have the same size.
- * The buttons will be bottom aligned in their view on layout.
- *
- * Invocation: onMeasure is called first by the framework to know our
- * size. Then onLayout is invoked to layout the buttons.
- */
-// TODO: Blindly layout the buttons w/o checking if we overrun the
-// bottom-right corner.
-public class ButtonGridLayout extends ViewGroup {
- private final int COLUMNS = 3;
- private final int ROWS = 4;
-
- // Width and height of a button
- private int mButtonWidth;
- private int mButtonHeight;
-
- // Width and height of a button + padding.
- private int mWidthInc;
- private int mHeightInc;
-
- // Height of the dialpad. Used to align it at the bottom of the
- // view.
- private int mHeight;
-
- public ButtonGridLayout(Context context) {
- super(context);
- }
-
- public ButtonGridLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public ButtonGridLayout(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- int i = 0;
- // The last row is bottom aligned.
- int y = (b - t) - mHeight + mPaddingTop;
- for (int row = 0; row < ROWS; row++) {
- int x = mPaddingLeft;
- for (int col = 0; col < COLUMNS; col++) {
- View child = getChildAt(i);
-
- child.layout(x, y, x + mButtonWidth, y + mButtonHeight);
-
- x += mWidthInc;
- i++;
- }
- y += mHeightInc;
- }
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- // Measure the first child and get it's size
- View child = getChildAt(0);
- child.measure(MeasureSpec.UNSPECIFIED , MeasureSpec.UNSPECIFIED);
-
- // Make sure the other children are measured as well, to initialize
- for (int i = 1; i < getChildCount(); i++) {
- getChildAt(i).measure(MeasureSpec.UNSPECIFIED , MeasureSpec.UNSPECIFIED);
- }
-
- // Store these to be reused in onLayout.
- mButtonWidth = child.getMeasuredWidth();
- mButtonHeight = child.getMeasuredHeight();
- mWidthInc = mButtonWidth + mPaddingLeft + mPaddingRight;
- mHeightInc = mButtonHeight + mPaddingTop + mPaddingBottom;
- mHeight = ROWS * mHeightInc;
-
- final int width = resolveSize(COLUMNS * mWidthInc, widthMeasureSpec);
- final int height = resolveSize(mHeight, heightMeasureSpec);
-
- setMeasuredDimension(width, height);
- }
-}
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index b2baa2c..14f54c9 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -208,7 +208,8 @@
Contacts.CONTENT_URI, personId);
callText = getString(R.string.recentCalls_callNumber,
phonesCursor.getString(COLUMN_INDEX_NAME));
- mNumber = phonesCursor.getString(COLUMN_INDEX_NUMBER);
+ mNumber = PhoneNumberUtils.formatNumber(
+ phonesCursor.getString(COLUMN_INDEX_NUMBER));
callLabel = Phone.getDisplayLabel(this,
phonesCursor.getInt(COLUMN_INDEX_TYPE),
phonesCursor.getString(COLUMN_INDEX_LABEL)).toString();
@@ -365,4 +366,14 @@
}
}
}
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
}
diff --git a/src/com/android/contacts/ContactEntryAdapter.java b/src/com/android/contacts/ContactEntryAdapter.java
index 9f11165..34ee505 100644
--- a/src/com/android/contacts/ContactEntryAdapter.java
+++ b/src/com/android/contacts/ContactEntryAdapter.java
@@ -66,10 +66,11 @@
* Helper for making subclasses parcelable.
*/
protected void readFromParcel(Parcel p) {
+ final ClassLoader loader = getClass().getClassLoader();
type = p.readInt();
label = p.readString();
data = p.readString();
- uri = p.readParcelable(null);
+ uri = p.readParcelable(loader);
id = p.readLong();
maxLines = p.readInt();
mimetype = p.readString();
diff --git a/src/com/android/contacts/ContactListItemView.java b/src/com/android/contacts/ContactListItemView.java
new file mode 100644
index 0000000..89e4265
--- /dev/null
+++ b/src/com/android/contacts/ContactListItemView.java
@@ -0,0 +1,595 @@
+/*
+ * 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 com.android.contacts.ui.widget.DontPressWithParentImageView;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.Contacts;
+import android.text.TextUtils;
+import android.text.TextUtils.TruncateAt;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+import android.widget.ImageView.ScaleType;
+
+/**
+ * A custom view for an item in the contact list.
+ */
+public class ContactListItemView extends ViewGroup {
+
+ private static final int QUICK_CONTACT_BADGE_STYLE =
+ com.android.internal.R.attr.quickContactBadgeStyleWindowMedium;
+
+ private final Context mContext;
+
+ private final int mPreferredHeight;
+ private final int mVerticalDividerMargin;
+ private final int mPaddingTop;
+ private final int mPaddingRight;
+ private final int mPaddingBottom;
+ private final int mPaddingLeft;
+ private final int mGapBetweenImageAndText;
+ private final int mGapBetweenLabelAndData;
+ private final int mCallButtonPadding;
+ private final int mPresenceIconMargin;
+ private final int mHeaderTextWidth;
+
+ private boolean mHorizontalDividerVisible;
+ private Drawable mHorizontalDividerDrawable;
+ private int mHorizontalDividerHeight;
+
+ private boolean mVerticalDividerVisible;
+ private Drawable mVerticalDividerDrawable;
+ private int mVerticalDividerWidth;
+
+ private boolean mHeaderVisible;
+ private Drawable mHeaderBackgroundDrawable;
+ private int mHeaderBackgroundHeight;
+ private TextView mHeaderTextView;
+
+ private QuickContactBadge mQuickContact;
+ private ImageView mPhotoView;
+ private TextView mNameTextView;
+ private DontPressWithParentImageView mCallButton;
+ private TextView mLabelView;
+ private TextView mDataView;
+ private TextView mSnippetView;
+ private ImageView mPresenceIcon;
+
+ private int mPhotoViewWidth;
+ private int mPhotoViewHeight;
+ private int mLine1Height;
+ private int mLine2Height;
+ private int mLine3Height;
+
+ private OnClickListener mCallButtonClickListener;
+
+ public ContactListItemView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mContext = context;
+
+ // Obtain preferred item height from the current theme
+ TypedArray a = context.obtainStyledAttributes(null, com.android.internal.R.styleable.Theme);
+ mPreferredHeight =
+ a.getDimensionPixelSize(android.R.styleable.Theme_listPreferredItemHeight, 0);
+ a.recycle();
+
+ Resources resources = context.getResources();
+ mVerticalDividerMargin =
+ resources.getDimensionPixelOffset(R.dimen.list_item_vertical_divider_margin);
+ mPaddingTop =
+ resources.getDimensionPixelOffset(R.dimen.list_item_padding_top);
+ mPaddingBottom =
+ resources.getDimensionPixelOffset(R.dimen.list_item_padding_bottom);
+ mPaddingLeft =
+ resources.getDimensionPixelOffset(R.dimen.list_item_padding_left);
+ mPaddingRight =
+ resources.getDimensionPixelOffset(R.dimen.list_item_padding_right);
+ mGapBetweenImageAndText =
+ resources.getDimensionPixelOffset(R.dimen.list_item_gap_between_image_and_text);
+ mGapBetweenLabelAndData =
+ resources.getDimensionPixelOffset(R.dimen.list_item_gap_between_label_and_data);
+ mCallButtonPadding =
+ resources.getDimensionPixelOffset(R.dimen.list_item_call_button_padding);
+ mPresenceIconMargin =
+ resources.getDimensionPixelOffset(R.dimen.list_item_presence_icon_margin);
+ mHeaderTextWidth =
+ resources.getDimensionPixelOffset(R.dimen.list_item_header_text_width);
+ }
+
+ /**
+ * Installs a call button listener.
+ */
+ public void setOnCallButtonClickListener(OnClickListener callButtonClickListener) {
+ mCallButtonClickListener = callButtonClickListener;
+ }
+
+ @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.
+ int width = resolveSize(0, widthMeasureSpec);
+ int height = 0;
+
+ mLine1Height = 0;
+ mLine2Height = 0;
+ mLine3Height = 0;
+
+ // Obtain the natural dimensions of the name text (we only care about height)
+ mNameTextView.measure(0, 0);
+
+ mLine1Height = mNameTextView.getMeasuredHeight();
+
+ if (isVisible(mLabelView)) {
+ mLabelView.measure(0, 0);
+ mLine2Height = mLabelView.getMeasuredHeight();
+ }
+
+ if (isVisible(mDataView)) {
+ mDataView.measure(0, 0);
+ mLine2Height = Math.max(mLine2Height, mDataView.getMeasuredHeight());
+ }
+
+ if (isVisible(mSnippetView)) {
+ mSnippetView.measure(0, 0);
+ mLine3Height = mSnippetView.getMeasuredHeight();
+ }
+
+ height += mLine1Height + mLine2Height + mLine3Height;
+
+ if (isVisible(mCallButton)) {
+ mCallButton.measure(0, 0);
+ }
+ if (isVisible(mPresenceIcon)) {
+ mPresenceIcon.measure(0, 0);
+ }
+
+ ensurePhotoViewSize();
+
+ height = Math.max(height, mPhotoViewHeight);
+ height = Math.max(height, mPreferredHeight);
+
+ if (mHeaderVisible) {
+ ensureHeaderBackground();
+ mHeaderTextView.measure(
+ MeasureSpec.makeMeasureSpec(mHeaderTextWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mHeaderBackgroundHeight, MeasureSpec.EXACTLY));
+ height += mHeaderBackgroundDrawable.getIntrinsicHeight();
+ }
+
+ setMeasuredDimension(width, height);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ int height = bottom - top;
+ int width = right - left;
+
+ // Determine the vertical bounds by laying out the header first.
+ int topBound = 0;
+
+ if (mHeaderVisible) {
+ mHeaderBackgroundDrawable.setBounds(
+ 0,
+ 0,
+ width,
+ mHeaderBackgroundHeight);
+ mHeaderTextView.layout(0, 0, width, mHeaderBackgroundHeight);
+ topBound += mHeaderBackgroundHeight;
+ }
+
+ // Positions of views on the left are fixed and so are those on the right side.
+ // The stretchable part of the layout is in the middle. So, we will start off
+ // by laying out the left and right sides. Then we will allocate the remainder
+ // to the text fields in the middle.
+
+ // Left side
+ int leftBound = mPaddingLeft;
+ View photoView = mQuickContact != null ? mQuickContact : mPhotoView;
+ if (photoView != null) {
+ // Center the photo vertically
+ int photoTop = topBound + (height - topBound - mPhotoViewHeight) / 2;
+ photoView.layout(
+ leftBound,
+ photoTop,
+ leftBound + mPhotoViewWidth,
+ photoTop + mPhotoViewHeight);
+ leftBound += mPhotoViewWidth + mGapBetweenImageAndText;
+ }
+
+ // Right side
+ int rightBound = right;
+ if (isVisible(mCallButton)) {
+ int buttonWidth = mCallButton.getMeasuredWidth();
+ rightBound -= buttonWidth;
+ mCallButton.layout(
+ rightBound,
+ topBound,
+ rightBound + buttonWidth,
+ height);
+ mVerticalDividerVisible = true;
+ ensureVerticalDivider();
+ rightBound -= mVerticalDividerWidth;
+ mVerticalDividerDrawable.setBounds(
+ rightBound,
+ topBound + mVerticalDividerMargin,
+ rightBound + mVerticalDividerWidth,
+ height - mVerticalDividerMargin);
+ } else {
+ mVerticalDividerVisible = false;
+ }
+
+ if (isVisible(mPresenceIcon)) {
+ int iconWidth = mPresenceIcon.getMeasuredWidth();
+ rightBound -= mPresenceIconMargin + iconWidth;
+ mPresenceIcon.layout(
+ rightBound,
+ topBound,
+ rightBound + iconWidth,
+ height);
+ }
+
+ if (mHorizontalDividerVisible) {
+ ensureHorizontalDivider();
+ mHorizontalDividerDrawable.setBounds(
+ 0,
+ height - mHorizontalDividerHeight,
+ width,
+ height);
+ }
+
+ topBound += mPaddingTop;
+ int bottomBound = height - mPaddingBottom;
+
+ // Text lines, centered vertically
+ rightBound -= mPaddingRight;
+
+ // Center text vertically
+ int totalTextHeight = mLine1Height + mLine2Height + mLine3Height;
+ int textTopBound = (bottomBound + topBound - totalTextHeight) / 2;
+
+ mNameTextView.layout(leftBound,
+ textTopBound,
+ rightBound,
+ textTopBound + mLine1Height);
+
+ int dataLeftBound = leftBound;
+ if (isVisible(mLabelView)) {
+ dataLeftBound = leftBound + mLabelView.getMeasuredWidth();
+ mLabelView.layout(leftBound,
+ textTopBound + mLine1Height,
+ dataLeftBound,
+ textTopBound + mLine1Height + mLine2Height);
+ dataLeftBound += mGapBetweenLabelAndData;
+ }
+
+ if (isVisible(mDataView)) {
+ mDataView.layout(dataLeftBound,
+ textTopBound + mLine1Height,
+ rightBound,
+ textTopBound + mLine1Height + mLine2Height);
+ }
+
+ if (isVisible(mSnippetView)) {
+ mSnippetView.layout(leftBound,
+ textTopBound + mLine1Height + mLine2Height,
+ rightBound,
+ textTopBound + mLine1Height + mLine2Height + mLine3Height);
+ }
+ }
+
+ private boolean isVisible(View view) {
+ return view != null && view.getVisibility() == View.VISIBLE;
+ }
+
+ /**
+ * Loads the drawable for the vertical divider if it has not yet been loaded.
+ */
+ private void ensureVerticalDivider() {
+ if (mVerticalDividerDrawable == null) {
+ mVerticalDividerDrawable = mContext.getResources().getDrawable(
+ R.drawable.divider_vertical_dark);
+ mVerticalDividerWidth = mVerticalDividerDrawable.getIntrinsicWidth();
+ }
+ }
+
+ /**
+ * Loads the drawable for the horizontal divider if it has not yet been loaded.
+ */
+ private void ensureHorizontalDivider() {
+ if (mHorizontalDividerDrawable == null) {
+ mHorizontalDividerDrawable = mContext.getResources().getDrawable(
+ com.android.internal.R.drawable.divider_horizontal_dark_opaque);
+ mHorizontalDividerHeight = mHorizontalDividerDrawable.getIntrinsicHeight();
+ }
+ }
+
+ /**
+ * Loads the drawable for the header background if it has not yet been loaded.
+ */
+ private void ensureHeaderBackground() {
+ if (mHeaderBackgroundDrawable == null) {
+ mHeaderBackgroundDrawable = mContext.getResources().getDrawable(
+ android.R.drawable.dark_header);
+ mHeaderBackgroundHeight = mHeaderBackgroundDrawable.getIntrinsicHeight();
+ }
+ }
+
+ /**
+ * Extracts width and height from the style
+ */
+ private void ensurePhotoViewSize() {
+ if (mPhotoViewWidth == 0 && mPhotoViewHeight == 0) {
+ TypedArray a = mContext.obtainStyledAttributes(null,
+ com.android.internal.R.styleable.ViewGroup_Layout,
+ QUICK_CONTACT_BADGE_STYLE, 0);
+ mPhotoViewWidth = a.getLayoutDimension(
+ android.R.styleable.ViewGroup_Layout_layout_width,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ mPhotoViewHeight = a.getLayoutDimension(
+ android.R.styleable.ViewGroup_Layout_layout_height,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ a.recycle();
+ }
+ }
+
+ @Override
+ public void dispatchDraw(Canvas canvas) {
+ if (mHeaderVisible) {
+ mHeaderBackgroundDrawable.draw(canvas);
+ }
+ if (mHorizontalDividerVisible) {
+ mHorizontalDividerDrawable.draw(canvas);
+ }
+ if (mVerticalDividerVisible) {
+ mVerticalDividerDrawable.draw(canvas);
+ }
+ super.dispatchDraw(canvas);
+ }
+
+ /**
+ * Sets the flag that determines whether a divider should drawn at the bottom
+ * of the view.
+ */
+ public void setDividerVisible(boolean visible) {
+ mHorizontalDividerVisible = visible;
+ }
+
+ /**
+ * Sets section header or makes it invisible if the title is null.
+ */
+ public void setSectionHeader(String title) {
+ if (!TextUtils.isEmpty(title)) {
+ if (mHeaderTextView == null) {
+ mHeaderTextView = new TextView(mContext);
+ mHeaderTextView.setTypeface(mHeaderTextView.getTypeface(), Typeface.BOLD);
+ mHeaderTextView.setTextColor(mContext.getResources()
+ .getColor(com.android.internal.R.color.dim_foreground_dark));
+ mHeaderTextView.setTextSize(14);
+ mHeaderTextView.setGravity(Gravity.CENTER);
+ addView(mHeaderTextView);
+ }
+ mHeaderTextView.setText(title);
+ mHeaderTextView.setVisibility(View.VISIBLE);
+ mHeaderVisible = true;
+ } else {
+ if (mHeaderTextView != null) {
+ mHeaderTextView.setVisibility(View.GONE);
+ }
+ mHeaderVisible = false;
+ }
+ }
+
+ /**
+ * Returns the quick contact badge, creating it if necessary.
+ */
+ public QuickContactBadge getQuickContact() {
+ if (mQuickContact == null) {
+ mQuickContact = new QuickContactBadge(mContext, null, QUICK_CONTACT_BADGE_STYLE);
+ mQuickContact.setExcludeMimes(new String[] { Contacts.CONTENT_ITEM_TYPE });
+ addView(mQuickContact);
+ }
+ return mQuickContact;
+ }
+
+ /**
+ * Returns the photo view, creating it if necessary.
+ */
+ public ImageView getPhotoView() {
+ if (mPhotoView == null) {
+ mPhotoView = new ImageView(mContext, null, QUICK_CONTACT_BADGE_STYLE);
+ // Quick contact style used above will set a background - remove it
+ mPhotoView.setBackgroundDrawable(null);
+ addView(mPhotoView);
+ }
+ return mPhotoView;
+ }
+
+ /**
+ * Returns the text view for the contact name, creating it if necessary.
+ */
+ public TextView getNameTextView() {
+ if (mNameTextView == null) {
+ mNameTextView = new TextView(mContext);
+ mNameTextView.setSingleLine(true);
+ mNameTextView.setEllipsize(TruncateAt.MARQUEE);
+ mNameTextView.setTextAppearance(mContext, android.R.style.TextAppearance_Large);
+ mNameTextView.setGravity(Gravity.CENTER_VERTICAL);
+ addView(mNameTextView);
+ }
+ return mNameTextView;
+ }
+
+ /**
+ * Adds a call button using the supplied arguments as an id and tag.
+ */
+ public void showCallButton(int id, int tag) {
+ if (mCallButton == null) {
+ mCallButton = new DontPressWithParentImageView(mContext, null);
+ mCallButton.setId(id);
+ mCallButton.setOnClickListener(mCallButtonClickListener);
+ mCallButton.setBackgroundResource(R.drawable.call_background);
+ mCallButton.setImageResource(android.R.drawable.sym_action_call);
+ mCallButton.setPadding(mCallButtonPadding, 0, mCallButtonPadding, 0);
+ mCallButton.setScaleType(ScaleType.CENTER);
+ addView(mCallButton);
+ }
+
+ mCallButton.setTag(tag);
+ mCallButton.setVisibility(View.VISIBLE);
+ }
+
+ public void hideCallButton() {
+ if (mCallButton != null) {
+ mCallButton.setVisibility(View.GONE);
+ }
+ }
+
+ /**
+ * 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();
+ mLabelView.setText(text);
+ mLabelView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Adds or updates a text view for the data label.
+ */
+ public void setLabel(char[] text, int size) {
+ if (text == null || size == 0) {
+ if (mLabelView != null) {
+ mLabelView.setVisibility(View.GONE);
+ }
+ } else {
+ getLabelView();
+ mLabelView.setText(text, 0, size);
+ mLabelView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Returns the text view for the data label, creating it if necessary.
+ */
+ public TextView getLabelView() {
+ if (mLabelView == null) {
+ mLabelView = new TextView(mContext);
+ mLabelView.setSingleLine(true);
+ mLabelView.setEllipsize(TruncateAt.MARQUEE);
+ mLabelView.setTextAppearance(mContext, android.R.style.TextAppearance_Small);
+ mLabelView.setTypeface(mLabelView.getTypeface(), Typeface.BOLD);
+ 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);
+ }
+ return;
+ } else {
+ getDataView();
+ mDataView.setText(text, 0, size);
+ mDataView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Returns the text view for the data text, creating it if necessary.
+ */
+ public TextView getDataView() {
+ if (mDataView == null) {
+ mDataView = new TextView(mContext);
+ mDataView.setSingleLine(true);
+ mDataView.setEllipsize(TruncateAt.MARQUEE);
+ mDataView.setTextAppearance(mContext, android.R.style.TextAppearance_Small);
+ addView(mDataView);
+ }
+ return mDataView;
+ }
+
+ /**
+ * Adds or updates a text view for the search snippet.
+ */
+ public void setSnippet(CharSequence text) {
+ if (TextUtils.isEmpty(text)) {
+ if (mSnippetView != null) {
+ mSnippetView.setVisibility(View.GONE);
+ }
+ } else {
+ getSnippetView();
+ mSnippetView.setText(text);
+ mSnippetView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Returns the text view for the search snippet, creating it if necessary.
+ */
+ public TextView getSnippetView() {
+ if (mSnippetView == null) {
+ mSnippetView = new TextView(mContext);
+ mSnippetView.setSingleLine(true);
+ mSnippetView.setEllipsize(TruncateAt.MARQUEE);
+ mSnippetView.setTextAppearance(mContext, android.R.style.TextAppearance_Small);
+ mSnippetView.setTypeface(mSnippetView.getTypeface(), Typeface.BOLD);
+ addView(mSnippetView);
+ }
+ return mSnippetView;
+ }
+
+ /**
+ * Adds or updates the presence icon view.
+ */
+ public void setPresence(Drawable icon) {
+ if (icon != null) {
+ if (mPresenceIcon == null) {
+ mPresenceIcon = new ImageView(mContext);
+ addView(mPresenceIcon);
+ }
+ mPresenceIcon.setImageDrawable(icon);
+ mPresenceIcon.setScaleType(ScaleType.CENTER);
+ mPresenceIcon.setVisibility(View.VISIBLE);
+ } else {
+ if (mPresenceIcon != null) {
+ mPresenceIcon.setVisibility(View.GONE);
+ }
+ }
+ }
+}
diff --git a/src/com/android/contacts/ContactOptionsActivity.java b/src/com/android/contacts/ContactOptionsActivity.java
index f93ddf8..2c6142a 100644
--- a/src/com/android/contacts/ContactOptionsActivity.java
+++ b/src/com/android/contacts/ContactOptionsActivity.java
@@ -63,6 +63,7 @@
setContentView(R.layout.contact_options);
View ringtoneLayout = findViewById(R.id.ringtone);
+ ringtoneLayout.setFocusable(true);
ringtoneLayout.setOnClickListener(this);
TextView label = (TextView)findViewById(R.id.label);
label.setText(getString(R.string.label_ringtone));
@@ -197,6 +198,16 @@
values.put(Contacts.SEND_TO_VOICEMAIL, mSendToVoicemail);
getContentResolver().update(mLookupUri, values, null, null);
}
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
}
diff --git a/src/com/android/contacts/ContactPhotoLoader.java b/src/com/android/contacts/ContactPhotoLoader.java
new file mode 100644
index 0000000..96f55a6
--- /dev/null
+++ b/src/com/android/contacts/ContactPhotoLoader.java
@@ -0,0 +1,419 @@
+/*
+ * 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 com.google.android.collect.Lists;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+import android.os.Handler.Callback;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Contacts.Photo;
+import android.widget.ImageView;
+
+import java.lang.ref.SoftReference;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Asynchronously loads contact photos and maintains cache of photos. The class is
+ * mostly single-threaded. The only two methods accessed by the loader thread are
+ * {@link #cacheBitmap} and {@link #obtainPhotoIdsToLoad}. Those methods access concurrent
+ * hash maps shared with the main thread.
+ */
+public class ContactPhotoLoader implements Callback {
+
+ private static final String LOADER_THREAD_NAME = "ContactPhotoLoader";
+
+ /**
+ * 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 final String[] COLUMNS = new String[] { Photo._ID, Photo.PHOTO };
+
+ /**
+ * The resource ID of the image to be used when the photo is unavailable or being
+ * loaded.
+ */
+ private final int mDefaultResourceId;
+
+ /**
+ * Maintains the state of a particular photo.
+ */
+ private static class BitmapHolder {
+ private static final int NEEDED = 0;
+ private static final int LOADING = 1;
+ private static final int LOADED = 2;
+
+ int state;
+ SoftReference<Bitmap> bitmapRef;
+ }
+
+ /**
+ * A soft cache for photos.
+ */
+ private final ConcurrentHashMap<Long, BitmapHolder> mBitmapCache =
+ new ConcurrentHashMap<Long, BitmapHolder>();
+
+ /**
+ * A map from ImageView to the corresponding photo ID. Please note that this
+ * photo ID may change before the photo loading request is started.
+ */
+ private final ConcurrentHashMap<ImageView, Long> mPendingRequests =
+ new ConcurrentHashMap<ImageView, Long>();
+
+ /**
+ * 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;
+
+ private final Context mContext;
+
+ /**
+ * Constructor.
+ *
+ * @param context content context
+ * @param defaultResourceId the image resource ID to be used when there is
+ * no photo for a contact
+ */
+ public ContactPhotoLoader(Context context, int defaultResourceId) {
+ mDefaultResourceId = defaultResourceId;
+ mContext = context;
+ }
+
+ /**
+ * 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 database.
+ */
+ public void loadPhoto(ImageView view, long photoId) {
+ if (photoId == 0) {
+ // No photo is needed
+ view.setImageResource(mDefaultResourceId);
+ mPendingRequests.remove(view);
+ } else {
+ boolean loaded = loadCachedPhoto(view, photoId);
+ if (loaded) {
+ mPendingRequests.remove(view);
+ } else {
+ mPendingRequests.put(view, photoId);
+ if (!mPaused) {
+ // Send a request to start loading photos
+ requestLoading();
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks if the photo is present in cache. If so, sets the photo on the view,
+ * otherwise sets the state of the photo to {@link BitmapHolder#NEEDED} and
+ * temporarily set the image to the default resource ID.
+ */
+ private boolean loadCachedPhoto(ImageView view, long photoId) {
+ BitmapHolder holder = mBitmapCache.get(photoId);
+ if (holder == null) {
+ holder = new BitmapHolder();
+ mBitmapCache.put(photoId, holder);
+ } else if (holder.state == BitmapHolder.LOADED) {
+ // Null bitmap reference means that database contains no bytes for the photo
+ if (holder.bitmapRef == null) {
+ view.setImageResource(mDefaultResourceId);
+ return true;
+ }
+
+ Bitmap bitmap = holder.bitmapRef.get();
+ if (bitmap != null) {
+ view.setImageBitmap(bitmap);
+ return true;
+ }
+
+ // Null bitmap means that the soft reference was released by the GC
+ // and we need to reload the photo.
+ holder.bitmapRef = null;
+ }
+
+ // The bitmap has not been loaded - should display the placeholder image.
+ view.setImageResource(mDefaultResourceId);
+ holder.state = BitmapHolder.NEEDED;
+ return false;
+ }
+
+ /**
+ * Stops loading images, kills the image loader thread and clears all caches.
+ */
+ public void stop() {
+ pause();
+
+ if (mLoaderThread != null) {
+ mLoaderThread.quit();
+ mLoaderThread = null;
+ }
+
+ mPendingRequests.clear();
+ mBitmapCache.clear();
+ }
+
+ public void clear() {
+ mPendingRequests.clear();
+ mBitmapCache.clear();
+ }
+
+ /**
+ * Temporarily stops loading photos from the database.
+ */
+ public void pause() {
+ mPaused = true;
+ }
+
+ /**
+ * Resumes loading photos from the database.
+ */
+ public void resume() {
+ mPaused = false;
+ 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.
+ */
+ public boolean handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_REQUEST_LOADING: {
+ mLoadingRequested = false;
+ if (!mPaused) {
+ if (mLoaderThread == null) {
+ mLoaderThread = new LoaderThread(mContext.getContentResolver());
+ mLoaderThread.start();
+ }
+
+ mLoaderThread.requestLoading();
+ }
+ return true;
+ }
+
+ case MESSAGE_PHOTOS_LOADED: {
+ if (!mPaused) {
+ processLoadedImages();
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 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() {
+ Iterator<ImageView> iterator = mPendingRequests.keySet().iterator();
+ while (iterator.hasNext()) {
+ ImageView view = iterator.next();
+ long photoId = mPendingRequests.get(view);
+ boolean loaded = loadCachedPhoto(view, photoId);
+ if (loaded) {
+ iterator.remove();
+ }
+ }
+
+ if (!mPendingRequests.isEmpty()) {
+ requestLoading();
+ }
+ }
+
+ /**
+ * Stores the supplied bitmap in cache.
+ */
+ private void cacheBitmap(long id, byte[] bytes) {
+ if (mPaused) {
+ return;
+ }
+
+ BitmapHolder holder = new BitmapHolder();
+ holder.state = BitmapHolder.LOADED;
+ if (bytes != null) {
+ try {
+ Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
+ holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
+ } catch (OutOfMemoryError e) {
+ // Do nothing - the photo will appear to be missing
+ }
+ }
+ mBitmapCache.put(id, holder);
+ }
+
+ /**
+ * Populates an array of photo IDs that need to be loaded.
+ */
+ private void obtainPhotoIdsToLoad(ArrayList<Long> photoIds,
+ ArrayList<String> photoIdsAsStrings) {
+ photoIds.clear();
+ photoIdsAsStrings.clear();
+
+ /*
+ * 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<Long> iterator = mPendingRequests.values().iterator();
+ while (iterator.hasNext()) {
+ Long id = iterator.next();
+ BitmapHolder holder = mBitmapCache.get(id);
+ if (holder != null && holder.state == BitmapHolder.NEEDED) {
+ // Assuming atomic behavior
+ holder.state = BitmapHolder.LOADING;
+ photoIds.add(id);
+ photoIdsAsStrings.add(id.toString());
+ }
+ }
+ }
+
+ /**
+ * The thread that performs loading of photos from the database.
+ */
+ private class LoaderThread extends HandlerThread implements Callback {
+ private final ContentResolver mResolver;
+ private final StringBuilder mStringBuilder = new StringBuilder();
+ private final ArrayList<Long> mPhotoIds = Lists.newArrayList();
+ private final ArrayList<String> mPhotoIdsAsStrings = Lists.newArrayList();
+ private Handler mLoaderThreadHandler;
+
+ public LoaderThread(ContentResolver resolver) {
+ super(LOADER_THREAD_NAME);
+ mResolver = resolver;
+ }
+
+ /**
+ * Sends a message to this thread to load requested photos.
+ */
+ public void requestLoading() {
+ if (mLoaderThreadHandler == null) {
+ mLoaderThreadHandler = new Handler(getLooper(), this);
+ }
+ mLoaderThreadHandler.sendEmptyMessage(0);
+ }
+
+ /**
+ * Receives the above message, loads photos and then sends a message
+ * to the main thread to process them.
+ */
+ public boolean handleMessage(Message msg) {
+ loadPhotosFromDatabase();
+ mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+ return true;
+ }
+
+ private void loadPhotosFromDatabase() {
+ obtainPhotoIdsToLoad(mPhotoIds, mPhotoIdsAsStrings);
+
+ int count = mPhotoIds.size();
+ if (count == 0) {
+ return;
+ }
+
+ mStringBuilder.setLength(0);
+ mStringBuilder.append(Photo._ID + " IN(");
+ for (int i = 0; i < count; i++) {
+ if (i != 0) {
+ mStringBuilder.append(',');
+ }
+ mStringBuilder.append('?');
+ }
+ mStringBuilder.append(')');
+
+ Cursor cursor = null;
+ try {
+ 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);
+ cacheBitmap(id, bytes);
+ mPhotoIds.remove(id);
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ // Remaining photos were not found in the database - mark the cache accordingly.
+ count = mPhotoIds.size();
+ for (int i = 0; i < count; i++) {
+ cacheBitmap(mPhotoIds.get(i), null);
+ }
+ }
+ }
+}
diff --git a/src/com/android/contacts/ContactPresenceIconUtil.java b/src/com/android/contacts/ContactPresenceIconUtil.java
new file mode 100644
index 0000000..1a2d58e
--- /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/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 24c7100..0d2c7eb 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -16,14 +16,17 @@
package com.android.contacts;
+import com.android.contacts.TextHighlightingAnimation.TextWithHighlighting;
import com.android.contacts.model.ContactsSource;
import com.android.contacts.model.Sources;
-import com.android.contacts.ui.DisplayGroupsActivity;
-import com.android.contacts.ui.DisplayGroupsActivity.Prefs;
+import com.android.contacts.ui.ContactsPreferences;
+import com.android.contacts.ui.ContactsPreferencesActivity;
+import com.android.contacts.ui.ContactsPreferencesActivity.Prefs;
import com.android.contacts.util.AccountSelectionUtil;
import com.android.contacts.util.Constants;
import android.accounts.Account;
+import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -35,16 +38,20 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.IContentService;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.UriMatcher;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.database.CharArrayBuffer;
+import android.database.ContentObserver;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
@@ -54,8 +61,8 @@
import android.net.Uri.Builder;
import android.os.Bundle;
import android.os.Handler;
-import android.os.Message;
import android.os.Parcelable;
+import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.provider.ContactsContract;
import android.provider.Settings;
@@ -63,12 +70,16 @@
import android.provider.Contacts.People;
import android.provider.Contacts.PeopleColumns;
import android.provider.Contacts.Phones;
+import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.Presence;
+import android.provider.ContactsContract.ProviderStatus;
import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.SearchSnippetColumns;
import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
@@ -76,68 +87,68 @@
import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.Intents.UI;
import android.telephony.TelephonyManager;
+import android.text.Editable;
+import android.text.Html;
import android.text.TextUtils;
-import android.util.DisplayMetrics;
+import android.text.TextWatcher;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextThemeWrapper;
-import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
+import android.view.View.OnClickListener;
+import android.view.View.OnFocusChangeListener;
+import android.view.View.OnTouchListener;
+import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.AdapterView;
-import android.widget.AlphabetIndexer;
import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.CursorAdapter;
import android.widget.Filter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.QuickContactBadge;
-import android.widget.ResourceCursorAdapter;
import android.widget.SectionIndexer;
import android.widget.TextView;
+import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
-import android.*;
-import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
-import java.util.Locale;
import java.util.Random;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-/*TODO(emillar) I commented most of the code that deals with modes and filtering. It should be
- * brought back in as we add back that functionality.
- */
-
/**
* Displays a list of contacts. Usually is embedded into the ContactsActivity.
*/
@SuppressWarnings("deprecation")
-public class ContactsListActivity extends ListActivity implements
- View.OnCreateContextMenuListener, View.OnClickListener {
+public class ContactsListActivity extends ListActivity implements View.OnCreateContextMenuListener,
+ View.OnClickListener, View.OnKeyListener, TextWatcher, TextView.OnEditorActionListener,
+ OnFocusChangeListener, OnTouchListener {
public static class JoinContactActivity extends ContactsListActivity {
}
+ public static class ContactsSearchActivity extends ContactsListActivity {
+
+ }
+
private static final String TAG = "ContactsListActivity";
private static final boolean ENABLE_ACTION_ICON_OVERLAYS = true;
private static final String LIST_STATE_KEY = "liststate";
- private static final String FOCUS_KEY = "focused";
+ private static final String SHORTCUT_ACTION_KEY = "shortcutAction";
static final int MENU_ITEM_VIEW_CONTACT = 1;
static final int MENU_ITEM_CALL = 2;
@@ -151,6 +162,10 @@
private static final int SUBACTIVITY_NEW_CONTACT = 1;
private static final int SUBACTIVITY_VIEW_CONTACT = 2;
private static final int SUBACTIVITY_DISPLAY_GROUP = 3;
+ private static final int SUBACTIVITY_SEARCH = 4;
+ private static final int SUBACTIVITY_FILTER = 5;
+
+ private static final int TEXT_HIGHLIGHTING_ANIMATION_DURATION = 350;
/**
* The action for the join contact activity.
@@ -181,6 +196,9 @@
public static final String AUTHORITIES_FILTER_KEY = "authorities";
+ private static final Uri CONTACTS_CONTENT_URI_WITH_LETTER_COUNTS =
+ buildSectionIndexerUri(Contacts.CONTENT_URI);
+
/** Mask for picker mode */
static final int MODE_MASK_PICKER = 0x80000000;
/** Mask for no presence mode */
@@ -219,13 +237,14 @@
static final int MODE_PICK_OR_CREATE_CONTACT = 42 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW
| MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_QUIKCCONTACT;
/** Show all people through the legacy provider and pick them when clicking */
- static final int MODE_LEGACY_PICK_PERSON = 43 | MODE_MASK_PICKER | MODE_MASK_SHOW_PHOTOS
+ static final int MODE_LEGACY_PICK_PERSON = 43 | MODE_MASK_PICKER
| MODE_MASK_DISABLE_QUIKCCONTACT;
/** Show all people through the legacy provider as well as the option to create a new one */
static final int MODE_LEGACY_PICK_OR_CREATE_PERSON = 44 | MODE_MASK_PICKER
- | MODE_MASK_CREATE_NEW | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_QUIKCCONTACT;
+ | MODE_MASK_CREATE_NEW | MODE_MASK_DISABLE_QUIKCCONTACT;
/** Show all contacts and pick them when clicking, and allow creating a new contact */
- static final int MODE_INSERT_OR_EDIT_CONTACT = 45 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW;
+ static final int MODE_INSERT_OR_EDIT_CONTACT = 45 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW
+ | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_QUIKCCONTACT;
/** Show all phone numbers and pick them when clicking */
static final int MODE_PICK_PHONE = 50 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE;
/** Show all phone numbers through the legacy provider and pick them when clicking */
@@ -239,55 +258,104 @@
56 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE | MODE_MASK_NO_FILTER;
static final int MODE_GROUP = 57 | MODE_MASK_SHOW_PHOTOS;
/** Run a search query */
- static final int MODE_QUERY = 60 | MODE_MASK_NO_FILTER | MODE_MASK_SHOW_NUMBER_OF_CONTACTS;
+ static final int MODE_QUERY = 60 | MODE_MASK_SHOW_PHOTOS | MODE_MASK_NO_FILTER
+ | MODE_MASK_SHOW_NUMBER_OF_CONTACTS;
/** Run a search query in PICK mode, but that still launches to VIEW */
- static final int MODE_QUERY_PICK_TO_VIEW = 65 | MODE_MASK_NO_FILTER | MODE_MASK_PICKER;
+ static final int MODE_QUERY_PICK_TO_VIEW = 65 | MODE_MASK_SHOW_PHOTOS | MODE_MASK_PICKER
+ | MODE_MASK_SHOW_NUMBER_OF_CONTACTS;
/** Show join suggestions followed by an A-Z list */
static final int MODE_JOIN_CONTACT = 70 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE
| MODE_MASK_NO_DATA | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_QUIKCCONTACT;
+ /** Run a search query in a PICK mode */
+ static final int MODE_QUERY_PICK = 75 | MODE_MASK_SHOW_PHOTOS | MODE_MASK_NO_FILTER
+ | MODE_MASK_PICKER | MODE_MASK_DISABLE_QUIKCCONTACT | MODE_MASK_SHOW_NUMBER_OF_CONTACTS;
+
+ /** Run a search query in a PICK_PHONE mode */
+ static final int MODE_QUERY_PICK_PHONE = 80 | MODE_MASK_NO_FILTER | MODE_MASK_PICKER
+ | MODE_MASK_SHOW_NUMBER_OF_CONTACTS;
+
+ /** Run a search query in PICK mode, but that still launches to EDIT */
+ static final int MODE_QUERY_PICK_TO_EDIT = 85 | MODE_MASK_NO_FILTER | MODE_MASK_SHOW_PHOTOS
+ | MODE_MASK_PICKER | MODE_MASK_SHOW_NUMBER_OF_CONTACTS;
+
+ /**
+ * An action used to do perform search while in a contact picker. It is initiated
+ * by the ContactListActivity itself.
+ */
+ private static final String ACTION_SEARCH_INTERNAL = "com.android.contacts.INTERNAL_SEARCH";
+
/** Maximum number of suggestions shown for joining aggregates */
static final int MAX_SUGGESTIONS = 4;
- static final String NAME_COLUMN = Contacts.DISPLAY_NAME;
- //static final String SORT_STRING = People.SORT_STRING;
-
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
- Contacts._ID, // 0
- Contacts.DISPLAY_NAME, // 1
- Contacts.STARRED, //2
- Contacts.TIMES_CONTACTED, //3
- Contacts.CONTACT_PRESENCE, //4
- Contacts.PHOTO_ID, //5
- Contacts.LOOKUP_KEY, //6
- Contacts.HAS_PHONE_NUMBER, //7
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // 2
+ Contacts.SORT_KEY_PRIMARY, // 3
+ Contacts.STARRED, // 4
+ Contacts.TIMES_CONTACTED, // 5
+ Contacts.CONTACT_PRESENCE, // 6
+ Contacts.PHOTO_ID, // 7
+ Contacts.LOOKUP_KEY, // 8
+ Contacts.PHONETIC_NAME, // 9
+ Contacts.HAS_PHONE_NUMBER, // 10
};
static final String[] CONTACTS_SUMMARY_PROJECTION_FROM_EMAIL = new String[] {
- Contacts._ID, // 0
- Contacts.DISPLAY_NAME, // 1
- Contacts.STARRED, //2
- Contacts.TIMES_CONTACTED, //3
- Contacts.CONTACT_PRESENCE, //4
- Contacts.PHOTO_ID, //5
- Contacts.LOOKUP_KEY, //6
- // email lookup doesn't included HAS_PHONE_NUMBER OR LOOKUP_KEY in projection
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // 2
+ Contacts.SORT_KEY_PRIMARY, // 3
+ Contacts.STARRED, // 4
+ Contacts.TIMES_CONTACTED, // 5
+ Contacts.CONTACT_PRESENCE, // 6
+ Contacts.PHOTO_ID, // 7
+ Contacts.LOOKUP_KEY, // 8
+ Contacts.PHONETIC_NAME, // 9
+ // email lookup doesn't included HAS_PHONE_NUMBER in projection
};
+
+ static final String[] CONTACTS_SUMMARY_FILTER_PROJECTION = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // 2
+ Contacts.SORT_KEY_PRIMARY, // 3
+ Contacts.STARRED, // 4
+ Contacts.TIMES_CONTACTED, // 5
+ Contacts.CONTACT_PRESENCE, // 6
+ Contacts.PHOTO_ID, // 7
+ Contacts.LOOKUP_KEY, // 8
+ Contacts.PHONETIC_NAME, // 9
+ Contacts.HAS_PHONE_NUMBER, // 10
+ SearchSnippetColumns.SNIPPET_MIMETYPE, // 11
+ SearchSnippetColumns.SNIPPET_DATA1, // 12
+ SearchSnippetColumns.SNIPPET_DATA4, // 13
+ };
+
static final String[] LEGACY_PEOPLE_PROJECTION = new String[] {
- People._ID, // 0
- People.DISPLAY_NAME, // 1
- People.STARRED, //2
- PeopleColumns.TIMES_CONTACTED, //3
- People.PRESENCE_STATUS, //4
+ People._ID, // 0
+ People.DISPLAY_NAME, // 1
+ People.DISPLAY_NAME, // 2
+ People.DISPLAY_NAME, // 3
+ People.STARRED, // 4
+ PeopleColumns.TIMES_CONTACTED, // 5
+ People.PRESENCE_STATUS, // 6
};
static final int SUMMARY_ID_COLUMN_INDEX = 0;
- static final int SUMMARY_NAME_COLUMN_INDEX = 1;
- static final int SUMMARY_STARRED_COLUMN_INDEX = 2;
- static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;
- static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;
- static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;
- static final int SUMMARY_LOOKUP_KEY = 6;
- static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7;
+ static final int SUMMARY_DISPLAY_NAME_PRIMARY_COLUMN_INDEX = 1;
+ static final int SUMMARY_DISPLAY_NAME_ALTERNATIVE_COLUMN_INDEX = 2;
+ static final int SUMMARY_SORT_KEY_PRIMARY_COLUMN_INDEX = 3;
+ static final int SUMMARY_STARRED_COLUMN_INDEX = 4;
+ static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 5;
+ static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 6;
+ static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 7;
+ static final int SUMMARY_LOOKUP_KEY_COLUMN_INDEX = 8;
+ static final int SUMMARY_PHONETIC_NAME_COLUMN_INDEX = 9;
+ static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 10;
+ static final int SUMMARY_SNIPPET_MIMETYPE_COLUMN_INDEX = 11;
+ static final int SUMMARY_SNIPPET_DATA1_COLUMN_INDEX = 12;
+ static final int SUMMARY_SNIPPET_DATA4_COLUMN_INDEX = 13;
static final String[] PHONES_PROJECTION = new String[] {
Phone._ID, //0
@@ -348,7 +416,7 @@
private QueryHandler mQueryHandler;
private boolean mJustCreated;
private boolean mSyncEnabled;
- private Uri mSelectedContactUri;
+ Uri mSelectedContactUri;
// private boolean mDisplayAll;
private boolean mDisplayOnlyPhones;
@@ -365,12 +433,9 @@
* Used to keep track of the scroll state of the list.
*/
private Parcelable mListState = null;
- private boolean mListHasFocus;
private String mShortcutAction;
- private int mScrollState;
-
/**
* Internal query type when in mode {@link #MODE_QUERY_PICK_TO_VIEW}.
*/
@@ -380,11 +445,16 @@
private static final int QUERY_MODE_MAILTO = 1;
private static final int QUERY_MODE_TEL = 2;
- /**
- * Data to use when in mode {@link #MODE_QUERY_PICK_TO_VIEW}. Usually
- * provided by scheme-specific part of incoming {@link Intent#getData()}.
- */
- private String mQueryData;
+ private int mProviderStatus = ProviderStatus.STATUS_NORMAL;
+
+ private boolean mSearchMode;
+ private boolean mSearchResultsMode;
+ private boolean mShowNumberOfContacts;
+
+ private boolean mShowSearchSnippets;
+ private boolean mSearchInitiated;
+
+ private String mInitialFilter;
private static final String CLAUSE_ONLY_VISIBLE = Contacts.IN_VISIBLE_GROUP + "=1";
private static final String CLAUSE_ONLY_PHONES = Contacts.HAS_PHONE_NUMBER + "=1";
@@ -404,7 +474,11 @@
private static final int CONTACTS_ID = 1001;
private static final UriMatcher sContactsIdMatcher;
- private static ExecutorService sImageFetchThreadPool;
+ private ContactPhotoLoader mPhotoLoader;
+
+ final String[] sLookupProjection = new String[] {
+ Contacts.LOOKUP_KEY
+ };
static {
sContactsIdMatcher = new UriMatcher(UriMatcher.NO_MATCH);
@@ -413,14 +487,84 @@
private class DeleteClickListener implements DialogInterface.OnClickListener {
public void onClick(DialogInterface dialog, int which) {
- getContentResolver().delete(mSelectedContactUri, null, null);
+ if (mSelectedContactUri != null) {
+ getContentResolver().delete(mSelectedContactUri, null, null);
+ }
}
}
+ /**
+ * A {@link TextHighlightingAnimation} that redraws just the contact display name in a
+ * list item.
+ */
+ private static class NameHighlightingAnimation extends TextHighlightingAnimation {
+ private final ListView mListView;
+
+ private NameHighlightingAnimation(ListView listView, int duration) {
+ super(duration);
+ this.mListView = listView;
+ }
+
+ /**
+ * Redraws all visible items of the list corresponding to contacts
+ */
+ @Override
+ protected void invalidate() {
+ int childCount = mListView.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View itemView = mListView.getChildAt(i);
+ if (itemView instanceof ContactListItemView) {
+ final ContactListItemView view = (ContactListItemView)itemView;
+ view.getNameTextView().invalidate();
+ }
+ }
+ }
+
+ @Override
+ protected void onAnimationStarted() {
+ mListView.setScrollingCacheEnabled(false);
+ }
+
+ @Override
+ protected void onAnimationEnded() {
+ mListView.setScrollingCacheEnabled(true);
+ }
+ }
+
+ // The size of a home screen shortcut icon.
+ private int mIconSize;
+ private ContactsPreferences mContactsPrefs;
+ private int mDisplayOrder;
+ private int mSortOrder;
+ private boolean mHighlightWhenScrolling;
+ private TextHighlightingAnimation mHighlightingAnimation;
+ private SearchEditText mSearchEditText;
+
+ /**
+ * An approximation of the background color of the pinned header. This color
+ * is used when the pinned header is being pushed up. At that point the header
+ * "fades away". Rather than computing a faded bitmap based on the 9-patch
+ * normally used for the background, we will use a solid color, which will
+ * provide better performance and reduced complexity.
+ */
+ private int mPinnedHeaderBackgroundColor;
+
+ private ContentObserver mProviderStatusObserver = new ContentObserver(new Handler()) {
+
+ @Override
+ public void onChange(boolean selfChange) {
+ checkProviderState(true);
+ }
+ };
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ mIconSize = getResources().getDimensionPixelSize(android.R.dimen.app_icon_size);
+ mContactsPrefs = new ContactsPreferences(this);
+ mPhotoLoader = new ContactPhotoLoader(this, R.drawable.ic_contact_list_picture);
+
// Resolve the intent
final Intent intent = getIntent();
@@ -430,11 +574,36 @@
setTitle(title);
}
- final String action = intent.getAction();
- mMode = MODE_UNKNOWN;
+ String action = intent.getAction();
+ String component = intent.getComponent().getClassName();
+
+ // When we get a FILTER_CONTACTS_ACTION, it represents search in the context
+ // of some other action. Let's retrieve the original action to provide proper
+ // context for the search queries.
+ if (UI.FILTER_CONTACTS_ACTION.equals(action)) {
+ mSearchMode = true;
+ mShowSearchSnippets = true;
+ Bundle extras = intent.getExtras();
+ if (extras != null) {
+ mInitialFilter = extras.getString(UI.FILTER_TEXT_EXTRA_KEY);
+ String originalAction =
+ extras.getString(ContactsSearchManager.ORIGINAL_ACTION_EXTRA_KEY);
+ if (originalAction != null) {
+ action = originalAction;
+ }
+ String originalComponent =
+ extras.getString(ContactsSearchManager.ORIGINAL_COMPONENT_EXTRA_KEY);
+ if (originalComponent != null) {
+ component = originalComponent;
+ }
+ } else {
+ mInitialFilter = null;
+ }
+ }
Log.i(TAG, "Called with action: " + action);
- if (UI.LIST_DEFAULT.equals(action)) {
+ mMode = MODE_UNKNOWN;
+ if (UI.LIST_DEFAULT.equals(action) || UI.FILTER_CONTACTS_ACTION.equals(action)) {
mMode = MODE_DEFAULT;
// When mDefaultMode is true the mode is set in onResume(), since the preferneces
// activity may change it whenever this activity isn't running
@@ -450,11 +619,11 @@
mMode = MODE_CUSTOM;
mDisplayOnlyPhones = false;
} else if (UI.LIST_STARRED_ACTION.equals(action)) {
- mMode = MODE_STARRED;
+ mMode = mSearchMode ? MODE_DEFAULT : MODE_STARRED;
} else if (UI.LIST_FREQUENT_ACTION.equals(action)) {
- mMode = MODE_FREQUENT;
+ mMode = mSearchMode ? MODE_DEFAULT : MODE_FREQUENT;
} else if (UI.LIST_STREQUENT_ACTION.equals(action)) {
- mMode = MODE_STREQUENT;
+ mMode = mSearchMode ? MODE_DEFAULT : MODE_STREQUENT;
} else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) {
mMode = MODE_CUSTOM;
mDisplayOnlyPhones = true;
@@ -476,14 +645,20 @@
mMode = MODE_LEGACY_PICK_POSTAL;
}
} else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
- if (intent.getComponent().getClassName().equals("alias.DialShortcut")) {
+ if (component.equals("alias.DialShortcut")) {
mMode = MODE_PICK_PHONE;
mShortcutAction = Intent.ACTION_CALL;
+ mShowSearchSnippets = false;
setTitle(R.string.callShortcutActivityTitle);
- } else if (intent.getComponent().getClassName().equals("alias.MessageShortcut")) {
+ } else if (component.equals("alias.MessageShortcut")) {
mMode = MODE_PICK_PHONE;
mShortcutAction = Intent.ACTION_SENDTO;
+ mShowSearchSnippets = false;
setTitle(R.string.messageShortcutActivityTitle);
+ } else if (mSearchMode) {
+ mMode = MODE_PICK_CONTACT;
+ mShortcutAction = Intent.ACTION_VIEW;
+ setTitle(R.string.shortcutActivityTitle);
} else {
mMode = MODE_PICK_OR_CREATE_CONTACT;
mShortcutAction = Intent.ACTION_VIEW;
@@ -492,7 +667,11 @@
} else if (Intent.ACTION_GET_CONTENT.equals(action)) {
final String type = intent.resolveType(this);
if (Contacts.CONTENT_ITEM_TYPE.equals(type)) {
- mMode = MODE_PICK_OR_CREATE_CONTACT;
+ if (mSearchMode) {
+ mMode = MODE_PICK_CONTACT;
+ } else {
+ mMode = MODE_PICK_OR_CREATE_CONTACT;
+ }
} else if (Phone.CONTENT_ITEM_TYPE.equals(type)) {
mMode = MODE_PICK_PHONE;
} else if (Phones.CONTENT_ITEM_TYPE.equals(type)) {
@@ -502,7 +681,11 @@
} else if (ContactMethods.CONTENT_POSTAL_ITEM_TYPE.equals(type)) {
mMode = MODE_LEGACY_PICK_POSTAL;
} else if (People.CONTENT_ITEM_TYPE.equals(type)) {
- mMode = MODE_LEGACY_PICK_OR_CREATE_PERSON;
+ if (mSearchMode) {
+ mMode = MODE_LEGACY_PICK_PERSON;
+ } else {
+ mMode = MODE_LEGACY_PICK_OR_CREATE_PERSON;
+ }
}
} else if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) {
@@ -524,17 +707,41 @@
if (intent.hasExtra(Insert.EMAIL)) {
mMode = MODE_QUERY_PICK_TO_VIEW;
mQueryMode = QUERY_MODE_MAILTO;
- mQueryData = intent.getStringExtra(Insert.EMAIL);
+ mInitialFilter = intent.getStringExtra(Insert.EMAIL);
} else if (intent.hasExtra(Insert.PHONE)) {
mMode = MODE_QUERY_PICK_TO_VIEW;
mQueryMode = QUERY_MODE_TEL;
- mQueryData = intent.getStringExtra(Insert.PHONE);
+ mInitialFilter = intent.getStringExtra(Insert.PHONE);
} else {
// Otherwise handle the more normal search case
mMode = MODE_QUERY;
- mQueryData = getIntent().getStringExtra(SearchManager.QUERY);
+ mShowSearchSnippets = true;
+ mInitialFilter = getIntent().getStringExtra(SearchManager.QUERY);
}
+ mSearchResultsMode = true;
+ } else if (ACTION_SEARCH_INTERNAL.equals(action)) {
+ String originalAction = null;
+ Bundle extras = intent.getExtras();
+ if (extras != null) {
+ originalAction = extras.getString(ContactsSearchManager.ORIGINAL_ACTION_EXTRA_KEY);
+ }
+ mShortcutAction = intent.getStringExtra(SHORTCUT_ACTION_KEY);
+ if (Intent.ACTION_INSERT_OR_EDIT.equals(originalAction)) {
+ mMode = MODE_QUERY_PICK_TO_EDIT;
+ mShowSearchSnippets = true;
+ mInitialFilter = getIntent().getStringExtra(SearchManager.QUERY);
+ } else if (mShortcutAction != null && intent.hasExtra(Insert.PHONE)) {
+ mMode = MODE_QUERY_PICK_PHONE;
+ mQueryMode = QUERY_MODE_TEL;
+ mInitialFilter = intent.getStringExtra(Insert.PHONE);
+ } else {
+ mMode = MODE_QUERY_PICK;
+ mQueryMode = QUERY_MODE_NONE;
+ mShowSearchSnippets = true;
+ mInitialFilter = getIntent().getStringExtra(SearchManager.QUERY);
+ }
+ mSearchResultsMode = true;
// Since this is the filter activity it receives all intents
// dispatched from the SearchManager for security reasons
// so we need to re-dispatch from here to the intended target.
@@ -579,13 +786,17 @@
}
if (JOIN_AGGREGATE.equals(action)) {
- mMode = MODE_JOIN_CONTACT;
- mQueryAggregateId = intent.getLongExtra(EXTRA_AGGREGATE_ID, -1);
- if (mQueryAggregateId == -1) {
- Log.e(TAG, "Intent " + action + " is missing required extra: "
- + EXTRA_AGGREGATE_ID);
- setResult(RESULT_CANCELED);
- finish();
+ if (mSearchMode) {
+ mMode = MODE_PICK_CONTACT;
+ } else {
+ mMode = MODE_JOIN_CONTACT;
+ mQueryAggregateId = intent.getLongExtra(EXTRA_AGGREGATE_ID, -1);
+ if (mQueryAggregateId == -1) {
+ Log.e(TAG, "Intent " + action + " is missing required extra: "
+ + EXTRA_AGGREGATE_ID);
+ setResult(RESULT_CANCELED);
+ finish();
+ }
}
}
@@ -593,6 +804,11 @@
mMode = MODE_DEFAULT;
}
+ if (((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0 || mSearchMode)
+ && !mSearchResultsMode) {
+ mShowNumberOfContacts = true;
+ }
+
if (mMode == MODE_JOIN_CONTACT) {
setContentView(R.layout.contacts_list_content_join);
TextView blurbView = (TextView)findViewById(R.id.join_contact_blurb);
@@ -601,61 +817,85 @@
getContactDisplayName(mQueryAggregateId));
blurbView.setText(blurb);
mJoinModeShowAllContacts = true;
+ } else if (mSearchMode) {
+ setContentView(R.layout.contacts_search_content);
+ } else if (mSearchResultsMode) {
+ setContentView(R.layout.contacts_list_search_results);
+ TextView titleText = (TextView)findViewById(R.id.search_results_for);
+ titleText.setText(Html.fromHtml(getString(R.string.search_results_for,
+ "<b>" + mInitialFilter + "</b>")));
} else {
setContentView(R.layout.contacts_list_content);
}
- // Setup the UI
- final ListView list = getListView();
-
- // 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.
- list.setDividerHeight(0);
- list.setFocusable(true);
- list.setOnCreateContextMenuListener(this);
- if ((mMode & MODE_MASK_NO_FILTER) != MODE_MASK_NO_FILTER) {
- list.setTextFilterEnabled(true);
+ setupListView();
+ if (mSearchMode) {
+ setupSearchView();
}
- if ((mMode & MODE_MASK_CREATE_NEW) != 0) {
- // Add the header for creating a new contact
- final LayoutInflater inflater = getLayoutInflater();
- View header = inflater.inflate(R.layout.create_new_contact, list, false);
- list.addHeaderView(header);
- }
-
- // Set the proper empty string
- setEmptyText();
-
- mAdapter = new ContactItemListAdapter(this);
- setListAdapter(mAdapter);
- getListView().setOnScrollListener(mAdapter);
-
- // We manually save/restore the listview state
- list.setSaveEnabled(false);
-
mQueryHandler = new QueryHandler(this);
mJustCreated = true;
- // TODO(jham) redesign this
mSyncEnabled = true;
-// // Check to see if sync is enabled
-// final ContentResolver resolver = getContentResolver();
-// IContentProvider provider = resolver.acquireProvider(Contacts.CONTENT_URI);
-// if (provider == null) {
-// // No contacts provider, bail.
-// finish();
-// return;
-// }
-//
-// try {
-// ISyncAdapter sa = provider.getSyncAdapter();
-// mSyncEnabled = sa != null;
-// } catch (RemoteException e) {
-// mSyncEnabled = false;
-// } finally {
-// resolver.releaseProvider(provider);
-// }
+ }
+
+ /**
+ * Register an observer for provider status changes - we will need to
+ * reflect them in the UI.
+ */
+ private void registerProviderStatusObserver() {
+ getContentResolver().registerContentObserver(ProviderStatus.CONTENT_URI,
+ false, mProviderStatusObserver);
+ }
+
+ /**
+ * Register an observer for provider status changes - we will need to
+ * reflect them in the UI.
+ */
+ private void unregisterProviderStatusObserver() {
+ getContentResolver().unregisterContentObserver(mProviderStatusObserver);
+ }
+
+ private void setupListView() {
+ final ListView list = getListView();
+ final LayoutInflater inflater = getLayoutInflater();
+
+ mHighlightingAnimation =
+ new NameHighlightingAnimation(list, TEXT_HIGHLIGHTING_ANIMATION_DURATION);
+
+ // 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.
+ list.setDividerHeight(0);
+ list.setOnCreateContextMenuListener(this);
+
+ mAdapter = new ContactItemListAdapter(this);
+ setListAdapter(mAdapter);
+
+ if (list instanceof PinnedHeaderListView && mAdapter.getDisplaySectionHeadersEnabled()) {
+ mPinnedHeaderBackgroundColor =
+ getResources().getColor(R.color.pinned_header_background);
+ PinnedHeaderListView pinnedHeaderList = (PinnedHeaderListView)list;
+ View pinnedHeader = inflater.inflate(R.layout.list_section, list, false);
+ pinnedHeaderList.setPinnedHeaderView(pinnedHeader);
+ }
+
+ list.setOnScrollListener(mAdapter);
+ list.setOnKeyListener(this);
+ list.setOnFocusChangeListener(this);
+ list.setOnTouchListener(this);
+
+ // We manually save/restore the listview state
+ list.setSaveEnabled(false);
+ }
+
+ /**
+ * Configures search UI.
+ */
+ private void setupSearchView() {
+ mSearchEditText = (SearchEditText)findViewById(R.id.search_src_text);
+ mSearchEditText.addTextChangedListener(this);
+ mSearchEditText.setOnEditorActionListener(this);
+ mSearchEditText.setText(mInitialFilter);
}
private String getContactDisplayName(long contactId) {
@@ -680,55 +920,86 @@
return contactName;
}
- private int[] mLocation = new int[2];
- private Rect mRect = new Rect();
+ private int getSummaryDisplayNameColumnIndex() {
+ if (mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
+ return SUMMARY_DISPLAY_NAME_PRIMARY_COLUMN_INDEX;
+ } else {
+ return SUMMARY_DISPLAY_NAME_ALTERNATIVE_COLUMN_INDEX;
+ }
+ }
/** {@inheritDoc} */
public void onClick(View v) {
- if (v.getId() == R.id.call_button) {
- final int position = (Integer) v.getTag();
- Cursor c = mAdapter.getCursor();
- if (c != null) {
- c.moveToPosition(position);
- callContact(c);
+ int id = v.getId();
+ switch (id) {
+ // TODO a better way of identifying the button
+ case android.R.id.button1: {
+ final int position = (Integer)v.getTag();
+ Cursor c = mAdapter.getCursor();
+ if (c != null) {
+ c.moveToPosition(position);
+ callContact(c);
+ }
+ break;
}
}
}
private void setEmptyText() {
- if (mMode == MODE_JOIN_CONTACT) {
+ if (mMode == MODE_JOIN_CONTACT || mSearchMode) {
return;
}
TextView empty = (TextView) findViewById(R.id.emptyText);
- int gravity = Gravity.NO_GRAVITY;
-
if (mDisplayOnlyPhones) {
empty.setText(getText(R.string.noContactsWithPhoneNumbers));
- gravity = Gravity.CENTER;
} else if (mMode == MODE_STREQUENT || mMode == MODE_STARRED) {
empty.setText(getText(R.string.noFavoritesHelpText));
- } else if (mMode == MODE_QUERY) {
- empty.setText(getText(R.string.noMatchingContacts));
+ } else if (mMode == MODE_QUERY || mMode == MODE_QUERY_PICK
+ || mMode == MODE_QUERY_PICK_PHONE || mMode == MODE_QUERY_PICK_TO_VIEW
+ || mMode == MODE_QUERY_PICK_TO_EDIT) {
+ empty.setText(getText(R.string.noMatchingContacts));
} else {
boolean hasSim = ((TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE))
.hasIccCard();
-
- if (hasSim) {
- if (mSyncEnabled) {
+ boolean createShortcut = Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction());
+ if (isSyncActive()) {
+ if (createShortcut) {
+ // Help text is the same no matter whether there is SIM or not.
+ empty.setText(getText(R.string.noContactsHelpTextWithSyncForCreateShortcut));
+ } else if (hasSim) {
empty.setText(getText(R.string.noContactsHelpTextWithSync));
} else {
- empty.setText(getText(R.string.noContactsHelpText));
+ empty.setText(getText(R.string.noContactsNoSimHelpTextWithSync));
}
} else {
- if (mSyncEnabled) {
- empty.setText(getText(R.string.noContactsNoSimHelpTextWithSync));
+ if (createShortcut) {
+ // Help text is the same no matter whether there is SIM or not.
+ empty.setText(getText(R.string.noContactsHelpTextForCreateShortcut));
+ } else if (hasSim) {
+ empty.setText(getText(R.string.noContactsHelpText));
} else {
empty.setText(getText(R.string.noContactsNoSimHelpText));
}
}
}
- empty.setGravity(gravity);
+ }
+
+ private boolean isSyncActive() {
+ Account[] accounts = AccountManager.get(this).getAccounts();
+ if (accounts != null && accounts.length > 0) {
+ IContentService contentService = ContentResolver.getContentService();
+ for (Account account : accounts) {
+ try {
+ if (contentService.isSyncActive(account, ContactsContract.AUTHORITY)) {
+ return true;
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Could not get the sync status");
+ }
+ }
+ }
+ return false;
}
private void buildUserGroupUri(String group) {
@@ -744,22 +1015,27 @@
mDisplayOnlyPhones = prefs.getBoolean(Prefs.DISPLAY_ONLY_PHONES,
Prefs.DISPLAY_ONLY_PHONES_DEFAULT);
+ }
- // Update the empty text view with the proper string, as the group may have changed
- setEmptyText();
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mPhotoLoader.stop();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ unregisterProviderStatusObserver();
}
@Override
protected void onResume() {
super.onResume();
- // Force cache to reload so we don't show stale photos.
- if (mAdapter.mBitmapCache != null) {
- mAdapter.mBitmapCache.clear();
- }
+ registerProviderStatusObserver();
+ mPhotoLoader.resume();
- mScrollState = OnScrollListener.SCROLL_STATE_IDLE;
- boolean runQuery = true;
Activity parent = getParent();
// Do this before setting the filter. The filter thread relies
@@ -771,37 +1047,141 @@
}
// See if we were invoked with a filter
- if (parent != null && parent instanceof DialtactsActivity) {
- String filterText = ((DialtactsActivity) parent).getAndClearFilterText();
- if (filterText != null && filterText.length() > 0) {
- getListView().setFilterText(filterText);
- // Don't start a new query since it will conflict with the filter
- runQuery = false;
- } else if (mJustCreated) {
- getListView().clearTextFilter();
- }
+ if (mSearchMode) {
+ mSearchEditText.requestFocus();
}
- if (mJustCreated && runQuery) {
+ if (!mSearchMode && !checkProviderState(mJustCreated)) {
+ return;
+ }
+
+ if (mJustCreated) {
// We need to start a query here the first time the activity is launched, as long
// as we aren't doing a filter.
startQuery();
}
mJustCreated = false;
+ mSearchInitiated = false;
+ }
+
+ /**
+ * Obtains the contacts provider status and configures the UI accordingly.
+ *
+ * @param loadData true if the method needs to start a query when the
+ * provider is in the normal state
+ * @return true if the provider status is normal
+ */
+ private boolean checkProviderState(boolean loadData) {
+ View importFailureView = findViewById(R.id.import_failure);
+ if (importFailureView == null) {
+ return true;
+ }
+
+ TextView messageView = (TextView) findViewById(R.id.emptyText);
+
+ // This query can be performed on the UI thread because
+ // the API explicitly allows such use.
+ Cursor cursor = getContentResolver().query(ProviderStatus.CONTENT_URI, new String[] {
+ ProviderStatus.STATUS, ProviderStatus.DATA1
+ }, null, null, null);
+ try {
+ if (cursor.moveToFirst()) {
+ int status = cursor.getInt(0);
+ if (status != mProviderStatus) {
+ mProviderStatus = status;
+ switch (status) {
+ case ProviderStatus.STATUS_NORMAL:
+ mAdapter.notifyDataSetInvalidated();
+ if (loadData) {
+ startQuery();
+ }
+ break;
+
+ case ProviderStatus.STATUS_CHANGING_LOCALE:
+ messageView.setText(R.string.locale_change_in_progress);
+ mAdapter.changeCursor(null);
+ mAdapter.notifyDataSetInvalidated();
+ break;
+
+ case ProviderStatus.STATUS_UPGRADING:
+ messageView.setText(R.string.upgrade_in_progress);
+ mAdapter.changeCursor(null);
+ mAdapter.notifyDataSetInvalidated();
+ break;
+
+ case ProviderStatus.STATUS_UPGRADE_OUT_OF_MEMORY:
+ long size = cursor.getLong(1);
+ String message = getResources().getString(
+ R.string.upgrade_out_of_memory, new Object[] {size});
+ messageView.setText(message);
+ configureImportFailureView(importFailureView);
+ mAdapter.changeCursor(null);
+ mAdapter.notifyDataSetInvalidated();
+ break;
+ }
+ }
+ }
+ } finally {
+ cursor.close();
+ }
+
+ importFailureView.setVisibility(
+ mProviderStatus == ProviderStatus.STATUS_UPGRADE_OUT_OF_MEMORY
+ ? View.VISIBLE
+ : View.GONE);
+ return mProviderStatus == ProviderStatus.STATUS_NORMAL;
+ }
+
+ private void configureImportFailureView(View importFailureView) {
+
+ OnClickListener listener = new OnClickListener(){
+
+ public void onClick(View v) {
+ switch(v.getId()) {
+ case R.id.import_failure_uninstall_apps: {
+ startActivity(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS));
+ break;
+ }
+ case R.id.import_failure_retry_upgrade: {
+ // Send a provider status update, which will trigger a retry
+ ContentValues values = new ContentValues();
+ values.put(ProviderStatus.STATUS, ProviderStatus.STATUS_UPGRADING);
+ getContentResolver().update(ProviderStatus.CONTENT_URI, values, null, null);
+ break;
+ }
+ }
+ }};
+
+ Button uninstallApps = (Button) findViewById(R.id.import_failure_uninstall_apps);
+ uninstallApps.setOnClickListener(listener);
+
+ Button retryUpgrade = (Button) findViewById(R.id.import_failure_retry_upgrade);
+ retryUpgrade.setOnClickListener(listener);
+ }
+
+ private String getTextFilter() {
+ if (mSearchEditText != null) {
+ return mSearchEditText.getText().toString();
+ }
+ return null;
}
@Override
protected void onRestart() {
super.onRestart();
+ if (!checkProviderState(false)) {
+ return;
+ }
+
// The cursor was killed off in onStop(), so we need to get a new one here
// We do not perform the query if a filter is set on the list because the
// filter will cause the query to happen anyway
- if (TextUtils.isEmpty(getListView().getTextFilter())) {
+ if (TextUtils.isEmpty(getTextFilter())) {
startQuery();
} else {
// Run the filtered query on the adapter
- ((ContactItemListAdapter) getListAdapter()).onContentChanged();
+ mAdapter.onContentChanged();
}
}
@@ -809,8 +1189,9 @@
protected void onSaveInstanceState(Bundle icicle) {
super.onSaveInstanceState(icicle);
// Save list state in the bundle so we can restore it after the QueryHandler has run
- icicle.putParcelable(LIST_STATE_KEY, mList.onSaveInstanceState());
- icicle.putBoolean(FOCUS_KEY, mList.hasFocus());
+ if (mList != null) {
+ icicle.putParcelable(LIST_STATE_KEY, mList.onSaveInstanceState());
+ }
}
@Override
@@ -818,20 +1199,14 @@
super.onRestoreInstanceState(icicle);
// Retrieve list state. This will be applied after the QueryHandler has run
mListState = icicle.getParcelable(LIST_STATE_KEY);
- mListHasFocus = icicle.getBoolean(FOCUS_KEY);
}
@Override
protected void onStop() {
super.onStop();
- // We don't want the list to display the empty state, since when we resume it will still
- // be there and show up while the new query is happening. After the async query finished
- // in response to onRestart() setLoading(false) will be called.
- mAdapter.setLoading(true);
mAdapter.setSuggestionsCursor(null);
mAdapter.changeCursor(null);
- mAdapter.clearImageFetching();
if (mMode == MODE_QUERY) {
// Make sure the search box is closed
@@ -866,12 +1241,12 @@
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_display_groups: {
- final Intent intent = new Intent(this, DisplayGroupsActivity.class);
+ final Intent intent = new Intent(this, ContactsPreferencesActivity.class);
startActivityForResult(intent, SUBACTIVITY_DISPLAY_GROUP);
return true;
}
case R.id.menu_search: {
- startSearch(null, false, null, false);
+ onSearchRequested();
return true;
}
case R.id.menu_add: {
@@ -896,7 +1271,82 @@
}
@Override
- protected Dialog onCreateDialog(int id) {
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (mProviderStatus != ProviderStatus.STATUS_NORMAL) {
+ return;
+ }
+
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ if (!mSearchMode && (mMode & MODE_MASK_NO_FILTER) == 0) {
+ if ((mMode & MODE_MASK_PICKER) != 0) {
+ ContactsSearchManager.startSearchForResult(this, initialQuery,
+ SUBACTIVITY_FILTER);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
+ }
+ }
+
+ /**
+ * Performs filtering of the list based on the search query entered in the
+ * search text edit.
+ */
+ protected void onSearchTextChanged() {
+ // Set the proper empty string
+ setEmptyText();
+
+ Filter filter = mAdapter.getFilter();
+ filter.filter(getTextFilter());
+ }
+
+ /**
+ * Starts a new activity that will run a search query and display search results.
+ */
+ private void doSearch() {
+ String query = getTextFilter();
+ if (TextUtils.isEmpty(query)) {
+ return;
+ }
+
+ Intent intent = new Intent(this, SearchResultsActivity.class);
+ Intent originalIntent = getIntent();
+ Bundle originalExtras = originalIntent.getExtras();
+ if (originalExtras != null) {
+ intent.putExtras(originalExtras);
+ }
+
+ intent.putExtra(SearchManager.QUERY, query);
+ if ((mMode & MODE_MASK_PICKER) != 0) {
+ intent.setAction(ACTION_SEARCH_INTERNAL);
+ intent.putExtra(SHORTCUT_ACTION_KEY, mShortcutAction);
+ if (mShortcutAction != null) {
+ if (Intent.ACTION_CALL.equals(mShortcutAction)
+ || Intent.ACTION_SENDTO.equals(mShortcutAction)) {
+ intent.putExtra(Insert.PHONE, query);
+ }
+ } else {
+ switch (mQueryMode) {
+ case QUERY_MODE_MAILTO:
+ intent.putExtra(Insert.EMAIL, query);
+ break;
+ case QUERY_MODE_TEL:
+ intent.putExtra(Insert.PHONE, query);
+ break;
+ }
+ }
+ startActivityForResult(intent, SUBACTIVITY_SEARCH);
+ } else {
+ intent.setAction(Intent.ACTION_SEARCH);
+ startActivity(intent);
+ }
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id, Bundle bundle) {
switch (id) {
case R.string.import_from_sim:
case R.string.import_from_sdcard: {
@@ -946,7 +1396,7 @@
new DeleteClickListener()).create();
}
}
- return super.onCreateDialog(id);
+ return super.onCreateDialog(id, bundle);
}
/**
@@ -985,6 +1435,9 @@
if (res.getBoolean(R.bool.config_allow_export_to_sdcard)) {
adapter.add(R.string.export_to_sdcard);
}
+ if (res.getBoolean(R.bool.config_allow_share_visible_contacts)) {
+ adapter.add(R.string.share_visible_contacts);
+ }
final DialogInterface.OnClickListener clickListener =
new DialogInterface.OnClickListener() {
@@ -1004,6 +1457,10 @@
context.startActivity(exportIntent);
break;
}
+ case R.string.share_visible_contacts: {
+ doShareVisibleContacts();
+ break;
+ }
default: {
Log.e(TAG, "Unexpected resource: " +
getResources().getResourceEntryName(resId));
@@ -1019,6 +1476,36 @@
.show();
}
+ private void doShareVisibleContacts() {
+ final Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,
+ sLookupProjection, getContactSelection(), null, null);
+ try {
+ if (!cursor.moveToFirst()) {
+ Toast.makeText(this, R.string.share_error, Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ StringBuilder uriListBuilder = new StringBuilder();
+ int index = 0;
+ for (;!cursor.isAfterLast(); cursor.moveToNext()) {
+ if (index != 0)
+ uriListBuilder.append(':');
+ uriListBuilder.append(cursor.getString(0));
+ index++;
+ }
+ 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);
+ startActivity(intent);
+ } finally {
+ cursor.close();
+ }
+ }
+
private void handleImportRequest(int resId) {
// There's three possibilities:
// - more than one accounts -> ask the user
@@ -1036,13 +1523,12 @@
}
@Override
- protected void onActivityResult(int requestCode, int resultCode,
- Intent data) {
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case SUBACTIVITY_NEW_CONTACT:
if (resultCode == RESULT_OK) {
returnPickerResult(null, data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME),
- data.getData(), 0);
+ data.getData());
}
break;
@@ -1056,6 +1542,15 @@
// Mark as just created so we re-run the view query
mJustCreated = true;
break;
+
+ case SUBACTIVITY_FILTER:
+ case SUBACTIVITY_SEARCH:
+ // Pass through results of filter or search UI
+ if (resultCode == RESULT_OK) {
+ setResult(RESULT_OK, data);
+ finish();
+ }
+ break;
}
}
@@ -1086,7 +1581,7 @@
Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
// Setup the menu header
- menu.setHeaderTitle(cursor.getString(SUMMARY_NAME_COLUMN_INDEX));
+ menu.setHeaderTitle(cursor.getString(getSummaryDisplayNameColumnIndex()));
// View contact details
menu.add(0, MENU_ITEM_VIEW_CONTACT, 0, R.string.menu_viewContact)
@@ -1147,8 +1642,7 @@
}
case MENU_ITEM_DELETE: {
- mSelectedContactUri = getContactUri(info.position);
- doContactDelete();
+ doContactDelete(getContactUri(info.position));
return true;
}
}
@@ -1156,6 +1650,49 @@
return super.onContextItemSelected(item);
}
+ /**
+ * Event handler for the use case where the user starts typing without
+ * bringing up the search UI first.
+ */
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
+ if (!mSearchMode && (mMode & MODE_MASK_NO_FILTER) == 0 && !mSearchInitiated) {
+ int unicodeChar = event.getUnicodeChar();
+ if (unicodeChar != 0) {
+ mSearchInitiated = true;
+ startSearch(new String(new int[]{unicodeChar}, 0, 1), false, null, false);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Event handler for search UI.
+ */
+ public void afterTextChanged(Editable s) {
+ onSearchTextChanged();
+ }
+
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ }
+
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ }
+
+ /**
+ * Event handler for search UI.
+ */
+ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+ if (actionId == EditorInfo.IME_ACTION_DONE) {
+ hideSoftKeyboard();
+ if (TextUtils.isEmpty(getTextFilter())) {
+ finish();
+ }
+ return true;
+ }
+ return false;
+ }
+
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
@@ -1165,11 +1702,9 @@
}
break;
}
+
case KeyEvent.KEYCODE_DEL: {
- final int position = getListView().getSelectedItemPosition();
- if (position != ListView.INVALID_POSITION) {
- mSelectedContactUri = getContactUri(position);
- doContactDelete();
+ if (deleteSelection()) {
return true;
}
break;
@@ -1179,20 +1714,36 @@
return super.onKeyDown(keyCode, event);
}
+ private boolean deleteSelection() {
+ if ((mMode & MODE_MASK_PICKER) != 0) {
+ return false;
+ }
+
+ final int position = getListView().getSelectedItemPosition();
+ if (position != ListView.INVALID_POSITION) {
+ Uri contactUri = getContactUri(position);
+ if (contactUri != null) {
+ doContactDelete(contactUri);
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* Prompt the user before deleting the given {@link Contacts} entry.
*/
- protected void doContactDelete() {
+ protected void doContactDelete(Uri contactUri) {
mReadOnlySourcesCnt = 0;
mWritableSourcesCnt = 0;
mWritableRawContactIds.clear();
- if (mSelectedContactUri != null) {
- Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, RAW_CONTACTS_PROJECTION,
- RawContacts.CONTACT_ID + "=" + ContentUris.parseId(mSelectedContactUri), null,
- null);
- Sources sources = Sources.getInstance(ContactsListActivity.this);
- if (c != null) {
+ Sources sources = Sources.getInstance(ContactsListActivity.this);
+ Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, RAW_CONTACTS_PROJECTION,
+ RawContacts.CONTACT_ID + "=" + ContentUris.parseId(contactUri), null,
+ null);
+ if (c != null) {
+ try {
while (c.moveToNext()) {
final String accountType = c.getString(2);
final long rawContactId = c.getLong(0);
@@ -1205,105 +1756,123 @@
mWritableRawContactIds.add(rawContactId);
}
}
- }
- c.close();
- if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt > 0) {
- showDialog(R.id.dialog_readonly_contact_delete_confirmation);
- } else if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt == 0) {
- showDialog(R.id.dialog_readonly_contact_hide_confirmation);
- } else if (mReadOnlySourcesCnt == 0 && mWritableSourcesCnt > 1) {
- showDialog(R.id.dialog_multiple_contact_delete_confirmation);
- } else {
- showDialog(R.id.dialog_delete_contact_confirmation);
+ } finally {
+ c.close();
}
}
+
+ mSelectedContactUri = contactUri;
+ if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt > 0) {
+ showDialog(R.id.dialog_readonly_contact_delete_confirmation);
+ } else if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt == 0) {
+ showDialog(R.id.dialog_readonly_contact_hide_confirmation);
+ } else if (mReadOnlySourcesCnt == 0 && mWritableSourcesCnt > 1) {
+ showDialog(R.id.dialog_multiple_contact_delete_confirmation);
+ } else {
+ showDialog(R.id.dialog_delete_contact_confirmation);
+ }
+ }
+
+ /**
+ * Dismisses the soft keyboard when the list takes focus.
+ */
+ public void onFocusChange(View view, boolean hasFocus) {
+ if (view == getListView() && hasFocus) {
+ hideSoftKeyboard();
+ }
+ }
+
+ /**
+ * Dismisses the soft keyboard when the list takes focus.
+ */
+ public boolean onTouch(View view, MotionEvent event) {
+ if (view == getListView()) {
+ hideSoftKeyboard();
+ }
+ return false;
+ }
+
+ /**
+ * Dismisses the search UI along with the keyboard if the filter text is empty.
+ */
+ public boolean onKeyPreIme(int keyCode, KeyEvent event) {
+ if (mSearchMode && keyCode == KeyEvent.KEYCODE_BACK && TextUtils.isEmpty(getTextFilter())) {
+ hideSoftKeyboard();
+ onBackPressed();
+ return true;
+ }
+ return false;
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
- // Hide soft keyboard, if visible
- InputMethodManager inputMethodManager = (InputMethodManager)
- getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager.hideSoftInputFromWindow(mList.getWindowToken(), 0);
+ hideSoftKeyboard();
- if (mMode == MODE_INSERT_OR_EDIT_CONTACT) {
+ if (mSearchMode && mAdapter.isSearchAllContactsItemPosition(position)) {
+ doSearch();
+ } else if (mMode == MODE_INSERT_OR_EDIT_CONTACT || mMode == MODE_QUERY_PICK_TO_EDIT) {
Intent intent;
- if (position == 0) {
+ if (position == 0 && !mSearchMode && mMode != MODE_QUERY_PICK_TO_EDIT) {
intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
} else {
- // Edit. adjusting position by subtracting header view count.
- position -= getListView().getHeaderViewsCount();
- final Uri uri = getSelectedUri(position);
- intent = new Intent(Intent.ACTION_EDIT, uri);
+ intent = new Intent(Intent.ACTION_EDIT, getSelectedUri(position));
}
intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
Bundle extras = getIntent().getExtras();
-
- if (extras == null) {
- extras = new Bundle();
+ if (extras != null) {
+ intent.putExtras(extras);
}
- intent.putExtras(extras);
- extras.putBoolean(KEY_PICKER_MODE, (mMode & MODE_MASK_PICKER) == MODE_MASK_PICKER);
+ intent.putExtra(KEY_PICKER_MODE, (mMode & MODE_MASK_PICKER) == MODE_MASK_PICKER);
startActivity(intent);
finish();
- } else if (id != -1) {
- // Subtract one if we have Create Contact at the top
- if ((mMode & MODE_MASK_CREATE_NEW) != 0) {
- position--;
- }
+ } else if ((mMode & MODE_MASK_CREATE_NEW) == MODE_MASK_CREATE_NEW
+ && position == 0) {
+ Intent newContact = new Intent(Intents.Insert.ACTION, Contacts.CONTENT_URI);
+ startActivityForResult(newContact, SUBACTIVITY_NEW_CONTACT);
+ } else if (mMode == MODE_JOIN_CONTACT && id == JOIN_MODE_SHOW_ALL_CONTACTS_ID) {
+ mJoinModeShowAllContacts = false;
+ startQuery();
+ } else if (id > 0) {
final Uri uri = getSelectedUri(position);
if ((mMode & MODE_MASK_PICKER) == 0) {
final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivityForResult(intent, SUBACTIVITY_VIEW_CONTACT);
} else if (mMode == MODE_JOIN_CONTACT) {
- if (id == JOIN_MODE_SHOW_ALL_CONTACTS_ID) {
- mJoinModeShowAllContacts = false;
- startQuery();
- } else {
- returnPickerResult(null, null, uri, id);
- }
+ returnPickerResult(null, null, uri);
} else if (mMode == MODE_QUERY_PICK_TO_VIEW) {
// Started with query that should launch to view contact
final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
finish();
- } else if (mMode == MODE_PICK_CONTACT
- || mMode == MODE_PICK_OR_CREATE_CONTACT
- || mMode == MODE_LEGACY_PICK_PERSON
- || mMode == MODE_LEGACY_PICK_OR_CREATE_PERSON) {
- if (mShortcutAction != null) {
- Cursor c = (Cursor) mAdapter.getItem(position);
- returnPickerResult(c, c.getString(SUMMARY_NAME_COLUMN_INDEX), uri, id);
- } else {
- returnPickerResult(null, null, uri, id);
- }
- } else if (mMode == MODE_PICK_PHONE) {
- if (mShortcutAction != null) {
- Cursor c = (Cursor) mAdapter.getItem(position);
- returnPickerResult(c, c.getString(PHONE_DISPLAY_NAME_COLUMN_INDEX), uri, id);
- } else {
- returnPickerResult(null, null, uri, id);
- }
+ } else if (mMode == MODE_PICK_PHONE || mMode == MODE_QUERY_PICK_PHONE) {
+ Cursor c = (Cursor) mAdapter.getItem(position);
+ returnPickerResult(c, c.getString(PHONE_DISPLAY_NAME_COLUMN_INDEX), uri);
+ } else if ((mMode & MODE_MASK_PICKER) != 0) {
+ Cursor c = (Cursor) mAdapter.getItem(position);
+ returnPickerResult(c, c.getString(getSummaryDisplayNameColumnIndex()), uri);
} else if (mMode == MODE_PICK_POSTAL
|| mMode == MODE_LEGACY_PICK_POSTAL
|| mMode == MODE_LEGACY_PICK_PHONE) {
- returnPickerResult(null, null, uri, id);
+ returnPickerResult(null, null, uri);
}
- } else if ((mMode & MODE_MASK_CREATE_NEW) == MODE_MASK_CREATE_NEW
- && position == 0) {
- Intent newContact = new Intent(Intents.Insert.ACTION, Contacts.CONTENT_URI);
- startActivityForResult(newContact, SUBACTIVITY_NEW_CONTACT);
} else {
signalError();
}
}
+ private void hideSoftKeyboard() {
+ // Hide soft keyboard, if visible
+ InputMethodManager inputMethodManager = (InputMethodManager)
+ getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(mList.getWindowToken(), 0);
+ }
+
/**
- * @param uri In most cases, this should be a lookup {@link Uri}, possibly
+ * @param selectedUri In most cases, this should be a lookup {@link Uri}, possibly
* generated through {@link Contacts#getLookupUri(long, String)}.
*/
- private void returnPickerResult(Cursor c, String name, Uri uri, long id) {
+ private void returnPickerResult(Cursor c, String name, Uri selectedUri) {
final Intent intent = new Intent();
if (mShortcutAction != null) {
@@ -1313,16 +1882,16 @@
shortcutIntent = new Intent(ContactsContract.QuickContact.ACTION_QUICK_CONTACT);
shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-
- shortcutIntent.setData(uri);
+
+ shortcutIntent.setData(selectedUri);
shortcutIntent.putExtra(ContactsContract.QuickContact.EXTRA_MODE,
ContactsContract.QuickContact.MODE_LARGE);
shortcutIntent.putExtra(ContactsContract.QuickContact.EXTRA_EXCLUDE_MIMES,
(String[]) null);
- final Bitmap icon = framePhoto(loadContactPhoto(id, null));
+ final Bitmap icon = framePhoto(loadContactPhoto(selectedUri, null));
if (icon != null) {
- intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+ intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, scaleToAppIconSize(icon));
} else {
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(this,
@@ -1346,17 +1915,16 @@
Uri phoneUri = Uri.fromParts(scheme, number, null);
shortcutIntent = new Intent(mShortcutAction, phoneUri);
- // Find the Contacts._ID for this phone number
- long contactId = c.getLong(PHONE_CONTACT_ID_COLUMN_INDEX);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON,
- generatePhoneNumberIcon(contactId, type, resid));
+ generatePhoneNumberIcon(selectedUri, type, resid));
}
shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
setResult(RESULT_OK, intent);
} else {
- setResult(RESULT_OK, intent.setData(uri));
+ intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
+ setResult(RESULT_OK, intent.setData(selectedUri));
}
finish();
}
@@ -1392,17 +1960,17 @@
* 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.
*
- * @param contactId The person the phone number belongs to
+ * @param lookupUri The person the phone number belongs to
* @param type The type of the phone number
* @param actionResId The ID for the action resource
* @return The bitmap for the icon
*/
- private Bitmap generatePhoneNumberIcon(long contactId, int type, int actionResId) {
+ private Bitmap generatePhoneNumberIcon(Uri lookupUri, int type, int actionResId) {
final Resources r = getResources();
boolean drawPhoneOverlay = true;
final float scaleDensity = getResources().getDisplayMetrics().scaledDensity;
- Bitmap photo = loadContactPhoto(contactId, null);
+ Bitmap photo = loadContactPhoto(lookupUri, null);
if (photo == null) {
// If there isn't a photo use the generic phone action icon instead
Bitmap phoneIcon = getPhoneActionIcon(r, actionResId);
@@ -1415,8 +1983,7 @@
}
// Setup the drawing classes
- int iconSize = (int) r.getDimension(android.R.dimen.app_icon_size);
- Bitmap icon = Bitmap.createBitmap(iconSize, iconSize, Bitmap.Config.ARGB_8888);
+ Bitmap icon = createShortcutBitmap();
Canvas canvas = new Canvas(icon);
// Copy in the photo
@@ -1424,7 +1991,7 @@
photoPaint.setDither(true);
photoPaint.setFilterBitmap(true);
Rect src = new Rect(0,0, photo.getWidth(),photo.getHeight());
- Rect dst = new Rect(0,0, iconSize,iconSize);
+ Rect dst = new Rect(0,0, mIconSize, mIconSize);
canvas.drawBitmap(photo, src, dst, photoPaint);
// Create an overlay for the phone number type
@@ -1474,6 +2041,26 @@
return icon;
}
+ private Bitmap scaleToAppIconSize(Bitmap photo) {
+ // Setup the drawing classes
+ Bitmap icon = createShortcutBitmap();
+ Canvas canvas = new Canvas(icon);
+
+ // Copy in the photo
+ Paint photoPaint = new Paint();
+ photoPaint.setDither(true);
+ photoPaint.setFilterBitmap(true);
+ Rect src = new Rect(0,0, photo.getWidth(),photo.getHeight());
+ Rect dst = new Rect(0,0, mIconSize, mIconSize);
+ canvas.drawBitmap(photo, src, dst, photoPaint);
+
+ return icon;
+ }
+
+ private Bitmap createShortcutBitmap() {
+ return Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
+ }
+
/**
* Returns the icon for the phone call action.
*
@@ -1491,17 +2078,20 @@
}
}
- Uri getUriToQuery() {
+ private Uri getUriToQuery() {
switch(mMode) {
case MODE_JOIN_CONTACT:
return getJoinSuggestionsUri(null);
case MODE_FREQUENT:
case MODE_STARRED:
+ return Contacts.CONTENT_URI;
+
case MODE_DEFAULT:
+ case MODE_CUSTOM:
case MODE_INSERT_OR_EDIT_CONTACT:
case MODE_PICK_CONTACT:
case MODE_PICK_OR_CREATE_CONTACT:{
- return Contacts.CONTENT_URI;
+ return CONTACTS_CONTENT_URI_WITH_LETTER_COUNTS;
}
case MODE_STREQUENT: {
return Contacts.CONTENT_STREQUENT_URI;
@@ -1511,26 +2101,35 @@
return People.CONTENT_URI;
}
case MODE_PICK_PHONE: {
- return Phone.CONTENT_URI;
+ return buildSectionIndexerUri(Phone.CONTENT_URI);
}
case MODE_LEGACY_PICK_PHONE: {
return Phones.CONTENT_URI;
}
case MODE_PICK_POSTAL: {
- return StructuredPostal.CONTENT_URI;
+ return buildSectionIndexerUri(StructuredPostal.CONTENT_URI);
}
case MODE_LEGACY_PICK_POSTAL: {
return ContactMethods.CONTENT_URI;
}
case MODE_QUERY_PICK_TO_VIEW: {
if (mQueryMode == QUERY_MODE_MAILTO) {
- return Uri.withAppendedPath(Email.CONTENT_FILTER_URI, Uri.encode(mQueryData));
+ return Uri.withAppendedPath(Email.CONTENT_FILTER_URI,
+ Uri.encode(mInitialFilter));
} else if (mQueryMode == QUERY_MODE_TEL) {
- return Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(mQueryData));
+ return Uri.withAppendedPath(Phone.CONTENT_FILTER_URI,
+ Uri.encode(mInitialFilter));
}
+ return CONTACTS_CONTENT_URI_WITH_LETTER_COUNTS;
}
- case MODE_QUERY: {
- return getContactFilterUri(mQueryData);
+ case MODE_QUERY:
+ case MODE_QUERY_PICK:
+ case MODE_QUERY_PICK_TO_EDIT: {
+ return getContactFilterUri(mInitialFilter);
+ }
+ case MODE_QUERY_PICK_PHONE: {
+ return Uri.withAppendedPath(Phone.CONTENT_FILTER_URI,
+ Uri.encode(mInitialFilter));
}
case MODE_GROUP: {
return mGroupUri;
@@ -1551,6 +2150,10 @@
}
final Cursor cursor = (Cursor)mAdapter.getItem(position);
+ if (cursor == null) {
+ return null;
+ }
+
switch(mMode) {
case MODE_LEGACY_PICK_PERSON:
case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
@@ -1561,7 +2164,7 @@
default: {
// Build and return soft, lookup reference
final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);
- final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);
+ final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY_COLUMN_INDEX);
return Contacts.getLookupUri(contactId, lookupKey);
}
}
@@ -1582,7 +2185,8 @@
case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
return ContentUris.withAppendedId(People.CONTENT_URI, id);
}
- case MODE_PICK_PHONE: {
+ case MODE_PICK_PHONE:
+ case MODE_QUERY_PICK_PHONE: {
return ContentUris.withAppendedId(Data.CONTENT_URI, id);
}
case MODE_LEGACY_PICK_PHONE: {
@@ -1606,18 +2210,26 @@
case MODE_STREQUENT:
case MODE_FREQUENT:
case MODE_STARRED:
- case MODE_QUERY:
case MODE_DEFAULT:
+ case MODE_CUSTOM:
case MODE_INSERT_OR_EDIT_CONTACT:
case MODE_GROUP:
case MODE_PICK_CONTACT:
case MODE_PICK_OR_CREATE_CONTACT: {
- return CONTACTS_SUMMARY_PROJECTION;
+ return mSearchMode
+ ? CONTACTS_SUMMARY_FILTER_PROJECTION
+ : CONTACTS_SUMMARY_PROJECTION;
+ }
+ case MODE_QUERY:
+ case MODE_QUERY_PICK:
+ case MODE_QUERY_PICK_TO_EDIT: {
+ return CONTACTS_SUMMARY_FILTER_PROJECTION;
}
case MODE_LEGACY_PICK_PERSON:
case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
return LEGACY_PEOPLE_PROJECTION ;
}
+ case MODE_QUERY_PICK_PHONE:
case MODE_PICK_PHONE: {
return PHONES_PROJECTION;
}
@@ -1644,12 +2256,29 @@
return CONTACTS_SUMMARY_PROJECTION;
}
- private Bitmap loadContactPhoto(long contactId, BitmapFactory.Options options) {
+ private Bitmap loadContactPhoto(Uri selectedUri, BitmapFactory.Options options) {
+ Uri contactUri = null;
+ if (Contacts.CONTENT_ITEM_TYPE.equals(getContentResolver().getType(selectedUri))) {
+ // TODO we should have a "photo" directory under the lookup URI itself
+ contactUri = Contacts.lookupContact(getContentResolver(), selectedUri);
+ } else {
+
+ Cursor cursor = getContentResolver().query(selectedUri,
+ new String[] { Data.CONTACT_ID }, null, null, null);
+ try {
+ if (cursor != null && cursor.moveToFirst()) {
+ final long contactId = cursor.getLong(0);
+ contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
+ }
+ } finally {
+ if (cursor != null) cursor.close();
+ }
+ }
+
Cursor cursor = null;
Bitmap bm = null;
try {
- Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
cursor = getContentResolver().query(photoUri, new String[] {Photo.PHOTO},
null, null, null);
@@ -1688,10 +2317,17 @@
}
private Uri getContactFilterUri(String filter) {
+ Uri baseUri;
if (!TextUtils.isEmpty(filter)) {
- return Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(filter));
+ baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(filter));
} else {
- return Contacts.CONTENT_URI;
+ baseUri = Contacts.CONTENT_URI;
+ }
+
+ if (mAdapter.getDisplaySectionHeadersEnabled()) {
+ return buildSectionIndexerUri(baseUri);
+ } else {
+ return baseUri;
}
}
@@ -1703,6 +2339,11 @@
}
}
+ private static Uri buildSectionIndexerUri(Uri uri) {
+ return uri.buildUpon()
+ .appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true").build();
+ }
+
private Uri getJoinSuggestionsUri(String filter) {
Builder builder = Contacts.CONTENT_URI.buildUpon();
builder.appendEncodedPath(String.valueOf(mQueryAggregateId));
@@ -1714,25 +2355,49 @@
return builder.build();
}
- private static String getSortOrder(String[] projectionType) {
- /* if (Locale.getDefault().equals(Locale.JAPAN) &&
- projectionType == AGGREGATES_PRIMARY_PHONE_PROJECTION) {
- return SORT_STRING + " ASC";
+ private String getSortOrder(String[] projectionType) {
+ if (mSortOrder == ContactsContract.Preferences.SORT_ORDER_PRIMARY) {
+ return Contacts.SORT_KEY_PRIMARY;
} else {
- return NAME_COLUMN + " COLLATE LOCALIZED ASC";
- } */
-
- return NAME_COLUMN + " COLLATE LOCALIZED ASC";
+ return Contacts.SORT_KEY_ALTERNATIVE;
+ }
}
void startQuery() {
+ // Set the proper empty string
+ setEmptyText();
+
+ if (mSearchResultsMode) {
+ TextView foundContactsText = (TextView)findViewById(R.id.search_results_found);
+ foundContactsText.setText(R.string.search_results_searching);
+ }
+
mAdapter.setLoading(true);
// Cancel any pending queries
mQueryHandler.cancelOperation(QUERY_TOKEN);
mQueryHandler.setLoadingJoinSuggestions(false);
+ mSortOrder = mContactsPrefs.getSortOrder();
+ mDisplayOrder = mContactsPrefs.getDisplayOrder();
+
+ // When sort order and display order contradict each other, we want to
+ // highlight the part of the name used for sorting.
+ mHighlightWhenScrolling = false;
+ if (mSortOrder == ContactsContract.Preferences.SORT_ORDER_PRIMARY &&
+ mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_ALTERNATIVE) {
+ mHighlightWhenScrolling = true;
+ } else if (mSortOrder == ContactsContract.Preferences.SORT_ORDER_ALTERNATIVE &&
+ mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
+ mHighlightWhenScrolling = true;
+ }
+
String[] projection = getProjectionForQuery();
+ if (mSearchMode && TextUtils.isEmpty(getTextFilter())) {
+ mAdapter.changeCursor(new MatrixCursor(projection));
+ return;
+ }
+
String callingPackage = getCallingPackage();
Uri uri = getUriToQuery();
if (!TextUtils.isEmpty(callingPackage)) {
@@ -1745,35 +2410,27 @@
// Kick off the new query
switch (mMode) {
case MODE_GROUP:
- mQueryHandler.startQuery(QUERY_TOKEN, null,
- uri, projection, getContactSelection(), null,
- getSortOrder(projection));
- break;
-
case MODE_DEFAULT:
+ case MODE_CUSTOM:
case MODE_PICK_CONTACT:
case MODE_PICK_OR_CREATE_CONTACT:
case MODE_INSERT_OR_EDIT_CONTACT:
- mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
- projection, getContactSelection(), null,
- getSortOrder(projection));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri, projection, getContactSelection(),
+ null, getSortOrder(projection));
break;
case MODE_LEGACY_PICK_PERSON:
- case MODE_LEGACY_PICK_OR_CREATE_PERSON:
- mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
- projection, null, null,
- getSortOrder(projection));
- break;
-
- case MODE_QUERY: {
- mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
- projection, null, null,
- getSortOrder(projection));
+ case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri, projection, null, null,
+ People.DISPLAY_NAME);
break;
}
-
- case MODE_QUERY_PICK_TO_VIEW: {
+ case MODE_PICK_POSTAL:
+ case MODE_QUERY:
+ case MODE_QUERY_PICK:
+ case MODE_QUERY_PICK_PHONE:
+ case MODE_QUERY_PICK_TO_VIEW:
+ case MODE_QUERY_PICK_TO_EDIT: {
mQueryHandler.startQuery(QUERY_TOKEN, null, uri, projection, null, null,
getSortOrder(projection));
break;
@@ -1798,21 +2455,20 @@
break;
case MODE_PICK_PHONE:
- case MODE_LEGACY_PICK_PHONE:
mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
- projection, null, null, getSortOrder(projection));
+ projection, CLAUSE_ONLY_VISIBLE, null, getSortOrder(projection));
break;
- case MODE_PICK_POSTAL:
+ case MODE_LEGACY_PICK_PHONE:
mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
- projection, null, null, getSortOrder(projection));
+ projection, null, null, Phones.DISPLAY_NAME);
break;
case MODE_LEGACY_PICK_POSTAL:
mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
projection,
ContactMethods.KIND + "=" + android.provider.Contacts.KIND_POSTAL, null,
- getSortOrder(projection));
+ ContactMethods.DISPLAY_NAME);
break;
case MODE_JOIN_CONTACT:
@@ -1830,12 +2486,15 @@
* @return a cursor with the results of the filter
*/
Cursor doFilter(String filter) {
- final ContentResolver resolver = getContentResolver();
-
String[] projection = getProjectionForQuery();
+ if (mSearchMode && TextUtils.isEmpty(getTextFilter())) {
+ return new MatrixCursor(projection);
+ }
+ final ContentResolver resolver = getContentResolver();
switch (mMode) {
case MODE_DEFAULT:
+ case MODE_CUSTOM:
case MODE_PICK_CONTACT:
case MODE_PICK_OR_CREATE_CONTACT:
case MODE_INSERT_OR_EDIT_CONTACT: {
@@ -1846,7 +2505,7 @@
case MODE_LEGACY_PICK_PERSON:
case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
return resolver.query(getPeopleFilterUri(filter), projection, null, null,
- getSortOrder(projection));
+ People.DISPLAY_NAME);
}
case MODE_STARRED: {
@@ -1878,7 +2537,7 @@
if (!TextUtils.isEmpty(filter)) {
uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(filter));
}
- return resolver.query(uri, projection, null, null,
+ return resolver.query(uri, projection, CLAUSE_ONLY_VISIBLE, null,
getSortOrder(projection));
}
@@ -1937,53 +2596,75 @@
* @return true if the call was initiated, false otherwise
*/
boolean callOrSmsContact(Cursor cursor, boolean sendSms) {
- if (cursor != null) {
- boolean hasPhone = cursor.getInt(SUMMARY_HAS_PHONE_COLUMN_INDEX) != 0;
- if (!hasPhone) {
- // There is no phone number.
- signalError();
- return false;
- }
+ if (cursor == null) {
+ return false;
+ }
- String phone = null;
- Cursor phonesCursor = null;
- phonesCursor = queryPhoneNumbers(cursor.getLong(SUMMARY_ID_COLUMN_INDEX));
- if (phonesCursor == null || phonesCursor.getCount() == 0) {
- // No valid number
- signalError();
- return false;
- } else if (phonesCursor.getCount() == 1) {
- // only one number, call it.
- phone = phonesCursor.getString(phonesCursor.getColumnIndex(Phone.NUMBER));
- } else {
- phonesCursor.moveToPosition(-1);
- while (phonesCursor.moveToNext()) {
- if (phonesCursor.getInt(phonesCursor.
- getColumnIndex(Phone.IS_SUPER_PRIMARY)) != 0) {
- // Found super primary, call it.
- phone = phonesCursor.
- getString(phonesCursor.getColumnIndex(Phone.NUMBER));
- break;
- }
- }
- }
-
- if (phone == null) {
- // Display dialog to choose a number to call.
- PhoneDisambigDialog phoneDialog = new PhoneDisambigDialog(
- this, phonesCursor, sendSms);
- phoneDialog.show();
- } else {
+ switch (mMode) {
+ case MODE_PICK_PHONE:
+ case MODE_LEGACY_PICK_PHONE:
+ case MODE_QUERY_PICK_PHONE: {
+ String phone = cursor.getString(PHONE_NUMBER_COLUMN_INDEX);
if (sendSms) {
ContactsUtils.initiateSms(this, phone);
} else {
ContactsUtils.initiateCall(this, phone);
}
+ return true;
}
- return true;
- }
- return false;
+ case MODE_PICK_POSTAL:
+ case MODE_LEGACY_PICK_POSTAL: {
+ return false;
+ }
+
+ default: {
+
+ boolean hasPhone = cursor.getInt(SUMMARY_HAS_PHONE_COLUMN_INDEX) != 0;
+ if (!hasPhone) {
+ // There is no phone number.
+ signalError();
+ return false;
+ }
+
+ String phone = null;
+ Cursor phonesCursor = null;
+ phonesCursor = queryPhoneNumbers(cursor.getLong(SUMMARY_ID_COLUMN_INDEX));
+ if (phonesCursor == null || phonesCursor.getCount() == 0) {
+ // No valid number
+ signalError();
+ return false;
+ } else if (phonesCursor.getCount() == 1) {
+ // only one number, call it.
+ phone = phonesCursor.getString(phonesCursor.getColumnIndex(Phone.NUMBER));
+ } else {
+ phonesCursor.moveToPosition(-1);
+ while (phonesCursor.moveToNext()) {
+ if (phonesCursor.getInt(phonesCursor.
+ getColumnIndex(Phone.IS_SUPER_PRIMARY)) != 0) {
+ // Found super primary, call it.
+ phone = phonesCursor.
+ getString(phonesCursor.getColumnIndex(Phone.NUMBER));
+ break;
+ }
+ }
+ }
+
+ if (phone == null) {
+ // Display dialog to choose a number to call.
+ PhoneDisambigDialog phoneDialog = new PhoneDisambigDialog(
+ this, phonesCursor, sendSms);
+ phoneDialog.show();
+ } else {
+ if (sendSms) {
+ ContactsUtils.initiateSms(this, phone);
+ } else {
+ ContactsUtils.initiateCall(this, phone);
+ }
+ }
+ }
+ }
+ return true;
}
private Cursor queryPhoneNumbers(long contactId) {
@@ -1991,7 +2672,8 @@
Uri dataUri = Uri.withAppendedPath(baseUri, Contacts.Data.CONTENT_DIRECTORY);
Cursor c = getContentResolver().query(dataUri,
- new String[] {Phone._ID, Phone.NUMBER, Phone.IS_SUPER_PRIMARY},
+ new String[] {Phone._ID, Phone.NUMBER, Phone.IS_SUPER_PRIMARY,
+ RawContacts.ACCOUNT_TYPE, Phone.TYPE, Phone.LABEL},
Data.MIMETYPE + "=?", new String[] {Phone.CONTENT_ITEM_TYPE}, null);
if (c != null && c.moveToFirst()) {
return c;
@@ -1999,6 +2681,16 @@
return null;
}
+ // TODO: fix PluralRules to handle zero correctly and use Resources.getQuantityText directly
+ protected String getQuantityText(int count, int zeroResourceId, int pluralResourceId) {
+ if (count == 0) {
+ return getString(zeroResourceId);
+ } else {
+ String format = getResources().getQuantityText(pluralResourceId, count).toString();
+ return String.format(format, count);
+ }
+ }
+
/**
* Signal an error to the user.
*/
@@ -2047,109 +2739,83 @@
if (activity.mAdapter.mSuggestionsCursorCount == 0
|| !activity.mJoinModeShowAllContacts) {
startQuery(QUERY_TOKEN, null, activity.getContactFilterUri(
- activity.mQueryData),
+ activity.getTextFilter()),
CONTACTS_SUMMARY_PROJECTION,
Contacts._ID + " != " + activity.mQueryAggregateId
+ " AND " + CLAUSE_ONLY_VISIBLE, null,
- getSortOrder(CONTACTS_SUMMARY_PROJECTION));
+ activity.getSortOrder(CONTACTS_SUMMARY_PROJECTION));
return;
}
cursor = activity.getShowAllContactsLabelCursor(CONTACTS_SUMMARY_PROJECTION);
}
- activity.mAdapter.setLoading(false);
- activity.getListView().clearTextFilter();
activity.mAdapter.changeCursor(cursor);
// Now that the cursor is populated again, it's possible to restore the list state
if (activity.mListState != null) {
activity.mList.onRestoreInstanceState(activity.mListState);
- if (activity.mListHasFocus) {
- activity.mList.requestFocus();
- }
- activity.mListHasFocus = false;
activity.mListState = null;
}
} else {
- cursor.close();
+ if (cursor != null) {
+ cursor.close();
+ }
}
}
}
final static class ContactListItemCache {
- public View header;
- public TextView headerText;
- public View divider;
- public TextView nameView;
- public View callView;
- public ImageView callButton;
public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);
- public TextView labelView;
- public CharArrayBuffer labelBuffer = new CharArrayBuffer(128);
- public TextView dataView;
public CharArrayBuffer dataBuffer = new CharArrayBuffer(128);
- public ImageView presenceView;
- public QuickContactBadge photoView;
- public ImageView nonQuickContactPhotoView;
+ public CharArrayBuffer highlightedTextBuffer = new CharArrayBuffer(128);
+ public TextWithHighlighting textWithHighlighting;
+ public CharArrayBuffer phoneticNameBuffer = new CharArrayBuffer(128);
}
- final static class PhotoInfo {
- public int position;
- public long photoId;
-
- public PhotoInfo(int position, long photoId) {
- this.position = position;
- this.photoId = photoId;
- }
- public QuickContactBadge photoView;
+ final static class PinnedHeaderCache {
+ public TextView titleView;
+ public ColorStateList textColor;
+ public Drawable background;
}
- private final class ContactItemListAdapter extends ResourceCursorAdapter
- implements SectionIndexer, OnScrollListener {
+ private final class ContactItemListAdapter extends CursorAdapter
+ implements SectionIndexer, OnScrollListener, PinnedHeaderListView.PinnedHeaderAdapter {
private SectionIndexer mIndexer;
- private String mAlphabet;
private boolean mLoading = true;
private CharSequence mUnknownNameText;
private boolean mDisplayPhotos = false;
private boolean mDisplayCallButton = false;
private boolean mDisplayAdditionalData = true;
- private HashMap<Long, SoftReference<Bitmap>> mBitmapCache = null;
- private HashSet<ImageView> mItemsMissingImages = null;
private int mFrequentSeparatorPos = ListView.INVALID_POSITION;
private boolean mDisplaySectionHeaders = true;
- private int[] mSectionPositions;
private Cursor mSuggestionsCursor;
private int mSuggestionsCursorCount;
- private ImageFetchHandler mHandler;
- private ImageDbFetcher mImageFetcher;
- private static final int FETCH_IMAGE_MSG = 1;
public ContactItemListAdapter(Context context) {
- super(context, R.layout.contacts_list_item, null, false);
-
- mHandler = new ImageFetchHandler();
- mAlphabet = context.getString(com.android.internal.R.string.fast_scroll_alphabet);
+ super(context, null, false);
mUnknownNameText = context.getText(android.R.string.unknownName);
switch (mMode) {
case MODE_LEGACY_PICK_POSTAL:
case MODE_PICK_POSTAL:
- mDisplaySectionHeaders = false;
- break;
case MODE_LEGACY_PICK_PHONE:
case MODE_PICK_PHONE:
+ case MODE_STREQUENT:
+ case MODE_FREQUENT:
mDisplaySectionHeaders = false;
break;
- default:
- break;
+ }
+
+ if (mSearchMode) {
+ mDisplaySectionHeaders = false;
}
// Do not display the second line of text if in a specific SEARCH query mode, usually for
// matching a specific E-mail or phone number. Any contact details
// shown would be identical, and columns might not even be present
// in the returned cursor.
- if (mQueryMode != QUERY_MODE_NONE) {
+ if (mMode != MODE_QUERY_PICK_PHONE && mQueryMode != QUERY_MODE_NONE) {
mDisplayAdditionalData = false;
}
@@ -2163,112 +2829,11 @@
if ((mMode & MODE_MASK_SHOW_PHOTOS) == MODE_MASK_SHOW_PHOTOS) {
mDisplayPhotos = true;
- setViewResource(R.layout.contacts_list_item_photo);
- mBitmapCache = new HashMap<Long, SoftReference<Bitmap>>();
- mItemsMissingImages = new HashSet<ImageView>();
- }
-
- if (mMode == MODE_STREQUENT || mMode == MODE_FREQUENT) {
- mDisplaySectionHeaders = false;
}
}
- private class ImageFetchHandler extends Handler {
-
- @Override
- public void handleMessage(Message message) {
- if (ContactsListActivity.this.isFinishing()) {
- return;
- }
- switch(message.what) {
- case FETCH_IMAGE_MSG: {
- final ImageView imageView = (ImageView) message.obj;
- if (imageView == null) {
- break;
- }
-
- final PhotoInfo info = (PhotoInfo)imageView.getTag();
- if (info == null) {
- break;
- }
-
- final long photoId = info.photoId;
- if (photoId == 0) {
- break;
- }
-
- SoftReference<Bitmap> photoRef = mBitmapCache.get(photoId);
- if (photoRef == null) {
- break;
- }
- Bitmap photo = photoRef.get();
- if (photo == null) {
- mBitmapCache.remove(photoId);
- break;
- }
-
- // Make sure the photoId on this image view has not changed
- // while we were loading the image.
- synchronized (imageView) {
- final PhotoInfo updatedInfo = (PhotoInfo)imageView.getTag();
- long currentPhotoId = updatedInfo.photoId;
- if (currentPhotoId == photoId) {
- imageView.setImageBitmap(photo);
- mItemsMissingImages.remove(imageView);
- }
- }
- break;
- }
- }
- }
-
- public void clearImageFecthing() {
- removeMessages(FETCH_IMAGE_MSG);
- }
- }
-
- private class ImageDbFetcher implements Runnable {
- long mPhotoId;
- private ImageView mImageView;
-
- public ImageDbFetcher(long photoId, ImageView imageView) {
- this.mPhotoId = photoId;
- this.mImageView = imageView;
- }
-
- public void run() {
- if (ContactsListActivity.this.isFinishing()) {
- return;
- }
-
- if (Thread.interrupted()) {
- // shutdown has been called.
- return;
- }
- Bitmap photo = null;
- try {
- photo = ContactsUtils.loadContactPhoto(mContext, mPhotoId, null);
- } catch (OutOfMemoryError e) {
- // Not enough memory for the photo, do nothing.
- }
-
- if (photo == null) {
- return;
- }
-
- mBitmapCache.put(mPhotoId, new SoftReference<Bitmap>(photo));
-
- if (Thread.interrupted()) {
- // shutdown has been called.
- return;
- }
-
- // Update must happen on UI thread
- Message msg = new Message();
- msg.what = FETCH_IMAGE_MSG;
- msg.obj = mImageView;
- mHandler.sendMessage(msg);
- }
+ public boolean getDisplaySectionHeadersEnabled() {
+ return mDisplaySectionHeaders;
}
public void setSuggestionsCursor(Cursor cursor) {
@@ -2279,14 +2844,6 @@
mSuggestionsCursorCount = cursor == null ? 0 : cursor.getCount();
}
- private SectionIndexer getNewIndexer(Cursor cursor) {
- /* if (Locale.getDefault().getLanguage().equals(Locale.JAPAN.getLanguage())) {
- return new JapaneseContactListIndexer(cursor, SORT_STRING_INDEX);
- } else { */
- return new AlphabetIndexer(cursor, SUMMARY_NAME_COLUMN_INDEX, mAlphabet);
- /* } */
- }
-
/**
* Callback on the UI thread when the content observer on the backing cursor fires.
* Instead of calling requery we need to do an async query so that the requery doesn't
@@ -2294,7 +2851,7 @@
*/
@Override
protected void onContentChanged() {
- CharSequence constraint = getListView().getTextFilter();
+ CharSequence constraint = getTextFilter();
if (!TextUtils.isEmpty(constraint)) {
// Reset the filter state then start an async filter operation
Filter filter = getFilter();
@@ -2311,12 +2868,18 @@
@Override
public boolean isEmpty() {
- if ((mMode & MODE_MASK_CREATE_NEW) == MODE_MASK_CREATE_NEW) {
+ if (mProviderStatus != ProviderStatus.STATUS_NORMAL) {
+ return true;
+ }
+
+ if (mSearchMode) {
+ return TextUtils.isEmpty(getTextFilter());
+ } else if ((mMode & MODE_MASK_CREATE_NEW) == MODE_MASK_CREATE_NEW) {
// This mode mask adds a header and we always want it to show up, even
// if the list is empty, so always claim the list is not empty.
return false;
} else {
- if (mLoading) {
+ if (mCursor == null || mLoading) {
// We don't want the empty state to show when loading.
return false;
} else {
@@ -2327,16 +2890,23 @@
@Override
public int getItemViewType(int position) {
- if (position == 0 && (mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+ if (position == 0 && (mShowNumberOfContacts || (mMode & MODE_MASK_CREATE_NEW) != 0)) {
return IGNORE_ITEM_VIEW_TYPE;
}
+
if (isShowAllContactsItemPosition(position)) {
return IGNORE_ITEM_VIEW_TYPE;
}
+
+ if (isSearchAllContactsItemPosition(position)) {
+ return IGNORE_ITEM_VIEW_TYPE;
+ }
+
if (getSeparatorId(position) != 0) {
// We don't want the separator view to be recycled.
return IGNORE_ITEM_VIEW_TYPE;
}
+
return super.getItemViewType(position);
}
@@ -2348,22 +2918,30 @@
}
// handle the total contacts item
- if (position == 0 && (mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+ if (position == 0 && mShowNumberOfContacts) {
return getTotalContactCountView(parent);
}
+ if (position == 0 && (mMode & MODE_MASK_CREATE_NEW) != 0) {
+ // Add the header for creating a new contact
+ return getLayoutInflater().inflate(R.layout.create_new_contact, parent, false);
+ }
+
if (isShowAllContactsItemPosition(position)) {
- LayoutInflater inflater =
- (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- return inflater.inflate(R.layout.contacts_list_show_all_item, parent, false);
+ return getLayoutInflater().
+ inflate(R.layout.contacts_list_show_all_item, parent, false);
+ }
+
+ if (isSearchAllContactsItemPosition(position)) {
+ return getLayoutInflater().
+ inflate(R.layout.contacts_list_search_all_item, parent, false);
}
// Handle the separator specially
int separatorId = getSeparatorId(position);
if (separatorId != 0) {
- LayoutInflater inflater =
- (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- TextView view = (TextView) inflater.inflate(R.layout.list_separator, parent, false);
+ TextView view = (TextView) getLayoutInflater().
+ inflate(R.layout.list_separator, parent, false);
view.setText(separatorId);
return view;
}
@@ -2383,10 +2961,13 @@
throw new IllegalStateException("couldn't move cursor to position " + position);
}
+ boolean newView;
View v;
- if (convertView == null) {
+ if (convertView == null || convertView.getTag() == null) {
+ newView = true;
v = newView(mContext, cursor, parent);
} else {
+ newView = false;
v = convertView;
}
bindView(v, mContext, cursor);
@@ -2396,15 +2977,16 @@
private View getTotalContactCountView(ViewGroup parent) {
final LayoutInflater inflater = getLayoutInflater();
- TextView totalContacts = (TextView) inflater.inflate(R.layout.total_contacts,
- parent, false);
+ View view = inflater.inflate(R.layout.total_contacts, parent, false);
+
+ TextView totalContacts = (TextView) view.findViewById(R.id.totalContactsText);
String text;
int count = getRealCount();
- if (mMode == MODE_QUERY || !TextUtils.isEmpty(getListView().getTextFilter())) {
+ if (mSearchMode && !TextUtils.isEmpty(getTextFilter())) {
text = getQuantityText(count, R.string.listFoundAllContactsZero,
- R.plurals.listFoundAllContacts);
+ R.plurals.searchFoundContacts);
} else {
if (mDisplayOnlyPhones) {
text = getQuantityText(count, R.string.listTotalPhoneContactsZero,
@@ -2415,17 +2997,7 @@
}
}
totalContacts.setText(text);
- return totalContacts;
- }
-
- // TODO: fix PluralRules to handle zero correctly and use Resources.getQuantityText directly
- private String getQuantityText(int count, int zeroResourceId, int pluralResourceId) {
- if (count == 0) {
- return getString(zeroResourceId);
- } else {
- String format = getResources().getQuantityText(pluralResourceId, count).toString();
- return String.format(format, count);
- }
+ return view;
}
private boolean isShowAllContactsItemPosition(int position) {
@@ -2433,6 +3005,10 @@
&& mSuggestionsCursorCount != 0 && position == mSuggestionsCursorCount + 2;
}
+ private boolean isSearchAllContactsItemPosition(int position) {
+ return mSearchMode && position == getCount() - 1;
+ }
+
private int getSeparatorId(int position) {
int separatorId = 0;
if (position == mFrequentSeparatorPos) {
@@ -2450,44 +3026,31 @@
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
- final View view = super.newView(context, cursor, parent);
-
- final ContactListItemCache cache = new ContactListItemCache();
- cache.header = view.findViewById(R.id.header);
- cache.headerText = (TextView)view.findViewById(R.id.header_text);
- cache.divider = view.findViewById(R.id.list_divider);
- cache.nameView = (TextView) view.findViewById(R.id.name);
- cache.callView = view.findViewById(R.id.call_view);
- cache.callButton = (ImageView) view.findViewById(R.id.call_button);
- if (cache.callButton != null) {
- cache.callButton.setOnClickListener(ContactsListActivity.this);
- }
- cache.labelView = (TextView) view.findViewById(R.id.label);
- cache.dataView = (TextView) view.findViewById(R.id.data);
- cache.presenceView = (ImageView) view.findViewById(R.id.presence);
- cache.photoView = (QuickContactBadge) view.findViewById(R.id.photo);
- cache.nonQuickContactPhotoView = (ImageView) view.findViewById(R.id.noQuickContactPhoto);
- view.setTag(cache);
-
+ final ContactListItemView view = new ContactListItemView(context, null);
+ view.setOnCallButtonClickListener(ContactsListActivity.this);
+ view.setTag(new ContactListItemCache());
return view;
}
@Override
- public void bindView(View view, Context context, Cursor cursor) {
+ public void bindView(View itemView, Context context, Cursor cursor) {
+ final ContactListItemView view = (ContactListItemView)itemView;
final ContactListItemCache cache = (ContactListItemCache) view.getTag();
- TextView dataView = cache.dataView;
- TextView labelView = cache.labelView;
int typeColumnIndex;
int dataColumnIndex;
int labelColumnIndex;
int defaultType;
int nameColumnIndex;
+ int phoneticNameColumnIndex;
boolean displayAdditionalData = mDisplayAdditionalData;
+ boolean highlightingEnabled = false;
switch(mMode) {
case MODE_PICK_PHONE:
- case MODE_LEGACY_PICK_PHONE: {
+ case MODE_LEGACY_PICK_PHONE:
+ case MODE_QUERY_PICK_PHONE: {
nameColumnIndex = PHONE_DISPLAY_NAME_COLUMN_INDEX;
+ phoneticNameColumnIndex = -1;
dataColumnIndex = PHONE_NUMBER_COLUMN_INDEX;
typeColumnIndex = PHONE_TYPE_COLUMN_INDEX;
labelColumnIndex = PHONE_LABEL_COLUMN_INDEX;
@@ -2497,6 +3060,7 @@
case MODE_PICK_POSTAL:
case MODE_LEGACY_PICK_POSTAL: {
nameColumnIndex = POSTAL_DISPLAY_NAME_COLUMN_INDEX;
+ phoneticNameColumnIndex = -1;
dataColumnIndex = POSTAL_ADDRESS_COLUMN_INDEX;
typeColumnIndex = POSTAL_TYPE_COLUMN_INDEX;
labelColumnIndex = POSTAL_LABEL_COLUMN_INDEX;
@@ -2504,31 +3068,50 @@
break;
}
default: {
- nameColumnIndex = SUMMARY_NAME_COLUMN_INDEX;
+ nameColumnIndex = getSummaryDisplayNameColumnIndex();
+ if (mMode == MODE_LEGACY_PICK_PERSON
+ || mMode == MODE_LEGACY_PICK_OR_CREATE_PERSON) {
+ phoneticNameColumnIndex = -1;
+ } else {
+ phoneticNameColumnIndex = SUMMARY_PHONETIC_NAME_COLUMN_INDEX;
+ }
dataColumnIndex = -1;
typeColumnIndex = -1;
labelColumnIndex = -1;
defaultType = Phone.TYPE_HOME;
displayAdditionalData = false;
+ highlightingEnabled = mHighlightWhenScrolling && mMode != MODE_STREQUENT;
}
}
// Set the name
cursor.copyStringToBuffer(nameColumnIndex, cache.nameBuffer);
+ TextView nameView = view.getNameTextView();
int size = cache.nameBuffer.sizeCopied;
if (size != 0) {
- cache.nameView.setText(cache.nameBuffer.data, 0, size);
+ if (highlightingEnabled) {
+ if (cache.textWithHighlighting == null) {
+ cache.textWithHighlighting =
+ mHighlightingAnimation.createTextWithHighlighting();
+ }
+ buildDisplayNameWithHighlighting(nameView, cursor, cache.nameBuffer,
+ cache.highlightedTextBuffer, cache.textWithHighlighting);
+ } else {
+ nameView.setText(cache.nameBuffer.data, 0, size);
+ }
} else {
- cache.nameView.setText(mUnknownNameText);
+ nameView.setText(mUnknownNameText);
}
+ boolean hasPhone = cursor.getColumnCount() >= SUMMARY_HAS_PHONE_COLUMN_INDEX
+ && cursor.getInt(SUMMARY_HAS_PHONE_COLUMN_INDEX) != 0;
+
// Make the call button visible if requested.
- if (mDisplayCallButton) {
+ if (mDisplayCallButton && hasPhone) {
int pos = cursor.getPosition();
- cache.callView.setVisibility(View.VISIBLE);
- cache.callButton.setTag(pos);
+ view.showCallButton(android.R.id.button1, pos);
} else {
- cache.callView.setVisibility(View.GONE);
+ view.hideCallButton();
}
// Set the photo, if requested
@@ -2542,76 +3125,88 @@
ImageView viewToUse;
if (useQuickContact) {
- viewToUse = cache.photoView;
// Build soft lookup reference
final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);
- final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);
- cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey));
- cache.photoView.setVisibility(View.VISIBLE);
- cache.nonQuickContactPhotoView.setVisibility(View.INVISIBLE);
+ final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY_COLUMN_INDEX);
+ QuickContactBadge quickContact = view.getQuickContact();
+ quickContact.assignContactUri(Contacts.getLookupUri(contactId, lookupKey));
+ viewToUse = quickContact;
} else {
- viewToUse = cache.nonQuickContactPhotoView;
- cache.photoView.setVisibility(View.INVISIBLE);
- cache.nonQuickContactPhotoView.setVisibility(View.VISIBLE);
+ viewToUse = view.getPhotoView();
}
-
final int position = cursor.getPosition();
- viewToUse.setTag(new PhotoInfo(position, photoId));
-
- if (photoId == 0) {
- viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
- } else {
-
- Bitmap photo = null;
-
- // Look for the cached bitmap
- SoftReference<Bitmap> ref = mBitmapCache.get(photoId);
- if (ref != null) {
- photo = ref.get();
- if (photo == null) {
- mBitmapCache.remove(photoId);
- }
- }
-
- // Bind the photo, or use the fallback no photo resource
- if (photo != null) {
- viewToUse.setImageBitmap(photo);
- } else {
- // Cache miss
- viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
-
- // Add it to a set of images that are populated asynchronously.
- mItemsMissingImages.add(viewToUse);
-
- if (mScrollState != OnScrollListener.SCROLL_STATE_FLING) {
-
- // Scrolling is idle or slow, go get the image right now.
- sendFetchImageMessage(viewToUse);
- }
- }
- }
+ mPhotoLoader.loadPhoto(viewToUse, photoId);
}
- ImageView presenceView = cache.presenceView;
if ((mMode & MODE_MASK_NO_PRESENCE) == 0) {
// Set the proper icon (star or presence or nothing)
int serverStatus;
if (!cursor.isNull(SUMMARY_PRESENCE_STATUS_COLUMN_INDEX)) {
serverStatus = cursor.getInt(SUMMARY_PRESENCE_STATUS_COLUMN_INDEX);
- presenceView.setImageResource(
- Presence.getPresenceIconResourceId(serverStatus));
- presenceView.setVisibility(View.VISIBLE);
+ Drawable icon = ContactPresenceIconUtil.getPresenceIcon(mContext, serverStatus);
+ if (icon != null) {
+ view.setPresence(icon);
+ } else {
+ view.setPresence(null);
+ }
} else {
- presenceView.setVisibility(View.GONE);
+ view.setPresence(null);
}
} else {
- presenceView.setVisibility(View.GONE);
+ view.setPresence(null);
+ }
+
+ if (mShowSearchSnippets) {
+ boolean showSnippet = false;
+ String snippetMimeType = cursor.getString(SUMMARY_SNIPPET_MIMETYPE_COLUMN_INDEX);
+ if (Email.CONTENT_ITEM_TYPE.equals(snippetMimeType)) {
+ String email = cursor.getString(SUMMARY_SNIPPET_DATA1_COLUMN_INDEX);
+ if (!TextUtils.isEmpty(email)) {
+ view.setSnippet(email);
+ showSnippet = true;
+ }
+ } else if (Organization.CONTENT_ITEM_TYPE.equals(snippetMimeType)) {
+ String company = cursor.getString(SUMMARY_SNIPPET_DATA1_COLUMN_INDEX);
+ String title = cursor.getString(SUMMARY_SNIPPET_DATA4_COLUMN_INDEX);
+ if (!TextUtils.isEmpty(company)) {
+ if (!TextUtils.isEmpty(title)) {
+ view.setSnippet(company + " / " + title);
+ } else {
+ view.setSnippet(company);
+ }
+ showSnippet = true;
+ } else if (!TextUtils.isEmpty(title)) {
+ view.setSnippet(title);
+ showSnippet = true;
+ }
+ } else if (Nickname.CONTENT_ITEM_TYPE.equals(snippetMimeType)) {
+ String nickname = cursor.getString(SUMMARY_SNIPPET_DATA1_COLUMN_INDEX);
+ if (!TextUtils.isEmpty(nickname)) {
+ view.setSnippet(nickname);
+ showSnippet = true;
+ }
+ }
+
+ if (!showSnippet) {
+ view.setSnippet(null);
+ }
}
if (!displayAdditionalData) {
- cache.dataView.setVisibility(View.GONE);
- cache.labelView.setVisibility(View.GONE);
+ if (phoneticNameColumnIndex != -1) {
+
+ // Set the name
+ cursor.copyStringToBuffer(phoneticNameColumnIndex, cache.phoneticNameBuffer);
+ int phoneticNameSize = cache.phoneticNameBuffer.sizeCopied;
+ if (phoneticNameSize != 0) {
+ view.setLabel(cache.phoneticNameBuffer.data, phoneticNameSize);
+ } else {
+ view.setLabel(null);
+ }
+ } else {
+ view.setLabel(null);
+ }
return;
}
@@ -2619,62 +3214,75 @@
cursor.copyStringToBuffer(dataColumnIndex, cache.dataBuffer);
size = cache.dataBuffer.sizeCopied;
- if (size != 0) {
- dataView.setText(cache.dataBuffer.data, 0, size);
- dataView.setVisibility(View.VISIBLE);
- } else {
- dataView.setVisibility(View.GONE);
- }
+ view.setData(cache.dataBuffer.data, size);
// Set the label.
if (!cursor.isNull(typeColumnIndex)) {
- labelView.setVisibility(View.VISIBLE);
-
final int type = cursor.getInt(typeColumnIndex);
final String label = cursor.getString(labelColumnIndex);
if (mMode == MODE_LEGACY_PICK_POSTAL || mMode == MODE_PICK_POSTAL) {
- labelView.setText(StructuredPostal.getTypeLabel(context.getResources(), type,
+ // TODO cache
+ view.setLabel(StructuredPostal.getTypeLabel(context.getResources(), type,
label));
} else {
- labelView.setText(Phone.getTypeLabel(context.getResources(), type, label));
+ // TODO cache
+ view.setLabel(Phone.getTypeLabel(context.getResources(), type, label));
}
} else {
- // There is no label, hide the the view
- labelView.setVisibility(View.GONE);
+ view.setLabel(null);
}
}
- private void bindSectionHeader(View view, int position, boolean displaySectionHeaders) {
+ /**
+ * Computes the span of the display name that has highlighted parts and configures
+ * the display name text view accordingly.
+ */
+ private void buildDisplayNameWithHighlighting(TextView textView, Cursor cursor,
+ CharArrayBuffer buffer1, CharArrayBuffer buffer2,
+ TextWithHighlighting textWithHighlighting) {
+ int oppositeDisplayOrderColumnIndex;
+ if (mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
+ oppositeDisplayOrderColumnIndex = SUMMARY_DISPLAY_NAME_ALTERNATIVE_COLUMN_INDEX;
+ } else {
+ oppositeDisplayOrderColumnIndex = SUMMARY_DISPLAY_NAME_PRIMARY_COLUMN_INDEX;
+ }
+ cursor.copyStringToBuffer(oppositeDisplayOrderColumnIndex, buffer2);
+
+ textWithHighlighting.setText(buffer1, buffer2);
+ textView.setText(textWithHighlighting);
+ }
+
+ private void bindSectionHeader(View itemView, int position, boolean displaySectionHeaders) {
+ final ContactListItemView view = (ContactListItemView)itemView;
final ContactListItemCache cache = (ContactListItemCache) view.getTag();
if (!displaySectionHeaders) {
- cache.header.setVisibility(View.GONE);
- cache.divider.setVisibility(View.VISIBLE);
+ view.setSectionHeader(null);
+ view.setDividerVisible(true);
} else {
final int section = getSectionForPosition(position);
if (getPositionForSection(section) == position) {
- String title = mIndexer.getSections()[section].toString().trim();
- if (!TextUtils.isEmpty(title)) {
- cache.headerText.setText(title);
- cache.header.setVisibility(View.VISIBLE);
- } else {
- cache.header.setVisibility(View.GONE);
- }
+ String title = (String)mIndexer.getSections()[section];
+ view.setSectionHeader(title);
} else {
- cache.header.setVisibility(View.GONE);
+ view.setDividerVisible(false);
+ view.setSectionHeader(null);
}
// move the divider for the last item in a section
if (getPositionForSection(section + 1) - 1 == position) {
- cache.divider.setVisibility(View.GONE);
+ view.setDividerVisible(false);
} else {
- cache.divider.setVisibility(View.VISIBLE);
+ view.setDividerVisible(true);
}
}
}
@Override
public void changeCursor(Cursor cursor) {
+ if (cursor != null) {
+ setLoading(false);
+ }
// Get the split between starred and frequent items, if the mode is strequent
mFrequentSeparatorPos = ListView.INVALID_POSITION;
@@ -2694,36 +3302,32 @@
}
}
+ if (cursor != null && mSearchResultsMode) {
+ TextView foundContactsText = (TextView)findViewById(R.id.search_results_found);
+ String text = getQuantityText(cursor.getCount(), R.string.listFoundAllContactsZero,
+ R.plurals.listFoundAllContacts);
+ foundContactsText.setText(text);
+ }
+
super.changeCursor(cursor);
// Update the indexer for the fast scroll widget
updateIndexer(cursor);
}
private void updateIndexer(Cursor cursor) {
- if (mIndexer == null) {
- mIndexer = getNewIndexer(cursor);
- } else {
- if (Locale.getDefault().equals(Locale.JAPAN)) {
- if (mIndexer instanceof JapaneseContactListIndexer) {
- ((JapaneseContactListIndexer)mIndexer).setCursor(cursor);
- } else {
- mIndexer = getNewIndexer(cursor);
- }
- } else {
- if (mIndexer instanceof AlphabetIndexer) {
- ((AlphabetIndexer)mIndexer).setCursor(cursor);
- } else {
- mIndexer = getNewIndexer(cursor);
- }
- }
+ if (cursor == null) {
+ mIndexer = null;
+ return;
}
- int sectionCount = mIndexer.getSections().length;
- if (mSectionPositions == null || mSectionPositions.length != sectionCount) {
- mSectionPositions = new int[sectionCount];
- }
- for (int i = 0; i < sectionCount; i++) {
- mSectionPositions[i] = ListView.INVALID_POSITION;
+ Bundle bundle = cursor.getExtras();
+ if (bundle.containsKey(ContactCounts.EXTRA_ADDRESS_BOOK_INDEX_TITLES)) {
+ String sections[] =
+ bundle.getStringArray(ContactCounts.EXTRA_ADDRESS_BOOK_INDEX_TITLES);
+ int counts[] = bundle.getIntArray(ContactCounts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
+ mIndexer = new ContactsSectionIndexer(sections, counts);
+ } else {
+ mIndexer = null;
}
}
@@ -2737,7 +3341,7 @@
}
public Object [] getSections() {
- if (mMode == MODE_STARRED) {
+ if (mIndexer == null) {
return new String[] { " " };
} else {
return mIndexer.getSections();
@@ -2745,70 +3349,31 @@
}
public int getPositionForSection(int sectionIndex) {
- if (mMode == MODE_STARRED) {
- return -1;
- }
-
- if (sectionIndex < 0 || sectionIndex >= mSectionPositions.length) {
- return -1;
- }
-
if (mIndexer == null) {
- Cursor cursor = mAdapter.getCursor();
- if (cursor == null) {
- // No cursor, the section doesn't exist so just return 0
- return 0;
- }
- mIndexer = getNewIndexer(cursor);
+ return -1;
}
- int position = mSectionPositions[sectionIndex];
- if (position == ListView.INVALID_POSITION) {
- position = mSectionPositions[sectionIndex] =
- mIndexer.getPositionForSection(sectionIndex);
- }
-
- return position;
+ return mIndexer.getPositionForSection(sectionIndex);
}
public int getSectionForPosition(int position) {
- // The current implementations of SectionIndexers (specifically the Japanese indexer)
- // only work in one direction: given a section they can calculate the position.
- // Here we are using that existing functionality to do the reverse mapping. We are
- // performing binary search in the mSectionPositions array, which itself is populated
- // lazily using the "forward" mapping supported by the indexer.
-
- int start = 0;
- int end = mSectionPositions.length;
- while (start != end) {
-
- // We are making the binary search slightly asymmetrical, because the
- // user is more likely to be scrolling the list from the top down.
- int pivot = start + (end - start) / 4;
-
- int value = getPositionForSection(pivot);
- if (value <= position) {
- start = pivot + 1;
- } else {
- end = pivot;
- }
+ if (mIndexer == null) {
+ return -1;
}
- // The variable "start" cannot be 0, as long as the indexer is implemented properly
- // and actually maps position = 0 to section = 0
- return start - 1;
+ return mIndexer.getSectionForPosition(position);
}
@Override
public boolean areAllItemsEnabled() {
return mMode != MODE_STARRED
- && (mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) == 0
+ && !mShowNumberOfContacts
&& mSuggestionsCursorCount == 0;
}
@Override
public boolean isEnabled(int position) {
- if ((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+ if (mShowNumberOfContacts) {
if (position == 0) {
return false;
}
@@ -2827,11 +3392,24 @@
return 0;
}
int superCount = super.getCount();
- if ((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0 && superCount > 0) {
+
+ if (mShowNumberOfContacts && (mSearchMode || superCount > 0)) {
// We don't want to count this header if it's the only thing visible, so that
// the empty text will display.
superCount++;
}
+
+ if (mSearchMode) {
+ // Last element in the list is the "Find
+ superCount++;
+ }
+
+ // We do not show the "Create New" button in Search mode
+ if ((mMode & MODE_MASK_CREATE_NEW) != 0 && !mSearchMode) {
+ // Count the "Create new contact" line
+ superCount++;
+ }
+
if (mSuggestionsCursorCount != 0) {
// When showing suggestions, we have 2 additional list items: the "Suggestions"
// and "All contacts" headers.
@@ -2853,10 +3431,13 @@
}
private int getRealPosition(int pos) {
- if ((mMode & MODE_MASK_SHOW_NUMBER_OF_CONTACTS) != 0) {
+ if (mShowNumberOfContacts) {
pos--;
}
- if (mSuggestionsCursorCount != 0) {
+
+ if ((mMode & MODE_MASK_CREATE_NEW) != 0 && !mSearchMode) {
+ return pos - 1;
+ } else if (mSuggestionsCursorCount != 0) {
// When showing suggestions, we have 2 additional list items: the "Suggestions"
// and "All contacts" separators.
if (pos < mSuggestionsCursorCount + 2) {
@@ -2885,8 +3466,14 @@
if (mSuggestionsCursorCount != 0 && pos <= mSuggestionsCursorCount) {
mSuggestionsCursor.moveToPosition(getRealPosition(pos));
return mSuggestionsCursor;
+ } else if (isSearchAllContactsItemPosition(pos)){
+ return null;
} else {
- return super.getItem(getRealPosition(pos));
+ int realPosition = getRealPosition(pos);
+ if (realPosition < 0) {
+ return null;
+ }
+ return super.getItem(realPosition);
}
}
@@ -2898,69 +3485,101 @@
} else {
return 0;
}
+ } else if (isSearchAllContactsItemPosition(pos)) {
+ return 0;
}
- return super.getItemId(getRealPosition(pos));
+ int realPosition = getRealPosition(pos);
+ if (realPosition < 0) {
+ return 0;
+ }
+ return super.getItemId(realPosition);
}
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
- // no op
+ if (view instanceof PinnedHeaderListView) {
+ ((PinnedHeaderListView)view).configureHeaderView(firstVisibleItem);
+ }
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
- mScrollState = scrollState;
- if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
- // If we are in a fling, stop loading images.
- clearImageFetching();
- } else if (mDisplayPhotos) {
- processMissingImageItems(view);
- }
- }
-
- private void processMissingImageItems(AbsListView view) {
- for (ImageView iv : mItemsMissingImages) {
- sendFetchImageMessage(iv);
- }
- }
-
- private void sendFetchImageMessage(ImageView view) {
- final PhotoInfo info = (PhotoInfo) view.getTag();
- if (info == null) {
- return;
- }
- final long photoId = info.photoId;
- if (photoId == 0) {
- return;
- }
- mImageFetcher = new ImageDbFetcher(photoId, view);
- synchronized (ContactsListActivity.this) {
- // can't sync on sImageFetchThreadPool.
- if (sImageFetchThreadPool == null) {
- // Don't use more than 3 threads at a time to update. The thread pool will be
- // shared by all contact items.
- sImageFetchThreadPool = Executors.newFixedThreadPool(3);
+ if (mHighlightWhenScrolling) {
+ if (scrollState != OnScrollListener.SCROLL_STATE_IDLE) {
+ mHighlightingAnimation.startHighlighting();
+ } else {
+ mHighlightingAnimation.stopHighlighting();
}
- sImageFetchThreadPool.execute(mImageFetcher);
+ }
+
+ if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
+ mPhotoLoader.pause();
+ } else if (mDisplayPhotos) {
+ mPhotoLoader.resume();
}
}
-
/**
- * Stop the image fetching for ALL contacts, if one is in progress we'll
- * not query the database.
- *
- * TODO: move this method to ContactsListActivity, it does not apply to the current
- * contact.
+ * Computes the state of the pinned header. It can be invisible, fully
+ * visible or partially pushed up out of the view.
*/
- public void clearImageFetching() {
- synchronized (ContactsListActivity.this) {
- if (sImageFetchThreadPool != null) {
- sImageFetchThreadPool.shutdownNow();
- sImageFetchThreadPool = null;
- }
+ public int getPinnedHeaderState(int position) {
+ if (mIndexer == null || mCursor == null || mCursor.getCount() == 0) {
+ return PINNED_HEADER_GONE;
}
- mHandler.clearImageFecthing();
+ int realPosition = getRealPosition(position);
+ if (realPosition < 0) {
+ return PINNED_HEADER_GONE;
+ }
+
+ // The header should get pushed up if the top item shown
+ // is the last item in a section for a particular letter.
+ int section = getSectionForPosition(realPosition);
+ int nextSectionPosition = getPositionForSection(section + 1);
+ if (nextSectionPosition != -1 && realPosition == nextSectionPosition - 1) {
+ return PINNED_HEADER_PUSHED_UP;
+ }
+
+ return PINNED_HEADER_VISIBLE;
+ }
+
+ /**
+ * Configures the pinned header by setting the appropriate text label
+ * and also adjusting color if necessary. The color needs to be
+ * adjusted when the pinned header is being pushed up from the view.
+ */
+ public void configurePinnedHeader(View header, int position, int alpha) {
+ PinnedHeaderCache cache = (PinnedHeaderCache)header.getTag();
+ if (cache == null) {
+ cache = new PinnedHeaderCache();
+ cache.titleView = (TextView)header.findViewById(R.id.header_text);
+ cache.textColor = cache.titleView.getTextColors();
+ cache.background = header.getBackground();
+ header.setTag(cache);
+ }
+
+ int realPosition = getRealPosition(position);
+ int section = getSectionForPosition(realPosition);
+
+ String title = (String)mIndexer.getSections()[section];
+ cache.titleView.setText(title);
+
+ if (alpha == 255) {
+ // Opaque: use the default background, and the original text color
+ header.setBackgroundDrawable(cache.background);
+ cache.titleView.setTextColor(cache.textColor);
+ } else {
+ // Faded: use a solid color approximation of the background, and
+ // a translucent text color
+ header.setBackgroundColor(Color.rgb(
+ Color.red(mPinnedHeaderBackgroundColor) * alpha / 255,
+ Color.green(mPinnedHeaderBackgroundColor) * alpha / 255,
+ Color.blue(mPinnedHeaderBackgroundColor) * alpha / 255));
+
+ int textColor = cache.textColor.getDefaultColor();
+ cache.titleView.setTextColor(Color.argb(alpha,
+ Color.red(textColor), Color.green(textColor), Color.blue(textColor)));
+ }
}
}
}
diff --git a/src/com/android/contacts/ContactsSearchManager.java b/src/com/android/contacts/ContactsSearchManager.java
new file mode 100644
index 0000000..d65e079
--- /dev/null
+++ b/src/com/android/contacts/ContactsSearchManager.java
@@ -0,0 +1,69 @@
+/*
+ * 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.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Intents.UI;
+
+/**
+ * A convenience class that helps launch contact search from within the app.
+ */
+public class ContactsSearchManager {
+
+ /**
+ * An extra that provides context for search UI and defines the scope for
+ * the search queries.
+ */
+ public static final String ORIGINAL_ACTION_EXTRA_KEY = "originalAction";
+
+ /**
+ * An extra that provides context for search UI and defines the scope for
+ * the search queries.
+ */
+ public static final String ORIGINAL_COMPONENT_EXTRA_KEY = "originalComponent";
+
+ /**
+ * Starts the contact list activity in the search mode.
+ */
+ public static void startSearch(Activity context, String initialQuery) {
+ context.startActivity(buildIntent(context, initialQuery));
+ }
+
+ public static void startSearchForResult(Activity context, String initialQuery,
+ int requestCode) {
+ context.startActivityForResult(buildIntent(context, initialQuery), requestCode);
+ }
+
+ private static Intent buildIntent(Activity context, String initialQuery) {
+ Intent intent = new Intent();
+ intent.setData(ContactsContract.Contacts.CONTENT_URI);
+ intent.setAction(UI.FILTER_CONTACTS_ACTION);
+
+ Intent originalIntent = context.getIntent();
+ Bundle originalExtras = originalIntent.getExtras();
+ if (originalExtras != null) {
+ intent.putExtras(originalExtras);
+ }
+ intent.putExtra(UI.FILTER_TEXT_EXTRA_KEY, initialQuery);
+ intent.putExtra(ORIGINAL_ACTION_EXTRA_KEY, originalIntent.getAction());
+ intent.putExtra(ORIGINAL_COMPONENT_EXTRA_KEY, originalIntent.getComponent().getClassName());
+ return intent;
+ }
+}
diff --git a/src/com/android/contacts/ContactsSectionIndexer.java b/src/com/android/contacts/ContactsSectionIndexer.java
new file mode 100644
index 0000000..01d461f
--- /dev/null
+++ b/src/com/android/contacts/ContactsSectionIndexer.java
@@ -0,0 +1,96 @@
+/*
+ * 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.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 {
+
+ private final String[] mSections;
+ private final int[] mPositions;
+ private final 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++) {
+ if (mSections[i] == null) {
+ mSections[i] = " ";
+ } else {
+ mSections[i] = mSections[i].trim();
+ }
+
+ mPositions[i] = position;
+ position += counts[i];
+ }
+ mCount = position;
+ }
+
+ public Object[] getSections() {
+ return mSections;
+ }
+
+ 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;
+ }
+}
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 1e3b8ad..94dabba 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -17,6 +17,9 @@
package com.android.contacts;
+import com.android.contacts.model.ContactsSource;
+import com.android.contacts.util.Constants;
+
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
@@ -36,7 +39,7 @@
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.Im.ProviderNames;
+import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -44,14 +47,11 @@
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.contacts.model.ContactsSource;
-import com.android.contacts.util.Constants;
-
import java.util.ArrayList;
public class ContactsUtils {
-
private static final String TAG = "ContactsUtils";
+ private static final String WAIT_SYMBOL_AS_STRING = String.valueOf(PhoneNumberUtils.WAIT);
/**
* Build the display title for the {@link Data#CONTENT_URI} entry in the
* provided cursor, assuming the given mimeType.
@@ -191,9 +191,22 @@
return photoBm;
}
+ // 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
- * {@link android.provider.Im.ProviderNames} from the predefined IM protocol id.
+ * ProviderNames from the predefined IM protocol id.
* This is used for interacting with the IM application.
*
* @param protocol the protocol ID
@@ -266,18 +279,6 @@
return true;
}
- public static Intent getPhotoPickIntent() {
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
- intent.setType("image/*");
- intent.putExtra("crop", "true");
- intent.putExtra("aspectX", 1);
- intent.putExtra("aspectY", 1);
- intent.putExtra("outputX", 96);
- intent.putExtra("outputY", 96);
- intent.putExtra("return-data", true);
- return intent;
- }
-
public static long queryForContactId(ContentResolver cr, long rawContactId) {
Cursor contactIdCursor = null;
long contactId = -1;
@@ -386,7 +387,6 @@
/**
* Utility for creating a standard tab indicator view.
*
- * @param context The label to display in the tab indicator. If null, not label will be displayed.
* @param parent The parent ViewGroup to attach the new view to.
* @param source The {@link ContactsSource} to build the tab view from.
* @return The tab indicator View.
@@ -401,6 +401,9 @@
/**
* Kick off an intent to initiate a call.
+ *
+ * @param phoneNumber must not be null.
+ * @throws NullPointerException when the given argument is null.
*/
public static void initiateCall(Context context, CharSequence phoneNumber) {
Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
@@ -410,6 +413,9 @@
/**
* Kick off an intent to initiate an Sms/Mms message.
+ *
+ * @param phoneNumber must not be null.
+ * @throws NullPointerException when the given argument is null.
*/
public static void initiateSms(Context context, CharSequence phoneNumber) {
Intent intent = new Intent(Intent.ACTION_SENDTO,
@@ -424,4 +430,64 @@
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 data with mimetypes which represent values in contact entries are
+ * considered equal for collapsing in the GUI. For caller-id, use
+ * {@link PhoneNumberUtils#compare(Context, String, String)} instead
+ */
+ public static final boolean shouldCollapse(Context context, CharSequence mimetype1,
+ CharSequence data1, CharSequence mimetype2, CharSequence data2) {
+ if (TextUtils.equals(Phone.CONTENT_ITEM_TYPE, mimetype1)
+ && TextUtils.equals(Phone.CONTENT_ITEM_TYPE, mimetype2)) {
+ if (data1 == data2) {
+ return true;
+ }
+ if (data1 == null || data2 == null) {
+ return false;
+ }
+
+ // If the number contains semicolons, PhoneNumberUtils.compare
+ // only checks the substring before that (which is fine for caller-id usually)
+ // but not for collapsing numbers. so we check each segment indidually to be more strict
+ // TODO: This should be replaced once we have a more robust phonenumber-library
+ String[] dataParts1 = data1.toString().split(WAIT_SYMBOL_AS_STRING);
+ String[] dataParts2 = data2.toString().split(WAIT_SYMBOL_AS_STRING);
+ if (dataParts1.length != dataParts2.length) {
+ return false;
+ }
+ for (int i = 0; i < dataParts1.length; i++) {
+ if (!PhoneNumberUtils.compare(context, dataParts1[i], dataParts2[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ } else {
+ if (mimetype1 == mimetype2 && data1 == data2) {
+ return true;
+ }
+ return TextUtils.equals(mimetype1, mimetype2) && TextUtils.equals(data1, data2);
+ }
+ }
+
+ /**
+ * 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());
+ }
}
diff --git a/src/com/android/contacts/DialtactsActivity.java b/src/com/android/contacts/DialtactsActivity.java
index 208fbf4..afb8606 100644
--- a/src/com/android/contacts/DialtactsActivity.java
+++ b/src/com/android/contacts/DialtactsActivity.java
@@ -44,6 +44,10 @@
private static final String FAVORITES_ENTRY_COMPONENT =
"com.android.contacts.DialtactsFavoritesEntryActivity";
+ /** Opens the Contacts app in the state the user has last set it to */
+ private static final String CONTACTS_LAUNCH_ACTIVITY =
+ "com.android.contacts.ContactsLaunchActivity";
+
private static final int TAB_INDEX_DIALER = 0;
private static final int TAB_INDEX_CALL_LOG = 1;
private static final int TAB_INDEX_CONTACTS = 2;
@@ -57,10 +61,20 @@
static final String PREF_FAVORITES_AS_CONTACTS = "favorites_as_contacts";
static final boolean PREF_FAVORITES_AS_CONTACTS_DEFAULT = false;
+ /** Last manually selected tab index */
+ private static final String PREF_LAST_MANUALLY_SELECTED_TAB = "last_manually_selected_tab";
+ private static final int PREF_LAST_MANUALLY_SELECTED_TAB_DEFAULT = TAB_INDEX_DIALER;
+
private TabHost mTabHost;
private String mFilterText;
private Uri mDialUri;
+ /**
+ * The index of the tab that has last been manually selected (the user clicked on a tab).
+ * This value does not keep track of programmatically set Tabs (e.g. Call Log after a Call)
+ */
+ private int mLastManuallySelectedTab;
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -80,6 +94,11 @@
setupContactsTab();
setupFavoritesTab();
+ // Load the last manually loaded tab
+ final SharedPreferences prefs = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE);
+ mLastManuallySelectedTab = prefs.getInt(PREF_LAST_MANUALLY_SELECTED_TAB,
+ PREF_LAST_MANUALLY_SELECTED_TAB_DEFAULT);
+
setCurrentTab(intent);
if (intent.getAction().equals(UI.FILTER_CONTACTS_ACTION)
@@ -92,13 +111,15 @@
protected void onPause() {
super.onPause();
- int currentTabIndex = mTabHost.getCurrentTab();
+ final int currentTabIndex = mTabHost.getCurrentTab();
+ final SharedPreferences.Editor editor =
+ getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE).edit();
if (currentTabIndex == TAB_INDEX_CONTACTS || currentTabIndex == TAB_INDEX_FAVORITES) {
- SharedPreferences.Editor editor = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE)
- .edit();
editor.putBoolean(PREF_FAVORITES_AS_CONTACTS, currentTabIndex == TAB_INDEX_FAVORITES);
- editor.commit();
}
+ editor.putInt(PREF_LAST_MANUALLY_SELECTED_TAB, mLastManuallySelectedTab);
+
+ editor.commit();
}
private void fixIntent(Intent intent) {
@@ -181,7 +202,7 @@
/**
* Sets the current tab based on the intent's request type
*
- * @param recentCallsRequest true is the recent calls tab is desired, false otherwise
+ * @param intent Intent that contains information about which tab should be selected
*/
private void setCurrentTab(Intent intent) {
// If we got here by hitting send and we're in call forward along to the in-call activity
@@ -202,6 +223,10 @@
// state and instead reload their state from the parent's intent
intent.putExtra(EXTRA_IGNORE_STATE, true);
+ // Remember the old manually selected tab index so that it can be restored if it is
+ // overwritten by one of the programmatic tab selections
+ final int savedTabIndex = mLastManuallySelectedTab;
+
// Choose the tab based on the inbound intent
String componentName = intent.getComponent().getClassName();
if (getClass().getName().equals(componentName)) {
@@ -212,6 +237,8 @@
}
} else if (FAVORITES_ENTRY_COMPONENT.equals(componentName)) {
mTabHost.setCurrentTab(TAB_INDEX_FAVORITES);
+ } else if (CONTACTS_LAUNCH_ACTIVITY.equals(componentName)) {
+ mTabHost.setCurrentTab(mLastManuallySelectedTab);
} else {
SharedPreferences prefs = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE);
boolean favoritesAsContacts = prefs.getBoolean(PREF_FAVORITES_AS_CONTACTS,
@@ -223,6 +250,9 @@
}
}
+ // Restore to the previous manual selection
+ mLastManuallySelectedTab = savedTabIndex;
+
// Tell the children activities that they should honor their saved states
// instead of the state from the parent's intent
intent.putExtra(EXTRA_IGNORE_STATE, false);
@@ -337,5 +367,9 @@
if (activity != null) {
activity.onWindowFocusChanged(true);
}
+
+ // Remember this tab index. This function is also called, if the tab is set automatically
+ // in which case the setter (setCurrentTab) has to set this to its old value afterwards
+ mLastManuallySelectedTab = mTabHost.getCurrentTab();
}
}
diff --git a/src/com/android/contacts/ExportVCardActivity.java b/src/com/android/contacts/ExportVCardActivity.java
index baf2371..5bccc7a 100644
--- a/src/com/android/contacts/ExportVCardActivity.java
+++ b/src/com/android/contacts/ExportVCardActivity.java
@@ -36,6 +36,14 @@
import java.util.HashSet;
import java.util.Set;
+/**
+ * Class for exporting vCard.
+ *
+ * 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 export 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 ExportVCardActivity extends Activity {
private static final String LOG_TAG = "ExportVCardActivity";
@@ -102,7 +110,6 @@
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
mActualExportThread = new ActualExportThread(mFileName);
- mActualExportThread.start();
showDialog(R.id.dialog_exporting_vcard);
}
}
@@ -287,26 +294,23 @@
return builder.create();
}
case R.id.dialog_exporting_vcard: {
- return getExportingVCardDialog();
+ if (mProgressDialog == null) {
+ String title = getString(R.string.exporting_contact_list_title);
+ String message = getString(R.string.exporting_contact_list_message,
+ mExportingFileName);
+ mProgressDialog = new ProgressDialog(ExportVCardActivity.this);
+ mProgressDialog.setTitle(title);
+ mProgressDialog.setMessage(message);
+ mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ mProgressDialog.setOnCancelListener(mActualExportThread);
+ mActualExportThread.start();
+ }
+ return mProgressDialog;
}
}
return super.onCreateDialog(id);
}
- private Dialog getExportingVCardDialog() {
- if (mProgressDialog == null) {
- String title = getString(R.string.exporting_contact_list_title);
- String message = getString(R.string.exporting_contact_list_message,
- mExportingFileName);
- mProgressDialog = new ProgressDialog(ExportVCardActivity.this);
- mProgressDialog.setTitle(title);
- mProgressDialog.setMessage(message);
- mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- mProgressDialog.setOnCancelListener(mActualExportThread);
- }
- return mProgressDialog;
- }
-
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
if (id == R.id.dialog_fail_to_export_with_reason) {
diff --git a/src/com/android/contacts/FocusRequestingListView.java b/src/com/android/contacts/FocusRequestingListView.java
deleted file mode 100644
index 7461d70..0000000
--- a/src/com/android/contacts/FocusRequestingListView.java
+++ /dev/null
@@ -1,48 +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;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.ListView;
-
-/* Subclass of ListView that requests focus after it is layed out for the first time. */
-public class FocusRequestingListView extends ListView {
-
- private boolean mFirstLayoutDone = false;
-
- public FocusRequestingListView(Context context) {
- super(context);
- }
-
- public FocusRequestingListView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public FocusRequestingListView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- super.onLayout(changed, left, top, right, bottom);
- if (!mFirstLayoutDone) {
- setFocusable(true);
- requestFocus();
- }
- mFirstLayoutDone = true;
- }
-}
diff --git a/src/com/android/contacts/GroupingListAdapter.java b/src/com/android/contacts/GroupingListAdapter.java
new file mode 100644
index 0000000..5937a6d
--- /dev/null
+++ b/src/com/android/contacts/GroupingListAdapter.java
@@ -0,0 +1,475 @@
+/*
+ * 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 com.android.internal.util.ArrayUtils;
+
+import android.content.Context;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.database.DataSetObserver;
+import android.os.Handler;
+import android.util.SparseIntArray;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+
+/**
+ * Maintains a list that groups adjacent items sharing the same value of
+ * a "group-by" field. The list has three types of elements: stand-alone, group header and group
+ * child. Groups are collapsible and collapsed by default.
+ */
+public abstract class GroupingListAdapter extends BaseAdapter {
+
+ private static final int GROUP_METADATA_ARRAY_INITIAL_SIZE = 16;
+ private static final int GROUP_METADATA_ARRAY_INCREMENT = 128;
+ private static final long GROUP_OFFSET_MASK = 0x00000000FFFFFFFFL;
+ private static final long GROUP_SIZE_MASK = 0x7FFFFFFF00000000L;
+ private static final long EXPANDED_GROUP_MASK = 0x8000000000000000L;
+
+ public static final int ITEM_TYPE_STANDALONE = 0;
+ public static final int ITEM_TYPE_GROUP_HEADER = 1;
+ public static final int ITEM_TYPE_IN_GROUP = 2;
+
+ /**
+ * Information about a specific list item: is it a group, if so is it expanded.
+ * Otherwise, is it a stand-alone item or a group member.
+ */
+ protected static class PositionMetadata {
+ int itemType;
+ boolean isExpanded;
+ int cursorPosition;
+ int childCount;
+ private int groupPosition;
+ private int listPosition = -1;
+ }
+
+ private Context mContext;
+ private Cursor mCursor;
+
+ /**
+ * Count of list items.
+ */
+ private int mCount;
+
+ private int mRowIdColumnIndex;
+
+ /**
+ * Count of groups in the list.
+ */
+ private int mGroupCount;
+
+ /**
+ * Information about where these groups are located in the list, how large they are
+ * and whether they are expanded.
+ */
+ private long[] mGroupMetadata;
+
+ private SparseIntArray mPositionCache = new SparseIntArray();
+ private int mLastCachedListPosition;
+ private int mLastCachedCursorPosition;
+ private int mLastCachedGroup;
+
+ /**
+ * A reusable temporary instance of PositionMetadata
+ */
+ private PositionMetadata mPositionMetadata = new PositionMetadata();
+
+ protected ContentObserver mChangeObserver = new ContentObserver(new Handler()) {
+
+ @Override
+ public boolean deliverSelfNotifications() {
+ return true;
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ onContentChanged();
+ }
+ };
+
+ protected DataSetObserver mDataSetObserver = new DataSetObserver() {
+
+ @Override
+ public void onChanged() {
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public void onInvalidated() {
+ notifyDataSetInvalidated();
+ }
+ };
+
+ public GroupingListAdapter(Context context) {
+ mContext = context;
+ resetCache();
+ }
+
+ /**
+ * Finds all groups of adjacent items in the cursor and calls {@link #addGroup} for
+ * each of them.
+ */
+ protected abstract void addGroups(Cursor cursor);
+
+ protected abstract View newStandAloneView(Context context, ViewGroup parent);
+ protected abstract void bindStandAloneView(View view, Context context, Cursor cursor);
+
+ protected abstract View newGroupView(Context context, ViewGroup parent);
+ protected abstract void bindGroupView(View view, Context context, Cursor cursor, int groupSize,
+ boolean expanded);
+
+ protected abstract View newChildView(Context context, ViewGroup parent);
+ protected abstract void bindChildView(View view, Context context, Cursor cursor);
+
+ /**
+ * Cache should be reset whenever the cursor changes or groups are expanded or collapsed.
+ */
+ private void resetCache() {
+ mCount = -1;
+ mLastCachedListPosition = -1;
+ mLastCachedCursorPosition = -1;
+ mLastCachedGroup = -1;
+ mPositionMetadata.listPosition = -1;
+ mPositionCache.clear();
+ }
+
+ protected void onContentChanged() {
+ }
+
+ public void changeCursor(Cursor cursor) {
+ if (cursor == mCursor) {
+ return;
+ }
+
+ if (mCursor != null) {
+ mCursor.unregisterContentObserver(mChangeObserver);
+ mCursor.unregisterDataSetObserver(mDataSetObserver);
+ mCursor.close();
+ }
+ mCursor = cursor;
+ resetCache();
+ findGroups();
+
+ if (cursor != null) {
+ cursor.registerContentObserver(mChangeObserver);
+ cursor.registerDataSetObserver(mDataSetObserver);
+ mRowIdColumnIndex = cursor.getColumnIndexOrThrow("_id");
+ notifyDataSetChanged();
+ } else {
+ // notify the observers about the lack of a data set
+ notifyDataSetInvalidated();
+ }
+
+ }
+
+ public Cursor getCursor() {
+ return mCursor;
+ }
+
+ /**
+ * Scans over the entire cursor looking for duplicate phone numbers that need
+ * to be collapsed.
+ */
+ private void findGroups() {
+ mGroupCount = 0;
+ mGroupMetadata = new long[GROUP_METADATA_ARRAY_INITIAL_SIZE];
+
+ if (mCursor == null) {
+ return;
+ }
+
+ addGroups(mCursor);
+ }
+
+ /**
+ * Records information about grouping in the list. Should be called by the overridden
+ * {@link #addGroups} method.
+ */
+ protected void addGroup(int cursorPosition, int size, boolean expanded) {
+ if (mGroupCount >= mGroupMetadata.length) {
+ int newSize = ArrayUtils.idealLongArraySize(
+ mGroupMetadata.length + GROUP_METADATA_ARRAY_INCREMENT);
+ long[] array = new long[newSize];
+ System.arraycopy(mGroupMetadata, 0, array, 0, mGroupCount);
+ mGroupMetadata = array;
+ }
+
+ long metadata = ((long)size << 32) | cursorPosition;
+ if (expanded) {
+ metadata |= EXPANDED_GROUP_MASK;
+ }
+ mGroupMetadata[mGroupCount++] = metadata;
+ }
+
+ public int getCount() {
+ if (mCursor == null) {
+ return 0;
+ }
+
+ if (mCount != -1) {
+ return mCount;
+ }
+
+ int cursorPosition = 0;
+ int count = 0;
+ for (int i = 0; i < mGroupCount; i++) {
+ long metadata = mGroupMetadata[i];
+ int offset = (int)(metadata & GROUP_OFFSET_MASK);
+ boolean expanded = (metadata & EXPANDED_GROUP_MASK) != 0;
+ int size = (int)((metadata & GROUP_SIZE_MASK) >> 32);
+
+ count += (offset - cursorPosition);
+
+ if (expanded) {
+ count += size + 1;
+ } else {
+ count++;
+ }
+
+ cursorPosition = offset + size;
+ }
+
+ mCount = count + mCursor.getCount() - cursorPosition;
+ return mCount;
+ }
+
+ /**
+ * Figures out whether the item at the specified position represents a
+ * stand-alone element, a group or a group child. Also computes the
+ * corresponding cursor position.
+ */
+ public void obtainPositionMetadata(PositionMetadata metadata, int position) {
+
+ // If the description object already contains requested information, just return
+ if (metadata.listPosition == position) {
+ return;
+ }
+
+ int listPosition = 0;
+ int cursorPosition = 0;
+ int firstGroupToCheck = 0;
+
+ // Check cache for the supplied position. What we are looking for is
+ // the group descriptor immediately preceding the supplied position.
+ // Once we have that, we will be able to tell whether the position
+ // is the header of the group, a member of the group or a standalone item.
+ if (mLastCachedListPosition != -1) {
+ if (position <= mLastCachedListPosition) {
+
+ // Have SparceIntArray do a binary search for us.
+ int index = mPositionCache.indexOfKey(position);
+
+ // If we get back a positive number, the position corresponds to
+ // a group header.
+ if (index < 0) {
+
+ // We had a cache miss, but we did obtain valuable information anyway.
+ // The negative number will allow us to compute the location of
+ // the group header immediately preceding the supplied position.
+ index = ~index - 1;
+
+ if (index >= mPositionCache.size()) {
+ index--;
+ }
+ }
+
+ // A non-negative index gives us the position of the group header
+ // corresponding or preceding the position, so we can
+ // search for the group information at the supplied position
+ // starting with the cached group we just found
+ if (index >= 0) {
+ listPosition = mPositionCache.keyAt(index);
+ firstGroupToCheck = mPositionCache.valueAt(index);
+ long descriptor = mGroupMetadata[firstGroupToCheck];
+ cursorPosition = (int)(descriptor & GROUP_OFFSET_MASK);
+ }
+ } else {
+
+ // If we haven't examined groups beyond the supplied position,
+ // we will start where we left off previously
+ firstGroupToCheck = mLastCachedGroup;
+ listPosition = mLastCachedListPosition;
+ cursorPosition = mLastCachedCursorPosition;
+ }
+ }
+
+ for (int i = firstGroupToCheck; i < mGroupCount; i++) {
+ long group = mGroupMetadata[i];
+ int offset = (int)(group & GROUP_OFFSET_MASK);
+
+ // Move pointers to the beginning of the group
+ listPosition += (offset - cursorPosition);
+ cursorPosition = offset;
+
+ if (i > mLastCachedGroup) {
+ mPositionCache.append(listPosition, i);
+ mLastCachedListPosition = listPosition;
+ mLastCachedCursorPosition = cursorPosition;
+ mLastCachedGroup = i;
+ }
+
+ // Now we have several possibilities:
+ // A) The requested position precedes the group
+ if (position < listPosition) {
+ metadata.itemType = ITEM_TYPE_STANDALONE;
+ metadata.cursorPosition = cursorPosition - (listPosition - position);
+ return;
+ }
+
+ boolean expanded = (group & EXPANDED_GROUP_MASK) != 0;
+ int size = (int) ((group & GROUP_SIZE_MASK) >> 32);
+
+ // B) The requested position is a group header
+ if (position == listPosition) {
+ metadata.itemType = ITEM_TYPE_GROUP_HEADER;
+ metadata.groupPosition = i;
+ metadata.isExpanded = expanded;
+ metadata.childCount = size;
+ metadata.cursorPosition = offset;
+ return;
+ }
+
+ if (expanded) {
+ // C) The requested position is an element in the expanded group
+ if (position < listPosition + size + 1) {
+ metadata.itemType = ITEM_TYPE_IN_GROUP;
+ metadata.cursorPosition = cursorPosition + (position - listPosition) - 1;
+ return;
+ }
+
+ // D) The element is past the expanded group
+ listPosition += size + 1;
+ } else {
+
+ // E) The element is past the collapsed group
+ listPosition++;
+ }
+
+ // Move cursor past the group
+ cursorPosition += size;
+ }
+
+ // The required item is past the last group
+ metadata.itemType = ITEM_TYPE_STANDALONE;
+ metadata.cursorPosition = cursorPosition + (position - listPosition);
+ }
+
+ /**
+ * Returns true if the specified position in the list corresponds to a
+ * group header.
+ */
+ public boolean isGroupHeader(int position) {
+ obtainPositionMetadata(mPositionMetadata, position);
+ return mPositionMetadata.itemType == ITEM_TYPE_GROUP_HEADER;
+ }
+
+ /**
+ * Given a position of a groups header in the list, returns the size of
+ * the corresponding group.
+ */
+ public int getGroupSize(int position) {
+ obtainPositionMetadata(mPositionMetadata, position);
+ return mPositionMetadata.childCount;
+ }
+
+ /**
+ * Mark group as expanded if it is collapsed and vice versa.
+ */
+ public void toggleGroup(int position) {
+ obtainPositionMetadata(mPositionMetadata, position);
+ if (mPositionMetadata.itemType != ITEM_TYPE_GROUP_HEADER) {
+ throw new IllegalArgumentException("Not a group at position " + position);
+ }
+
+
+ if (mPositionMetadata.isExpanded) {
+ mGroupMetadata[mPositionMetadata.groupPosition] &= ~EXPANDED_GROUP_MASK;
+ } else {
+ mGroupMetadata[mPositionMetadata.groupPosition] |= EXPANDED_GROUP_MASK;
+ }
+ resetCache();
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return 3;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ obtainPositionMetadata(mPositionMetadata, position);
+ return mPositionMetadata.itemType;
+ }
+
+ public Object getItem(int position) {
+ if (mCursor == null) {
+ return null;
+ }
+
+ obtainPositionMetadata(mPositionMetadata, position);
+ if (mCursor.moveToPosition(mPositionMetadata.cursorPosition)) {
+ return mCursor;
+ } else {
+ return null;
+ }
+ }
+
+ public long getItemId(int position) {
+ Object item = getItem(position);
+ if (item != null) {
+ return mCursor.getLong(mRowIdColumnIndex);
+ } else {
+ return -1;
+ }
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ obtainPositionMetadata(mPositionMetadata, position);
+ View view = convertView;
+ if (view == null) {
+ switch (mPositionMetadata.itemType) {
+ case ITEM_TYPE_STANDALONE:
+ view = newStandAloneView(mContext, parent);
+ break;
+ case ITEM_TYPE_GROUP_HEADER:
+ view = newGroupView(mContext, parent);
+ break;
+ case ITEM_TYPE_IN_GROUP:
+ view = newChildView(mContext, parent);
+ break;
+ }
+ }
+
+ mCursor.moveToPosition(mPositionMetadata.cursorPosition);
+ switch (mPositionMetadata.itemType) {
+ case ITEM_TYPE_STANDALONE:
+ bindStandAloneView(view, mContext, mCursor);
+ break;
+ case ITEM_TYPE_GROUP_HEADER:
+ bindGroupView(view, mContext, mCursor, mPositionMetadata.childCount,
+ mPositionMetadata.isExpanded);
+ break;
+ case ITEM_TYPE_IN_GROUP:
+ bindChildView(view, mContext, mCursor);
+ break;
+
+ }
+ return view;
+ }
+}
diff --git a/src/com/android/contacts/ImportVCardActivity.java b/src/com/android/contacts/ImportVCardActivity.java
index 8fd9c0d..0a324fe 100644
--- a/src/com/android/contacts/ImportVCardActivity.java
+++ b/src/com/android/contacts/ImportVCardActivity.java
@@ -22,20 +22,23 @@
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ContentResolver;
+import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
+import android.net.Uri;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Handler;
import android.os.PowerManager;
-import android.pim.vcard.EntryCommitter;
-import android.pim.vcard.VCardBuilder;
-import android.pim.vcard.VCardBuilderCollection;
import android.pim.vcard.VCardConfig;
-import android.pim.vcard.VCardDataBuilder;
+import android.pim.vcard.VCardEntryCommitter;
+import android.pim.vcard.VCardEntryConstructor;
import android.pim.vcard.VCardEntryCounter;
+import android.pim.vcard.VCardInterpreter;
+import android.pim.vcard.VCardInterpreterCollection;
import android.pim.vcard.VCardParser_V21;
import android.pim.vcard.VCardParser_V30;
import android.pim.vcard.VCardSourceDetector;
@@ -43,15 +46,19 @@
import android.pim.vcard.exception.VCardNestedException;
import android.pim.vcard.exception.VCardNotSupportedException;
import android.pim.vcard.exception.VCardVersionException;
+import android.provider.ContactsContract.RawContacts;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.RelativeSizeSpan;
import android.util.Log;
+import com.android.contacts.model.Sources;
+import com.android.contacts.util.AccountSelectionUtil;
+
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -90,12 +97,20 @@
/**
* Class for importing vCard. Several user interaction will be required while reading
* (selecting a file, waiting a moment, etc.)
+ *
+ * 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 {
private static final String LOG_TAG = "ImportVCardActivity";
private static final boolean DO_PERFORMANCE_PROFILE = false;
+ // Run on the UI thread. Must not be null except after onDestroy().
private Handler mHandler = new Handler();
+
+ private AccountSelectionUtil.AccountSelectedListener mAccountSelectionListener;
private Account mAccount;
private ProgressDialog mProgressDialogForScanVCard;
@@ -107,6 +122,9 @@
private String mErrorMessage;
+ private boolean mNeedReview = false;
+
+ // Runs on the UI thread.
private class DialogDisplayer implements Runnable {
private final int mResId;
public DialogDisplayer(int resId) {
@@ -117,10 +135,7 @@
mErrorMessage = errorMessage;
}
public void run() {
- // Show the Dialog only when the parent Activity is still alive.
- if (!ImportVCardActivity.this.isFinishing()) {
- showDialog(mResId);
- }
+ showDialog(mResId);
}
}
@@ -143,18 +158,18 @@
private VCardParser_V21 mVCardParser;
private boolean mCanceled;
private PowerManager.WakeLock mWakeLock;
- private String mCanonicalPath;
+ private Uri mUri;
+ private File mTempFile;
private List<VCardFile> mSelectedVCardFileList;
private List<String> mErrorFileNameList;
- public VCardReadThread(String canonicalPath) {
- mCanonicalPath = canonicalPath;
+ public VCardReadThread(Uri uri) {
+ mUri = uri;
init();
}
public VCardReadThread(final List<VCardFile> selectedVCardFileList) {
- mCanonicalPath = null;
mSelectedVCardFileList = selectedVCardFileList;
mErrorFileNameList = new ArrayList<String>();
init();
@@ -181,11 +196,14 @@
public void run() {
boolean shouldCallFinish = true;
mWakeLock.acquire();
+ Uri createdUri = null;
+ mTempFile = null;
// Some malicious vCard data may make this thread broken
// (e.g. OutOfMemoryError).
// Even in such cases, some should be done.
try {
- if (mCanonicalPath != null) { // Read one file
+ if (mUri != null) { // Read one vCard expressed by mUri
+ final Uri targetUri = mUri;
mProgressDialogForReadVCard.setProgressNumberFormat("");
mProgressDialogForReadVCard.setProgress(0);
@@ -197,18 +215,17 @@
}
VCardEntryCounter counter = new VCardEntryCounter();
VCardSourceDetector detector = new VCardSourceDetector();
- VCardBuilderCollection builderCollection = new VCardBuilderCollection(
+ VCardInterpreterCollection builderCollection = new VCardInterpreterCollection(
Arrays.asList(counter, detector));
-
boolean result;
try {
- result = readOneVCardFile(mCanonicalPath,
+ result = readOneVCardFile(targetUri,
VCardConfig.DEFAULT_CHARSET, builderCollection, null, true, null);
} catch (VCardNestedException e) {
try {
// Assume that VCardSourceDetector was able to detect the source.
// Try again with the detector.
- result = readOneVCardFile(mCanonicalPath,
+ result = readOneVCardFile(targetUri,
VCardConfig.DEFAULT_CHARSET, counter, detector, false, null);
} catch (VCardNestedException e2) {
result = false;
@@ -230,23 +247,25 @@
mProgressDialogForReadVCard.setIndeterminate(false);
mProgressDialogForReadVCard.setMax(counter.getCount());
String charset = detector.getEstimatedCharset();
- doActuallyReadOneVCard(mCanonicalPath, null, charset, true, detector,
+ createdUri = doActuallyReadOneVCard(targetUri, null, charset, true, detector,
mErrorFileNameList);
} else { // Read multiple files.
mProgressDialogForReadVCard.setProgressNumberFormat(
getString(R.string.reading_vcard_files));
mProgressDialogForReadVCard.setMax(mSelectedVCardFileList.size());
mProgressDialogForReadVCard.setProgress(0);
-
+
for (VCardFile vcardFile : mSelectedVCardFileList) {
if (mCanceled) {
return;
}
- String canonicalPath = vcardFile.getCanonicalPath();
+ // TODO: detect scheme!
+ final Uri targetUri =
+ Uri.parse("file://" + vcardFile.getCanonicalPath());
VCardSourceDetector detector = new VCardSourceDetector();
try {
- if (!readOneVCardFile(canonicalPath, VCardConfig.DEFAULT_CHARSET,
+ if (!readOneVCardFile(targetUri, VCardConfig.DEFAULT_CHARSET,
detector, null, true, mErrorFileNameList)) {
continue;
}
@@ -254,7 +273,7 @@
// Assume that VCardSourceDetector was able to detect the source.
}
String charset = detector.getEstimatedCharset();
- doActuallyReadOneVCard(canonicalPath, mAccount,
+ doActuallyReadOneVCard(targetUri, mAccount,
charset, false, detector, mErrorFileNameList);
mProgressDialogForReadVCard.incrementProgressBy(1);
}
@@ -262,10 +281,31 @@
} finally {
mWakeLock.release();
mProgressDialogForReadVCard.dismiss();
+ if (mTempFile != null) {
+ if (!mTempFile.delete()) {
+ Log.w(LOG_TAG, "Failed to delete a cache file.");
+ }
+ mTempFile = null;
+ }
// finish() is called via mCancelListener, which is used in DialogDisplayer.
if (shouldCallFinish && !isFinishing()) {
if (mErrorFileNameList == null || mErrorFileNameList.isEmpty()) {
finish();
+ if (mNeedReview) {
+ mNeedReview = false;
+ Log.v("importVCardActivity", "Prepare to review the imported contact");
+
+ if (createdUri != null) {
+ // get contact_id of this raw_contact
+ final long rawContactId = ContentUris.parseId(createdUri);
+ Uri contactUri = RawContacts.getContactLookupUri(
+ getContentResolver(), ContentUris.withAppendedId(
+ RawContacts.CONTENT_URI, rawContactId));
+
+ Intent viewIntent = new Intent(Intent.ACTION_VIEW, contactUri);
+ startActivity(viewIntent);
+ }
+ }
} else {
StringBuilder builder = new StringBuilder();
boolean first = true;
@@ -277,8 +317,8 @@
}
builder.append(fileName);
}
-
- mHandler.post(new DialogDisplayer(
+
+ runOnUIThread(new DialogDisplayer(
getString(R.string.fail_reason_failed_to_read_files,
builder.toString())));
}
@@ -286,21 +326,22 @@
}
}
- private boolean doActuallyReadOneVCard(String canonicalPath, Account account,
+ private Uri doActuallyReadOneVCard(Uri uri, Account account,
String charset, boolean showEntryParseProgress,
VCardSourceDetector detector, List<String> errorFileNameList) {
final Context context = ImportVCardActivity.this;
- VCardDataBuilder builder;
+ VCardEntryConstructor builder;
final String currentLanguage = Locale.getDefault().getLanguage();
int vcardType = VCardConfig.getVCardTypeFromString(
context.getString(R.string.config_import_vcard_type));
if (charset != null) {
- builder = new VCardDataBuilder(charset, charset, false, vcardType, mAccount);
+ builder = new VCardEntryConstructor(charset, charset, false, vcardType, mAccount);
} else {
charset = VCardConfig.DEFAULT_CHARSET;
- builder = new VCardDataBuilder(null, null, false, vcardType, mAccount);
+ builder = new VCardEntryConstructor(null, null, false, vcardType, mAccount);
}
- builder.addEntryHandler(new EntryCommitter(mResolver));
+ VCardEntryCommitter committer = new VCardEntryCommitter(mResolver);
+ builder.addEntryHandler(committer);
if (showEntryParseProgress) {
builder.addEntryHandler(new ProgressShower(mProgressDialogForReadVCard,
context.getString(R.string.reading_vcard_message),
@@ -309,22 +350,23 @@
}
try {
- if (!readOneVCardFile(canonicalPath, charset, builder, detector, false, null)) {
- return false;
+ if (!readOneVCardFile(uri, charset, builder, detector, false, null)) {
+ return null;
}
} catch (VCardNestedException e) {
Log.e(LOG_TAG, "Never reach here.");
}
- return true;
+ final ArrayList<Uri> createdUris = committer.getCreatedUris();
+ return (createdUris == null || createdUris.size() != 1) ? null : createdUris.get(0);
}
- private boolean readOneVCardFile(String canonicalPath, String charset,
- VCardBuilder builder, VCardSourceDetector detector,
+ private boolean readOneVCardFile(Uri uri, String charset,
+ VCardInterpreter builder, VCardSourceDetector detector,
boolean throwNestedException, List<String> errorFileNameList)
throws VCardNestedException {
- FileInputStream is;
+ InputStream is;
try {
- is = new FileInputStream(canonicalPath);
+ is = mResolver.openInputStream(uri);
mVCardParser = new VCardParser_V21(detector);
try {
@@ -334,7 +376,11 @@
is.close();
} catch (IOException e) {
}
- is = new FileInputStream(canonicalPath);
+ if (builder instanceof VCardEntryConstructor) {
+ // Let the object clean up internal temporal objects,
+ ((VCardEntryConstructor)builder).clear();
+ }
+ is = mResolver.openInputStream(uri);
try {
mVCardParser = new VCardParser_V30();
@@ -356,9 +402,9 @@
mProgressDialogForReadVCard.dismiss();
if (errorFileNameList != null) {
- errorFileNameList.add(canonicalPath);
+ errorFileNameList.add(uri.toString());
} else {
- mHandler.post(new DialogDisplayer(
+ runOnUIThread(new DialogDisplayer(
getString(R.string.fail_reason_io_error) +
": " + e.getLocalizedMessage()));
}
@@ -368,18 +414,18 @@
throw (VCardNestedException)e;
}
if (errorFileNameList != null) {
- errorFileNameList.add(canonicalPath);
+ errorFileNameList.add(uri.toString());
} else {
- mHandler.post(new DialogDisplayer(
+ runOnUIThread(new DialogDisplayer(
getString(R.string.fail_reason_vcard_not_supported_error) +
" (" + e.getMessage() + ")"));
}
return false;
} catch (VCardException e) {
if (errorFileNameList != null) {
- errorFileNameList.add(canonicalPath);
+ errorFileNameList.add(uri.toString());
} else {
- mHandler.post(new DialogDisplayer(
+ runOnUIThread(new DialogDisplayer(
getString(R.string.fail_reason_vcard_parse_error) +
" (" + e.getMessage() + ")"));
}
@@ -406,7 +452,7 @@
public static final int IMPORT_MULTIPLE = 1;
public static final int IMPORT_ALL = 2;
public static final int IMPORT_TYPE_SIZE = 3;
-
+
private int mCurrentIndex;
public void onClick(DialogInterface dialog, int which) {
@@ -429,7 +475,7 @@
}
}
}
-
+
private class VCardSelectedListener implements
DialogInterface.OnClickListener, DialogInterface.OnMultiChoiceClickListener {
private int mCurrentIndex;
@@ -447,7 +493,7 @@
if (mSelectedIndexSet != null) {
List<VCardFile> selectedVCardFileList = new ArrayList<VCardFile>();
int size = mAllVCardFileList.size();
- // We'd like to sort the files by its index, so we do not use Set iterator.
+ // We'd like to sort the files by its index, so we do not use Set iterator.
for (int i = 0; i < size; i++) {
if (mSelectedIndexSet.contains(i)) {
selectedVCardFileList.add(mAllVCardFileList.get(i));
@@ -455,7 +501,9 @@
}
importMultipleVCardFromSDCard(selectedVCardFileList);
} else {
- importOneVCardFromSDCard(mAllVCardFileList.get(mCurrentIndex).getCanonicalPath());
+ String canonicalPath = mAllVCardFileList.get(mCurrentIndex).getCanonicalPath();
+ final Uri uri = Uri.parse("file://" + canonicalPath);
+ importOneVCardFromSDCard(uri);
}
} else if (which == DialogInterface.BUTTON_NEGATIVE) {
finish();
@@ -532,14 +580,14 @@
mProgressDialogForScanVCard = null;
if (mGotIOException) {
- mHandler.post(new DialogDisplayer(R.id.dialog_io_exception));
+ runOnUIThread(new DialogDisplayer(R.id.dialog_io_exception));
} else if (mCanceled) {
finish();
} else {
int size = mAllVCardFileList.size();
final Context context = ImportVCardActivity.this;
if (size == 0) {
- mHandler.post(new DialogDisplayer(R.id.dialog_vcard_not_found));
+ runOnUIThread(new DialogDisplayer(R.id.dialog_vcard_not_found));
} else {
startVCardSelectAndImport();
}
@@ -552,6 +600,12 @@
throw new CanceledException();
}
+ // e.g. secured directory may return null toward listFiles().
+ final File[] files = directory.listFiles();
+ if (files == null) {
+ Log.w(LOG_TAG, "listFiles() returned null (directory: " + directory + ")");
+ return;
+ }
for (File file : directory.listFiles()) {
if (mCanceled) {
throw new CanceledException();
@@ -591,16 +645,18 @@
if (getResources().getBoolean(R.bool.config_import_all_vcard_from_sdcard_automatically)) {
importMultipleVCardFromSDCard(mAllVCardFileList);
} else if (size == 1) {
- importOneVCardFromSDCard(mAllVCardFileList.get(0).getCanonicalPath());
+ String canonicalPath = mAllVCardFileList.get(0).getCanonicalPath();
+ Uri uri = Uri.parse("file://" + canonicalPath);
+ importOneVCardFromSDCard(uri);
} else if (getResources().getBoolean(R.bool.config_allow_users_select_all_vcard_import)) {
- mHandler.post(new DialogDisplayer(R.id.dialog_select_import_type));
+ runOnUIThread(new DialogDisplayer(R.id.dialog_select_import_type));
} else {
- mHandler.post(new DialogDisplayer(R.id.dialog_select_one_vcard));
+ runOnUIThread(new DialogDisplayer(R.id.dialog_select_one_vcard));
}
}
-
+
private void importMultipleVCardFromSDCard(final List<VCardFile> selectedVCardFileList) {
- mHandler.post(new Runnable() {
+ runOnUIThread(new Runnable() {
public void run() {
mVCardReadThread = new VCardReadThread(selectedVCardFileList);
showDialog(R.id.dialog_reading_vcard);
@@ -608,10 +664,10 @@
});
}
- private void importOneVCardFromSDCard(final String canonicalPath) {
- mHandler.post(new Runnable() {
+ private void importOneVCardFromSDCard(final Uri uri) {
+ runOnUIThread(new Runnable() {
public void run() {
- mVCardReadThread = new VCardReadThread(canonicalPath);
+ mVCardReadThread = new VCardReadThread(uri);
showDialog(R.id.dialog_reading_vcard);
}
});
@@ -673,25 +729,11 @@
return builder.create();
}
- private Dialog getReadingVCardDialog() {
- if (mProgressDialogForReadVCard == null) {
- String title = getString(R.string.reading_vcard_title);
- String message = getString(R.string.reading_vcard_message);
- mProgressDialogForReadVCard = new ProgressDialog(this);
- mProgressDialogForReadVCard.setTitle(title);
- mProgressDialogForReadVCard.setMessage(message);
- mProgressDialogForReadVCard.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- mProgressDialogForReadVCard.setOnCancelListener(mVCardReadThread);
- mVCardReadThread.start();
- }
- return mProgressDialogForReadVCard;
- }
-
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
- Intent intent = getIntent();
+ final Intent intent = getIntent();
if (intent != null) {
final String accountName = intent.getStringExtra("account_name");
final String accountType = intent.getStringExtra("account_type");
@@ -702,12 +744,68 @@
Log.e(LOG_TAG, "intent does not exist");
}
- startImportVCardFromSdCard();
+ // The caller often does not know account information at all, so we show the UI instead.
+ if (mAccount == null) {
+ // 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 Sources sources = Sources.getInstance(this);
+ final List<Account> accountList = sources.getAccounts(true);
+ final int size = accountList.size();
+ if (size > 1) {
+ final int resId = R.string.import_from_sdcard;
+ mAccountSelectionListener =
+ new AccountSelectionUtil.AccountSelectedListener(
+ this, accountList, resId) {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ mAccount = mAccountList.get(which);
+ // Instead of using Intent mechanism, call the relevant private method,
+ // to avoid throwing an Intent to itself again.
+ startImport();
+ }
+ };
+ showDialog(resId);
+ return;
+ } else {
+ mAccount = size > 0 ? accountList.get(0) : null;
+ }
+ }
+
+ startImport();
+ }
+
+ private void startImport() {
+ Intent intent = getIntent();
+ final String action = intent.getAction();
+ final Uri uri = intent.getData();
+ Log.v(LOG_TAG, "action = " + action + " ; path = " + uri);
+ if (Intent.ACTION_VIEW.equals(action)) {
+ // Import the file directly and then go to EDIT screen
+ mNeedReview = true;
+ }
+
+ if (uri != null) {
+ importOneVCardFromSDCard(uri);
+ } else {
+ doScanExternalStorageAndImportVCard();
+ }
}
@Override
protected Dialog onCreateDialog(int resId) {
switch (resId) {
+ case R.string.import_from_sdcard: {
+ if (mAccountSelectionListener == null) {
+ throw new NullPointerException(
+ "mAccountSelectionListener must not be null.");
+ }
+ return AccountSelectionUtil.getSelectAccountDialog(this, resId,
+ mAccountSelectionListener,
+ new CancelListener());
+ }
case R.id.dialog_searching_vcard: {
if (mProgressDialogForScanVCard == null) {
String title = getString(R.string.searching_vcard_title);
@@ -748,7 +846,17 @@
return getVCardFileSelectDialog(false);
}
case R.id.dialog_reading_vcard: {
- return getReadingVCardDialog();
+ if (mProgressDialogForReadVCard == null) {
+ String title = getString(R.string.reading_vcard_title);
+ String message = getString(R.string.reading_vcard_message);
+ mProgressDialogForReadVCard = new ProgressDialog(this);
+ mProgressDialogForReadVCard.setTitle(title);
+ mProgressDialogForReadVCard.setMessage(message);
+ mProgressDialogForReadVCard.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ mProgressDialogForReadVCard.setOnCancelListener(mVCardReadThread);
+ mVCardReadThread.start();
+ }
+ return mProgressDialogForReadVCard;
}
case R.id.dialog_io_exception: {
String message = (getString(R.string.scanning_sdcard_failed_message,
@@ -781,8 +889,8 @@
}
@Override
- protected void onStop() {
- super.onStop();
+ protected void onPause() {
+ super.onPause();
if (mVCardReadThread != null) {
// The Activity is no longer visible. Stop the thread.
mVCardReadThread.cancel();
@@ -790,7 +898,7 @@
}
// ImportVCardActivity should not be persistent. In other words, if there's some
- // event calling onStop(), this Activity should finish its work and give the main
+ // event calling onPause(), this Activity should finish its work and give the main
// screen back to the caller Activity.
if (!isFinishing()) {
finish();
@@ -798,30 +906,78 @@
}
@Override
+ protected void onDestroy() {
+ // The code assumes the handler runs on the UI thread. If not,
+ // clearing the message queue is not enough, one would have to
+ // make sure that the handler does not run any callback when
+ // this activity isFinishing().
+
+ // Need to make sure any worker thread is done before we flush and
+ // nullify the message handler.
+ if (mVCardReadThread != null) {
+ Log.w(LOG_TAG, "VCardReadThread exists while this Activity is now being killed!");
+ mVCardReadThread.cancel();
+ int attempts = 0;
+ while (mVCardReadThread.isAlive() && attempts < 10) {
+ try {
+ Thread.currentThread().sleep(20);
+ } catch (InterruptedException ie) {
+ // Keep on going until max attempts is reached.
+ }
+ attempts++;
+ }
+ if (mVCardReadThread.isAlive()) {
+ // Find out why the thread did not exit in a timely
+ // fashion. Last resort: increase the sleep duration
+ // and/or the number of attempts.
+ Log.e(LOG_TAG, "VCardReadThread is still alive after max attempts.");
+ }
+ mVCardReadThread = null;
+ }
+
+ // Callbacks messages have what == 0.
+ if (mHandler.hasMessages(0)) {
+ mHandler.removeMessages(0);
+ }
+
+ mHandler = null; // Prevents memory leaks by breaking any circular dependency.
+ super.onDestroy();
+ }
+
+ /**
+ * Tries to run a given Runnable object when the UI thread can. Ignore it otherwise
+ */
+ private void runOnUIThread(Runnable runnable) {
+ if (mHandler == null) {
+ Log.w(LOG_TAG, "Handler object is null. No dialog is shown.");
+ } else {
+ mHandler.post(runnable);
+ }
+ }
+
+ @Override
public void finalize() {
+ // TODO: This should not be needed. Throw exception instead.
if (mVCardReadThread != null) {
// Not sure this procedure is really needed, but just in case...
- Log.w(LOG_TAG, "VCardReadThread exists while this Activity is now being killed!");
+ Log.e(LOG_TAG, "VCardReadThread exists while this Activity is now being killed!");
mVCardReadThread.cancel();
mVCardReadThread = null;
}
}
- /* public methods */
-
/**
- * Tries to start importing VCard. If there's no SDCard available,
- * an error dialog is shown. If there is, start scanning using another thread
- * and shows a progress dialog. Several interactions will occur.
- * This method should be called from a thread with a looper (like Activity).
+ * Scans vCard in external storage (typically SDCard) and tries to import it.
+ * - When there's no SDCard available, an error dialog is shown.
+ * - When multiple vCard files are available, asks a user to select one.
*/
- public void startImportVCardFromSdCard() {
- File file = new File("/sdcard");
+ private void doScanExternalStorageAndImportVCard() {
+ // TODO: should use getExternalStorageState().
+ final File file = Environment.getExternalStorageDirectory();
if (!file.exists() || !file.isDirectory() || !file.canRead()) {
showDialog(R.id.dialog_sdcard_not_found);
} else {
- File sdcardDirectory = new File("/sdcard");
- mVCardScanThread = new VCardScanThread(sdcardDirectory);
+ mVCardScanThread = new VCardScanThread(file);
showDialog(R.id.dialog_searching_vcard);
}
}
diff --git a/src/com/android/contacts/JapaneseContactListIndexer.java b/src/com/android/contacts/JapaneseContactListIndexer.java
deleted file mode 100644
index d5d6dcd..0000000
--- a/src/com/android/contacts/JapaneseContactListIndexer.java
+++ /dev/null
@@ -1,187 +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;
-
-import android.database.Cursor;
-import android.database.DataSetObserver;
-import android.util.Log;
-import android.util.SparseIntArray;
-import android.widget.SectionIndexer;
-
-/**
- * SectionIndexer which is for "phonetically sortable" String. This class heavily depends on the
- * algorithm of the SQL function "GET_PHONETICALLY_SORTABLE_STRING", whose implementation
- * is written in C++.
- */
-public final class JapaneseContactListIndexer extends DataSetObserver implements SectionIndexer {
- private static String TAG = "JapaneseContactListIndexer";
-
- static private final String[] sSections = {
- " ", // Sections of SectionIndexer should start with " " (some components assume it).
- "\u3042", "\u304B", "\u3055", "\u305F", "\u306A", // a, ka, sa, ta, na
- "\u306F", "\u307E", "\u3084", "\u3089", "\u308F", // ha, ma, ya, ra, wa
- "\uFF21", "\uFF22", "\uFF23", "\uFF24", "\uFF25", // full-width ABCDE
- "\uFF26", "\uFF27", "\uFF28", "\uFF29", "\uFF2A", // full-width FGHIJ
- "\uFF2B", "\uFF2C", "\uFF2D", "\uFF2E", "\uFF2F", // full-width KLMNO
- "\uFF30", "\uFF31", "\uFF32", "\uFF33", "\uFF34", // full-width PQRST
- "\uFF35", "\uFF36", "\uFF37", "\uFF38", "\uFF39", // full-width UVWXY
- "\uFF40", // full-width Z
- "\u6570", "\u8A18" // alphabets, numbers, symbols
- };
- static private final int sSectionsLength = sSections.length;
-
- private int mColumnIndex;
- private Cursor mDataCursor;
- private SparseIntArray mStringMap;
-
- public JapaneseContactListIndexer(Cursor cursor, int columnIndex) {
- int len = sSections.length;
- mColumnIndex = columnIndex;
- mDataCursor = cursor;
- mStringMap = new SparseIntArray(sSectionsLength);
- if (cursor != null) {
- cursor.registerDataSetObserver(this);
- }
- }
-
- public void setCursor(Cursor cursor) {
- if (mDataCursor != null) {
- mDataCursor.unregisterDataSetObserver(this);
- }
- mDataCursor = cursor;
- if (cursor != null) {
- mDataCursor.registerDataSetObserver(this);
- }
- }
-
- private int getSectionCodePoint(int index) {
- if (index < sSections.length - 2) {
- return sSections[index].codePointAt(0);
- } else if (index == sSections.length - 2) {
- return 0xFF66; // Numbers are mapped from 0xFF66.
- } else { // index == mSections.length - 1
- return 0xFF70; // Symbols are mapped from 0xFF70.
- }
- }
-
- public int getPositionForSection(int sectionIndex) {
- final SparseIntArray stringMap = mStringMap;
- final Cursor cursor = mDataCursor;
-
- if (cursor == null || sectionIndex <= 0) {
- return 0;
- }
-
- if (sectionIndex >= sSectionsLength) {
- sectionIndex = sSectionsLength - 1;
- }
-
- int savedCursorPos = cursor.getPosition();
-
- String targetLetter = sSections[sectionIndex];
- int key = targetLetter.codePointAt(0);
-
- // Check cache map
- {
- int tmp = stringMap.get(key, Integer.MIN_VALUE);
- if (Integer.MIN_VALUE != tmp) {
- return tmp;
- }
- }
-
- int end = cursor.getCount();
- int pos = 0;
-
- {
- // Note that sectionIndex > 0.
- int prevLetter = sSections[sectionIndex - 1].codePointAt(0);
- int prevLetterPos = stringMap.get(prevLetter, Integer.MIN_VALUE);
- if (prevLetterPos != Integer.MIN_VALUE) {
- pos = prevLetterPos;
- }
- }
-
- // Do rough binary search if there are a lot of entries.
- while (end - pos > 100) {
- int tmp = (end + pos) / 2;
- cursor.moveToPosition(tmp);
- String sort_name;
- do {
- sort_name = cursor.getString(mColumnIndex);
- if (sort_name == null || sort_name.length() == 0) {
- // This should not happen, since sort_name field is created
- // automatically when syncing to a server, or creating/editing
- // the entry...
- Log.e(TAG, "sort_name is null or its length is 0. index: " + tmp);
- cursor.moveToNext();
- tmp++;
- continue;
- }
- break;
- } while (tmp < end);
- if (tmp == end) {
- break;
- }
- int codePoint = sort_name.codePointAt(0);
- if (codePoint < getSectionCodePoint(sectionIndex)) {
- pos = tmp;
- } else {
- end = tmp;
- }
- }
-
- for (cursor.moveToPosition(pos); !cursor.isAfterLast(); ++pos, cursor.moveToNext()) {
- String sort_name = cursor.getString(mColumnIndex);
- if (sort_name == null || sort_name.length() == 0) {
- // This should not happen, since sort_name field is created
- // automatically when syncing to a server, or creating/editing
- // the entry...
- Log.e(TAG, "sort_name is null or its length is 0. index: " + pos);
- continue;
- }
- int codePoint = sort_name.codePointAt(0);
- if (codePoint >= getSectionCodePoint(sectionIndex)) {
- break;
- }
- }
-
- stringMap.put(key, pos);
- cursor.moveToPosition(savedCursorPos);
- return pos;
- }
-
- public int getSectionForPosition(int position) {
- // Not used in Contacts. Ignore for now.
- return 0;
- }
-
- public Object[] getSections() {
- return sSections;
- }
-
- @Override
- public void onChanged() {
- super.onChanged();
- mStringMap.clear();
- }
-
- @Override
- public void onInvalidated() {
- super.onInvalidated();
- mStringMap.clear();
- }
-}
diff --git a/src/com/android/contacts/PhoneDisambigDialog.java b/src/com/android/contacts/PhoneDisambigDialog.java
index b727c77..d8cb14e 100644
--- a/src/com/android/contacts/PhoneDisambigDialog.java
+++ b/src/com/android/contacts/PhoneDisambigDialog.java
@@ -16,10 +16,11 @@
package com.android.contacts;
-import java.util.ArrayList;
-import java.util.List;
-
import com.android.contacts.Collapser.Collapsible;
+import com.android.contacts.model.ContactsSource;
+import com.android.contacts.model.Sources;
+import com.android.contacts.model.ContactsSource.DataKind;
+import com.android.contacts.model.ContactsSource.StringInflater;
import android.app.AlertDialog;
import android.content.ContentUris;
@@ -28,14 +29,20 @@
import android.content.DialogInterface;
import android.database.Cursor;
import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.telephony.PhoneNumberUtils;
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.ListAdapter;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* Class used for displaying a dialog with a list of phone numbers of which
@@ -64,7 +71,7 @@
mPhoneItemList = makePhoneItemsList(phonesCursor);
Collapser.collapseList(mPhoneItemList);
- mPhonesAdapter = new PhonesAdapter(mContext, mPhoneItemList);
+ mPhonesAdapter = new PhonesAdapter(mContext, mPhoneItemList, mSendSms);
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
@@ -127,21 +134,55 @@
}
private static class PhonesAdapter extends ArrayAdapter<PhoneItem> {
+ private final boolean sendSms;
+ private final Sources mSources;
- public PhonesAdapter(Context context, List<PhoneItem> objects) {
- super(context, android.R.layout.simple_dropdown_item_1line,
- android.R.id.text1, objects);
+ public PhonesAdapter(Context context, List<PhoneItem> objects, boolean sendSms) {
+ super(context, R.layout.phone_disambig_item,
+ android.R.id.text2, objects);
+ this.sendSms = sendSms;
+ mSources = Sources.getInstance(context);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View view = super.getView(position, convertView, parent);
+
+ PhoneItem item = getItem(position);
+ ContactsSource source = mSources.getInflatedSource(item.accountType,
+ ContactsSource.LEVEL_SUMMARY);
+
+ // Obtain a string representation of the phone type specific to the
+ // ContactSource associated with that phone number
+ TextView typeView = (TextView)view.findViewById(android.R.id.text1);
+ DataKind kind = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ if (kind != null) {
+ ContentValues values = new ContentValues();
+ values.put(Phone.TYPE, item.type);
+ values.put(Phone.LABEL, item.label);
+ StringInflater header = sendSms ? kind.actionAltHeader : kind.actionHeader;
+ typeView.setText(header.inflateUsing(getContext(), values));
+ } else {
+ typeView.setText(R.string.call_other);
+ }
+ return view;
}
}
private class PhoneItem implements Collapsible<PhoneItem> {
- String phoneNumber;
- long id;
+ final long id;
+ final String phoneNumber;
+ final String accountType;
+ final long type;
+ final String label;
- public PhoneItem(String newPhoneNumber, long newId) {
- phoneNumber = newPhoneNumber;
- id = newId;
+ public PhoneItem(long id, String phoneNumber, String accountType, int type, String label) {
+ this.id = id;
+ this.phoneNumber = (phoneNumber != null ? phoneNumber : "");
+ this.accountType = accountType;
+ this.type = type;
+ this.label = label;
}
public boolean collapseWith(PhoneItem phoneItem) {
@@ -160,6 +201,7 @@
return false;
}
+ @Override
public String toString() {
return phoneNumber;
}
@@ -172,7 +214,12 @@
while (phonesCursor.moveToNext()) {
long id = phonesCursor.getLong(phonesCursor.getColumnIndex(Data._ID));
String phone = phonesCursor.getString(phonesCursor.getColumnIndex(Phone.NUMBER));
- phoneList.add(new PhoneItem(phone, id));
+ String accountType =
+ phonesCursor.getString(phonesCursor.getColumnIndex(RawContacts.ACCOUNT_TYPE));
+ int type = phonesCursor.getInt(phonesCursor.getColumnIndex(Phone.TYPE));
+ String label = phonesCursor.getString(phonesCursor.getColumnIndex(Phone.LABEL));
+
+ phoneList.add(new PhoneItem(id, phone, accountType, type, label));
}
return phoneList;
diff --git a/src/com/android/contacts/PinnedHeaderListView.java b/src/com/android/contacts/PinnedHeaderListView.java
new file mode 100644
index 0000000..9d1391b
--- /dev/null
+++ b/src/com/android/contacts/PinnedHeaderListView.java
@@ -0,0 +1,182 @@
+/*
+ * 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.Canvas;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+
+/**
+ * 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 ListView {
+
+ /**
+ * Adapter interface. The list adapter must implement this interface.
+ */
+ public interface PinnedHeaderAdapter {
+
+ /**
+ * Pinned header state: don't show the header.
+ */
+ public static final int PINNED_HEADER_GONE = 0;
+
+ /**
+ * Pinned header state: show the header at the top of the list.
+ */
+ public static final int PINNED_HEADER_VISIBLE = 1;
+
+ /**
+ * Pinned header state: show the header. If the header extends beyond
+ * the bottom of the first shown element, push it up and clip.
+ */
+ public static final int PINNED_HEADER_PUSHED_UP = 2;
+
+ /**
+ * Computes the desired state of the pinned header for the given
+ * position of the first visible list item. Allowed return values are
+ * {@link #PINNED_HEADER_GONE}, {@link #PINNED_HEADER_VISIBLE} or
+ * {@link #PINNED_HEADER_PUSHED_UP}.
+ */
+ int getPinnedHeaderState(int position);
+
+ /**
+ * Configures the pinned header view to match the first visible list item.
+ *
+ * @param header pinned header view.
+ * @param position position of the first visible list item.
+ * @param alpha fading of the header view, between 0 and 255.
+ */
+ void configurePinnedHeader(View header, int position, int alpha);
+ }
+
+ private static final int MAX_ALPHA = 255;
+
+ private PinnedHeaderAdapter mAdapter;
+ private View mHeaderView;
+ private boolean mHeaderViewVisible;
+
+ private int mHeaderViewWidth;
+
+ private int mHeaderViewHeight;
+
+ public PinnedHeaderListView(Context context) {
+ super(context);
+ }
+
+ public PinnedHeaderListView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public PinnedHeaderListView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ public void setPinnedHeaderView(View view) {
+ mHeaderView = view;
+
+ // Disable vertical fading when the pinned header is present
+ // TODO change ListView to allow separate measures for top and bottom fading edge;
+ // in this particular case we would like to disable the top, but not the bottom edge.
+ if (mHeaderView != null) {
+ setFadingEdgeLength(0);
+ }
+ requestLayout();
+ }
+
+ @Override
+ public void setAdapter(ListAdapter adapter) {
+ super.setAdapter(adapter);
+ mAdapter = (PinnedHeaderAdapter)adapter;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ if (mHeaderView != null) {
+ measureChild(mHeaderView, widthMeasureSpec, heightMeasureSpec);
+ mHeaderViewWidth = mHeaderView.getMeasuredWidth();
+ mHeaderViewHeight = mHeaderView.getMeasuredHeight();
+ }
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ if (mHeaderView != null) {
+ mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight);
+ configureHeaderView(getFirstVisiblePosition());
+ }
+ }
+
+ public void configureHeaderView(int position) {
+ if (mHeaderView == null) {
+ return;
+ }
+
+ int state = mAdapter.getPinnedHeaderState(position);
+ switch (state) {
+ case PinnedHeaderAdapter.PINNED_HEADER_GONE: {
+ mHeaderViewVisible = false;
+ break;
+ }
+
+ case PinnedHeaderAdapter.PINNED_HEADER_VISIBLE: {
+ mAdapter.configurePinnedHeader(mHeaderView, position, MAX_ALPHA);
+ if (mHeaderView.getTop() != 0) {
+ mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight);
+ }
+ mHeaderViewVisible = true;
+ break;
+ }
+
+ case PinnedHeaderAdapter.PINNED_HEADER_PUSHED_UP: {
+ View firstView = getChildAt(0);
+ int bottom = firstView.getBottom();
+ int itemHeight = firstView.getHeight();
+ int headerHeight = mHeaderView.getHeight();
+ int y;
+ int alpha;
+ if (bottom < headerHeight) {
+ y = (bottom - headerHeight);
+ alpha = MAX_ALPHA * (headerHeight + y) / headerHeight;
+ } else {
+ y = 0;
+ alpha = MAX_ALPHA;
+ }
+ mAdapter.configurePinnedHeader(mHeaderView, position, alpha);
+ if (mHeaderView.getTop() != y) {
+ mHeaderView.layout(0, y, mHeaderViewWidth, mHeaderViewHeight + y);
+ }
+ mHeaderViewVisible = true;
+ break;
+ }
+ }
+ }
+
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ super.dispatchDraw(canvas);
+ if (mHeaderViewVisible) {
+ drawChild(canvas, mHeaderView, getDrawingTime());
+ }
+ }
+}
diff --git a/src/com/android/contacts/ProgressShower.java b/src/com/android/contacts/ProgressShower.java
index c1a2493..a5ad2a2 100644
--- a/src/com/android/contacts/ProgressShower.java
+++ b/src/com/android/contacts/ProgressShower.java
@@ -18,12 +18,12 @@
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Handler;
-import android.pim.vcard.ContactStruct;
-import android.pim.vcard.EntryHandler;
+import android.pim.vcard.VCardEntry;
+import android.pim.vcard.VCardEntryHandler;
import android.pim.vcard.VCardConfig;
import android.util.Log;
-public class ProgressShower implements EntryHandler {
+public class ProgressShower implements VCardEntryHandler {
public static final String LOG_TAG = "vcard.ProgressShower";
private final Context mContext;
@@ -34,9 +34,9 @@
private long mTime;
private class ShowProgressRunnable implements Runnable {
- private ContactStruct mContact;
+ private VCardEntry mContact;
- public ShowProgressRunnable(ContactStruct contact) {
+ public ShowProgressRunnable(VCardEntry contact) {
mContact = contact;
}
@@ -57,10 +57,10 @@
mProgressMessage = progressMessage;
}
- public void onParsingStart() {
+ public void onStart() {
}
- public void onEntryCreated(ContactStruct contactStruct) {
+ public void onEntryCreated(VCardEntry contactStruct) {
long start = System.currentTimeMillis();
if (!contactStruct.isIgnorable()) {
@@ -78,7 +78,7 @@
mTime += System.currentTimeMillis() - start;
}
- public void onParsingEnd() {
+ public void onEnd() {
if (VCardConfig.showPerformanceLog()) {
Log.d(LOG_TAG,
String.format("Time to progress a dialog: %d ms", mTime));
diff --git a/src/com/android/contacts/RecentCallsListActivity.java b/src/com/android/contacts/RecentCallsListActivity.java
index 2ca2096..ccd1ce3 100644
--- a/src/com/android/contacts/RecentCallsListActivity.java
+++ b/src/com/android/contacts/RecentCallsListActivity.java
@@ -16,6 +16,9 @@
package com.android.contacts;
+import com.android.internal.telephony.CallerInfo;
+import com.android.internal.telephony.ITelephony;
+
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
@@ -27,9 +30,11 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
+import android.database.CharArrayBuffer;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabaseCorruptException;
import android.database.sqlite.SQLiteDiskIOException;
+import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteFullException;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -42,10 +47,10 @@
import android.os.SystemClock;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
+import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.PhoneLookup;
import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.Contacts.Intents.Insert;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.SpannableStringBuilder;
@@ -54,6 +59,7 @@
import android.util.Log;
import android.view.ContextMenu;
import android.view.KeyEvent;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -64,16 +70,12 @@
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
-import android.widget.ResourceCursorAdapter;
import android.widget.TextView;
-import com.android.internal.telephony.CallerInfo;
-import com.android.internal.telephony.ITelephony;
-
+import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Locale;
-import java.lang.ref.WeakReference;
/**
* Displays a list of call log entries.
@@ -125,6 +127,8 @@
private static final int QUERY_TOKEN = 53;
private static final int UPDATE_TOKEN = 54;
+ private static final int DIALOG_CONFIRM_DELETE_ALL = 1;
+
RecentCallsAdapter mAdapter;
private QueryHandler mQueryHandler;
String mVoiceMailNumber;
@@ -147,6 +151,8 @@
TextView dateView;
ImageView iconView;
View callView;
+ ImageView groupIndicator;
+ TextView groupSize;
}
static final class CallerInfoQuery {
@@ -175,7 +181,7 @@
private static int sFormattingType = FORMATTING_TYPE_INVALID;
/** Adapter class to fill in data for the Call Log */
- final class RecentCallsAdapter extends ResourceCursorAdapter
+ final class RecentCallsAdapter extends GroupingListAdapter
implements Runnable, ViewTreeObserver.OnPreDrawListener, View.OnClickListener {
HashMap<String,ContactInfo> mContactInfo;
private final LinkedList<CallerInfoQuery> mRequests;
@@ -193,6 +199,12 @@
private Drawable mDrawableOutgoing;
private Drawable mDrawableMissed;
+ /**
+ * Reusable char array buffers.
+ */
+ private CharArrayBuffer mBuffer1 = new CharArrayBuffer(128);
+ private CharArrayBuffer mBuffer2 = new CharArrayBuffer(128);
+
public void onClick(View view) {
String number = (String) view.getTag();
if (!TextUtils.isEmpty(number)) {
@@ -224,7 +236,7 @@
};
public RecentCallsAdapter() {
- super(RecentCallsListActivity.this, R.layout.recent_calls_list_item, null);
+ super(RecentCallsListActivity.this);
mContactInfo = new HashMap<String,ContactInfo>();
mRequests = new LinkedList<CallerInfoQuery>();
@@ -322,16 +334,13 @@
}
}
- private void queryContactInfo(CallerInfoQuery ciq) {
+ private boolean queryContactInfo(CallerInfoQuery ciq) {
// First check if there was a prior request for the same number
// that was already satisfied
ContactInfo info = mContactInfo.get(ciq.number);
+ boolean needNotify = false;
if (info != null && info != ContactInfo.EMPTY) {
- synchronized (mRequests) {
- if (mRequests.isEmpty()) {
- mHandler.sendEmptyMessage(REDRAW);
- }
- }
+ return true;
} else {
Cursor phonesCursor =
RecentCallsListActivity.this.getContentResolver().query(
@@ -353,11 +362,7 @@
mContactInfo.put(ciq.number, info);
// Inform list to update this item, if in view
- synchronized (mRequests) {
- if (mRequests.isEmpty()) {
- mHandler.sendEmptyMessage(REDRAW);
- }
- }
+ needNotify = true;
}
phonesCursor.close();
}
@@ -365,6 +370,7 @@
if (info != null) {
updateCallLog(ciq, info);
}
+ return needNotify;
}
/*
@@ -372,12 +378,17 @@
* @see java.lang.Runnable#run()
*/
public void run() {
+ boolean needNotify = false;
while (!mDone) {
CallerInfoQuery ciq = null;
synchronized (mRequests) {
if (!mRequests.isEmpty()) {
ciq = mRequests.removeFirst();
} else {
+ if (needNotify) {
+ needNotify = false;
+ mHandler.sendEmptyMessage(REDRAW);
+ }
try {
mRequests.wait(1000);
} catch (InterruptedException ie) {
@@ -385,15 +396,123 @@
}
}
}
- if (ciq != null) {
- queryContactInfo(ciq);
+ if (ciq != null && queryContactInfo(ciq)) {
+ needNotify = true;
}
}
}
@Override
- public View newView(Context context, Cursor cursor, ViewGroup parent) {
- View view = super.newView(context, cursor, parent);
+ protected void addGroups(Cursor cursor) {
+
+ int count = cursor.getCount();
+ if (count == 0) {
+ return;
+ }
+
+ int groupItemCount = 1;
+
+ CharArrayBuffer currentValue = mBuffer1;
+ CharArrayBuffer value = mBuffer2;
+ cursor.moveToFirst();
+ cursor.copyStringToBuffer(NUMBER_COLUMN_INDEX, currentValue);
+ int currentCallType = cursor.getInt(CALL_TYPE_COLUMN_INDEX);
+ for (int i = 1; i < count; i++) {
+ cursor.moveToNext();
+ cursor.copyStringToBuffer(NUMBER_COLUMN_INDEX, value);
+ boolean sameNumber = equalPhoneNumbers(value, currentValue);
+
+ // Group adjacent calls with the same number. Make an exception
+ // for the latest item if it was a missed call. We don't want
+ // a missed call to be hidden inside a group.
+ if (sameNumber && currentCallType != Calls.MISSED_TYPE) {
+ groupItemCount++;
+ } else {
+ if (groupItemCount > 1) {
+ addGroup(i - groupItemCount, groupItemCount, false);
+ }
+
+ groupItemCount = 1;
+
+ // Swap buffers
+ CharArrayBuffer temp = currentValue;
+ currentValue = value;
+ value = temp;
+
+ // If we have just examined a row following a missed call, make
+ // sure that it is grouped with subsequent calls from the same number
+ // even if it was also missed.
+ if (sameNumber && currentCallType == Calls.MISSED_TYPE) {
+ currentCallType = 0; // "not a missed call"
+ } else {
+ currentCallType = cursor.getInt(CALL_TYPE_COLUMN_INDEX);
+ }
+ }
+ }
+ if (groupItemCount > 1) {
+ addGroup(count - groupItemCount, groupItemCount, false);
+ }
+ }
+
+ protected boolean equalPhoneNumbers(CharArrayBuffer buffer1, CharArrayBuffer buffer2) {
+
+ // TODO add PhoneNumberUtils.compare(CharSequence, CharSequence) to avoid
+ // string allocation
+ return PhoneNumberUtils.compare(new String(buffer1.data, 0, buffer1.sizeCopied),
+ new String(buffer2.data, 0, buffer2.sizeCopied));
+ }
+
+
+ @Override
+ protected View newStandAloneView(Context context, ViewGroup parent) {
+ LayoutInflater inflater =
+ (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.recent_calls_list_item, parent, false);
+ findAndCacheViews(view);
+ return view;
+ }
+
+ @Override
+ protected void bindStandAloneView(View view, Context context, Cursor cursor) {
+ bindView(context, view, cursor);
+ }
+
+ @Override
+ protected View newChildView(Context context, ViewGroup parent) {
+ LayoutInflater inflater =
+ (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.recent_calls_list_child_item, parent, false);
+ findAndCacheViews(view);
+ return view;
+ }
+
+ @Override
+ protected void bindChildView(View view, Context context, Cursor cursor) {
+ bindView(context, view, cursor);
+ }
+
+ @Override
+ protected View newGroupView(Context context, ViewGroup parent) {
+ LayoutInflater inflater =
+ (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.recent_calls_list_group_item, parent, false);
+ findAndCacheViews(view);
+ return view;
+ }
+
+ @Override
+ protected void bindGroupView(View view, Context context, Cursor cursor, int groupSize,
+ boolean expanded) {
+ final RecentCallsListItemViews views = (RecentCallsListItemViews) view.getTag();
+ int groupIndicator = expanded
+ ? com.android.internal.R.drawable.expander_ic_maximized
+ : com.android.internal.R.drawable.expander_ic_minimized;
+ views.groupIndicator.setImageResource(groupIndicator);
+ views.groupSize.setText("(" + groupSize + ")");
+ bindView(context, view, cursor);
+ }
+
+ private void findAndCacheViews(View view) {
// Get the views to bind to
RecentCallsListItemViews views = new RecentCallsListItemViews();
@@ -404,15 +523,12 @@
views.iconView = (ImageView) view.findViewById(R.id.call_type_icon);
views.callView = view.findViewById(R.id.call_icon);
views.callView.setOnClickListener(this);
-
+ views.groupIndicator = (ImageView) view.findViewById(R.id.groupIndicator);
+ views.groupSize = (TextView) view.findViewById(R.id.groupSize);
view.setTag(views);
-
- return view;
}
-
- @Override
- public void bindView(View view, Context context, Cursor c) {
+ public void bindView(Context context, View view, Cursor c) {
final RecentCallsListItemViews views = (RecentCallsListItemViews) view.getTag();
String number = c.getString(NUMBER_COLUMN_INDEX);
@@ -505,7 +621,6 @@
views.labelView.setVisibility(View.GONE);
}
- int type = c.getInt(CALL_TYPE_COLUMN_INDEX);
long date = c.getLong(DATE_COLUMN_INDEX);
// Set the date/time field by mixing relative and absolute times.
@@ -514,19 +629,22 @@
views.dateView.setText(DateUtils.getRelativeTimeSpanString(date,
System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS, flags));
- // Set the icon
- switch (type) {
- case Calls.INCOMING_TYPE:
- views.iconView.setImageDrawable(mDrawableIncoming);
- break;
+ if (views.iconView != null) {
+ int type = c.getInt(CALL_TYPE_COLUMN_INDEX);
+ // Set the icon
+ switch (type) {
+ case Calls.INCOMING_TYPE:
+ views.iconView.setImageDrawable(mDrawableIncoming);
+ break;
- case Calls.OUTGOING_TYPE:
- views.iconView.setImageDrawable(mDrawableOutgoing);
- break;
+ case Calls.OUTGOING_TYPE:
+ views.iconView.setImageDrawable(mDrawableOutgoing);
+ break;
- case Calls.MISSED_TYPE:
- views.iconView.setImageDrawable(mDrawableMissed);
- break;
+ case Calls.MISSED_TYPE:
+ views.iconView.setImageDrawable(mDrawableMissed);
+ break;
+ }
}
// Listen for the first draw
@@ -639,10 +757,7 @@
protected void onDestroy() {
super.onDestroy();
mAdapter.stopRequestProcessing();
- Cursor cursor = mAdapter.getCursor();
- if (cursor != null && !cursor.isClosed()) {
- cursor.close();
- }
+ mAdapter.changeCursor(null);
}
@Override
@@ -717,31 +832,6 @@
}
@Override
- protected Dialog onCreateDialog(int id) {
- Dialog dialog = null;
- switch (id) {
- case R.id.dialog_clear_log:
- DialogInterface.OnClickListener clearLogDialogListener = new OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- getContentResolver().delete(Calls.CONTENT_URI, null, null);
- startQuery();
- }
- };
-
- dialog = new AlertDialog.Builder(this)
- .setTitle(R.string.clearConfirmation_title)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setMessage(R.string.clearLogConfirmation)
- .setNegativeButton(android.R.string.cancel, null)
- .setPositiveButton(android.R.string.ok, clearLogDialogListener)
- .setCancelable(false)
- .create();
- break;
- }
- return dialog;
- }
-
- @Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_ITEM_DELETE_ALL, 0, R.string.recentCalls_deleteAll)
.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
@@ -815,10 +905,34 @@
}
@Override
+ protected Dialog onCreateDialog(int id, Bundle args) {
+ switch (id) {
+ case DIALOG_CONFIRM_DELETE_ALL:
+ return new AlertDialog.Builder(this)
+ .setTitle(R.string.clearCallLogConfirmation_title)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage(R.string.clearCallLogConfirmation)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(android.R.string.ok, new OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ getContentResolver().delete(Calls.CONTENT_URI, null, null);
+ // TODO The change notification should do this automatically, but it
+ // isn't working right now. Remove this when the change notification
+ // is working properly.
+ startQuery();
+ }
+ })
+ .setCancelable(false)
+ .create();
+ }
+ return null;
+ }
+
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ITEM_DELETE_ALL: {
- showDialog(R.id.dialog_clear_log);
+ showDialog(DIALOG_CONFIRM_DELETE_ALL);
return true;
}
@@ -845,12 +959,24 @@
switch (item.getItemId()) {
case MENU_ITEM_DELETE: {
- Cursor cursor = mAdapter.getCursor();
- if (cursor != null) {
- cursor.moveToPosition(menuInfo.position);
- cursor.deleteRow();
+ Cursor cursor = (Cursor)mAdapter.getItem(menuInfo.position);
+ int groupSize = 1;
+ if (mAdapter.isGroupHeader(menuInfo.position)) {
+ groupSize = mAdapter.getGroupSize(menuInfo.position);
}
- return true;
+
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < groupSize; i++) {
+ if (i != 0) {
+ sb.append(",");
+ cursor.moveToNext();
+ }
+ long id = cursor.getLong(ID_COLUMN_INDEX);
+ sb.append(id);
+ }
+
+ getContentResolver().delete(Calls.CONTENT_URI, Calls._ID + " IN (" + sb + ")",
+ null);
}
}
return super.onContextItemSelected(item);
@@ -972,8 +1098,22 @@
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
- Intent intent = new Intent(this, CallDetailActivity.class);
- intent.setData(ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, id));
- startActivity(intent);
+ if (mAdapter.isGroupHeader(position)) {
+ mAdapter.toggleGroup(position);
+ } else {
+ Intent intent = new Intent(this, CallDetailActivity.class);
+ intent.setData(ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, id));
+ startActivity(intent);
+ }
+ }
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
}
}
diff --git a/src/com/android/contacts/SearchEditText.java b/src/com/android/contacts/SearchEditText.java
new file mode 100644
index 0000000..7683f23
--- /dev/null
+++ b/src/com/android/contacts/SearchEditText.java
@@ -0,0 +1,69 @@
+/*
+ * 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.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.widget.EditText;
+
+/**
+ * A custom text editor that helps automatically dismiss the activity along with the soft
+ * keyboard.
+ */
+public class SearchEditText extends EditText {
+
+ private boolean mMagnifyingGlassShown = true;
+ private Drawable mMagnifyingGlass;
+
+ public SearchEditText(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mMagnifyingGlass = getCompoundDrawables()[2];
+ }
+
+ /**
+ * Conditionally shows a magnifying glass icon on the right side of the text field
+ * when the text it empty.
+ */
+ @Override
+ public boolean onPreDraw() {
+ boolean emptyText = TextUtils.isEmpty(getText());
+ if (mMagnifyingGlassShown != emptyText) {
+ mMagnifyingGlassShown = emptyText;
+ if (mMagnifyingGlassShown) {
+ setCompoundDrawables(null, null, mMagnifyingGlass, null);
+ } else {
+ setCompoundDrawables(null, null, null, null);
+ }
+ return false;
+ }
+ return super.onPreDraw();
+ }
+
+ /**
+ * Forwards the onKeyPreIme call to the view's activity.
+ */
+ @Override
+ public boolean onKeyPreIme(int keyCode, KeyEvent event) {
+ if (((ContactsListActivity)getContext()).onKeyPreIme(keyCode, event)) {
+ return true;
+ }
+ return super.onKeyPreIme(keyCode, event);
+ }
+}
diff --git a/src/com/android/contacts/SearchResultsActivity.java b/src/com/android/contacts/SearchResultsActivity.java
new file mode 100644
index 0000000..09f0014
--- /dev/null
+++ b/src/com/android/contacts/SearchResultsActivity.java
@@ -0,0 +1,23 @@
+/*
+ * 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;
+
+/**
+ * The activity that displays the list of contact search results. We need a separate
+ * class because it uses a different theme from {@link ContactsListActivity}.
+ */
+public class SearchResultsActivity extends ContactsListActivity {
+}
diff --git a/src/com/android/contacts/SpecialCharSequenceMgr.java b/src/com/android/contacts/SpecialCharSequenceMgr.java
index 644b66f..140e7d4 100644
--- a/src/com/android/contacts/SpecialCharSequenceMgr.java
+++ b/src/com/android/contacts/SpecialCharSequenceMgr.java
@@ -41,6 +41,10 @@
/**
* Helper class to listen for some magic character sequences
* that are handled specially by the dialer.
+ *
+ * TODO: there's lots of duplicated code between this class and the
+ * corresponding class under apps/Phone. Let's figure out a way to
+ * unify these two classes (in the framework? in a common shared library?)
*/
public class SpecialCharSequenceMgr {
private static final String TAG = "SpecialCharSequenceMgr";
diff --git a/src/com/android/contacts/SplitAggregateView.java b/src/com/android/contacts/SplitAggregateView.java
index ed78fd9..b85a4ab 100644
--- a/src/com/android/contacts/SplitAggregateView.java
+++ b/src/com/android/contacts/SplitAggregateView.java
@@ -18,7 +18,6 @@
import com.android.contacts.model.ContactsSource;
import com.android.contacts.model.Sources;
-import com.google.common.util.text.TextUtil;
import android.content.Context;
import android.content.pm.PackageManager;
diff --git a/src/com/android/contacts/TextHighlightingAnimation.java b/src/com/android/contacts/TextHighlightingAnimation.java
new file mode 100644
index 0000000..e35ae1e
--- /dev/null
+++ b/src/com/android/contacts/TextHighlightingAnimation.java
@@ -0,0 +1,301 @@
+/*
+ * 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 com.android.internal.R;
+
+import android.database.CharArrayBuffer;
+import android.graphics.Color;
+import android.os.Handler;
+import android.text.Spanned;
+import android.text.TextPaint;
+import android.text.style.CharacterStyle;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+
+/**
+ * An animation that alternately dims and brightens the non-highlighted portion of text.
+ */
+public abstract class TextHighlightingAnimation implements Runnable {
+
+ private static final int MAX_ALPHA = 255;
+ private static final int MIN_ALPHA = 50;
+
+ private AccelerateInterpolator ACCELERATE_INTERPOLATOR = new AccelerateInterpolator();
+ private DecelerateInterpolator DECELERATE_INTERPOLATOR = new DecelerateInterpolator();
+
+ private final static DimmingSpan[] sEmptySpans = new DimmingSpan[0];
+
+ /**
+ * Frame rate expressed a number of millis between frames.
+ */
+ private static final long FRAME_RATE = 50;
+
+ private DimmingSpan mDimmingSpan;
+ private Handler mHandler;
+ private boolean mAnimating;
+ private boolean mDimming;
+ private long mTargetTime;
+ private final int mDuration;
+
+ /**
+ * A Spanned that highlights a part of text by dimming another part of that text.
+ */
+ public class TextWithHighlighting implements Spanned {
+
+ private final DimmingSpan[] mSpans;
+ private boolean mDimmingEnabled;
+ private CharArrayBuffer mText;
+ private int mDimmingSpanStart;
+ private int mDimmingSpanEnd;
+ private String mString;
+
+ public TextWithHighlighting() {
+ mSpans = new DimmingSpan[] { mDimmingSpan };
+ }
+
+ public void setText(CharArrayBuffer baseText, CharArrayBuffer highlightedText) {
+ mText = baseText;
+
+ // TODO figure out a way to avoid string allocation
+ mString = new String(mText.data, 0, mText.sizeCopied);
+
+ int index = indexOf(baseText, highlightedText);
+
+ if (index == 0 || index == -1) {
+ mDimmingEnabled = false;
+ } else {
+ mDimmingEnabled = true;
+ mDimmingSpanStart = 0;
+ mDimmingSpanEnd = index;
+ }
+ }
+
+ /**
+ * An implementation of indexOf on CharArrayBuffers that finds the first match of
+ * the start of buffer2 in buffer1. For example, indexOf("abcd", "cdef") == 2
+ */
+ private int indexOf(CharArrayBuffer buffer1, CharArrayBuffer buffer2) {
+ char[] string1 = buffer1.data;
+ char[] string2 = buffer2.data;
+ int count1 = buffer1.sizeCopied;
+ int count2 = buffer2.sizeCopied;
+
+ // Ignore matching tails of the two buffers
+ while (count1 > 0 && count2 > 0 && string1[count1 - 1] == string2[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 (string1[i+j] != string2[j]) {
+ break;
+ }
+ }
+ if (j == size) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+
+ @SuppressWarnings("unchecked")
+ public <T> T[] getSpans(int start, int end, Class<T> type) {
+ if (mDimmingEnabled) {
+ return (T[])mSpans;
+ } else {
+ return (T[])sEmptySpans;
+ }
+ }
+
+ public int getSpanStart(Object tag) {
+ // We only have one span - no need to check the tag parameter
+ return mDimmingSpanStart;
+ }
+
+ public int getSpanEnd(Object tag) {
+ // We only have one span - no need to check the tag parameter
+ return mDimmingSpanEnd;
+ }
+
+ public int getSpanFlags(Object tag) {
+ // String is immutable - flags not needed
+ return 0;
+ }
+
+ public int nextSpanTransition(int start, int limit, Class type) {
+ // Never called since we only have one span
+ return 0;
+ }
+
+ public char charAt(int index) {
+ return mText.data[index];
+ }
+
+ public int length() {
+ return mText.sizeCopied;
+ }
+
+ public CharSequence subSequence(int start, int end) {
+ // Never called - implementing for completeness
+ return new String(mText.data, start, end);
+ }
+
+ @Override
+ public String toString() {
+ return mString;
+ }
+ }
+
+ /**
+ * A Span that modifies alpha of the default foreground color.
+ */
+ private static class DimmingSpan extends CharacterStyle {
+ private int mAlpha;
+
+ public void setAlpha(int alpha) {
+ mAlpha = alpha;
+ }
+
+ @Override
+ public void updateDrawState(TextPaint ds) {
+
+ // Only dim the text in the basic state; not selected, focused or pressed
+ int[] states = ds.drawableState;
+ if (states != null) {
+ int count = states.length;
+ for (int i = 0; i < count; i++) {
+ switch (states[i]) {
+ case R.attr.state_pressed:
+ case R.attr.state_selected:
+ case R.attr.state_focused:
+ // We can simply return, because the supplied text
+ // paint is already configured with defaults.
+ return;
+ }
+ }
+ }
+
+ int color = ds.getColor();
+ color = Color.argb(mAlpha, Color.red(color), Color.green(color), Color.blue(color));
+ ds.setColor(color);
+ }
+ }
+
+ /**
+ * Constructor.
+ */
+ public TextHighlightingAnimation(int duration) {
+ mDuration = duration;
+ mHandler = new Handler();
+ mDimmingSpan = new DimmingSpan();
+ mDimmingSpan.setAlpha(MAX_ALPHA);
+ }
+
+ /**
+ * Returns a Spanned that can be used by a text view to show text with highlighting.
+ */
+ public TextWithHighlighting createTextWithHighlighting() {
+ return new TextWithHighlighting();
+ }
+
+ /**
+ * Override and invalidate (redraw) TextViews showing {@link TextWithHighlighting}.
+ */
+ protected abstract void invalidate();
+
+ /**
+ * Starts the highlighting animation, which will dim portions of text.
+ */
+ public void startHighlighting() {
+ startAnimation(true);
+ }
+
+ /**
+ * Starts un-highlighting animation, which will brighten the dimmed portions of text
+ * to the brightness level of the rest of text.
+ */
+ public void stopHighlighting() {
+ startAnimation(false);
+ }
+
+ /**
+ * Called when the animation starts.
+ */
+ protected void onAnimationStarted() {
+ }
+
+ /**
+ * Called when the animation has stopped.
+ */
+ protected void onAnimationEnded() {
+ }
+
+ private void startAnimation(boolean dim) {
+ if (mDimming != dim) {
+ mDimming = dim;
+ long now = System.currentTimeMillis();
+ if (!mAnimating) {
+ mAnimating = true;
+ mTargetTime = now + mDuration;
+ onAnimationStarted();
+ mHandler.post(this);
+ } else {
+
+ // If we have started dimming, reverse the direction and adjust the target
+ // time accordingly.
+ mTargetTime = (now + mDuration) - (mTargetTime - now);
+ }
+ }
+ }
+
+ /**
+ * Animation step.
+ */
+ public void run() {
+ long now = System.currentTimeMillis();
+ long timeLeft = mTargetTime - now;
+ if (timeLeft < 0) {
+ mDimmingSpan.setAlpha(mDimming ? MIN_ALPHA : MAX_ALPHA);
+ mAnimating = false;
+ onAnimationEnded();
+ return;
+ }
+
+ // Start=1, end=0
+ float virtualTime = (float)timeLeft / mDuration;
+ if (mDimming) {
+ float interpolatedTime = DECELERATE_INTERPOLATOR.getInterpolation(virtualTime);
+ mDimmingSpan.setAlpha((int)(MIN_ALPHA + (MAX_ALPHA-MIN_ALPHA) * interpolatedTime));
+ } else {
+ float interpolatedTime = ACCELERATE_INTERPOLATOR.getInterpolation(virtualTime);
+ mDimmingSpan.setAlpha((int)(MIN_ALPHA + (MAX_ALPHA-MIN_ALPHA) * (1-interpolatedTime)));
+ }
+
+ invalidate();
+
+ // Repeat
+ mHandler.postDelayed(this, FRAME_RATE);
+ }
+}
diff --git a/src/com/android/contacts/TwelveKeyDialer.java b/src/com/android/contacts/TwelveKeyDialer.java
index 2d8b4e6..07927de 100644
--- a/src/com/android/contacts/TwelveKeyDialer.java
+++ b/src/com/android/contacts/TwelveKeyDialer.java
@@ -16,10 +16,15 @@
package com.android.contacts;
+import com.android.internal.telephony.ITelephony;
+import com.android.phone.CallLogAsync;
+import com.android.phone.HapticFeedback;
+
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
@@ -29,23 +34,19 @@
import android.media.ToneGenerator;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
-import android.os.Vibrator;
-import android.provider.Contacts.Intents.Insert;
+import android.provider.Settings;
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
import android.provider.Contacts.PhonesColumns;
-import android.provider.Settings;
+import android.provider.Contacts.Intents.Insert;
import android.telephony.PhoneNumberFormattingTextWatcher;
import android.telephony.PhoneNumberUtils;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.text.Editable;
-import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.DialerKeyListener;
@@ -57,6 +58,7 @@
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
+import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
@@ -65,15 +67,14 @@
import android.widget.ListView;
import android.widget.TextView;
-import com.android.internal.telephony.ITelephony;
-
/**
* Dialer activity that displays the typical twelve key interface.
*/
+@SuppressWarnings("deprecation")
public class TwelveKeyDialer extends Activity implements View.OnClickListener,
View.OnLongClickListener, View.OnKeyListener,
AdapterView.OnItemClickListener, TextWatcher {
-
+ private static final String EMPTY_NUMBER = "";
private static final String TAG = "TwelveKeyDialer";
/** The length of DTMF tones in milliseconds */
@@ -85,9 +86,6 @@
/** Stream type used to play the DTMF tones off call, and mapped to the volume control keys */
private static final int DIAL_TONE_STREAM_TYPE = AudioManager.STREAM_MUSIC;
- /** Play the vibrate pattern only once. */
- private static final int VIBRATE_NO_REPEAT = -1;
-
private EditText mDigits;
private View mDelete;
private MenuItem mAddToContactMenuItem;
@@ -108,14 +106,17 @@
private static final int MENU_2S_PAUSE = 2;
private static final int MENU_WAIT = 3;
+ // Last number dialed, retrieved asynchronously from the call DB
+ // in onCreate. This number is displayed when the user hits the
+ // send key and cleared in onPause.
+ CallLogAsync mCallLog = new CallLogAsync();
+ private String mLastNumberDialed = EMPTY_NUMBER;
+
// determines if we want to playback local DTMF tones.
private boolean mDTMFToneEnabled;
// Vibration (haptic feedback) for dialer key presses.
- private Vibrator mVibrator;
- private boolean mVibrateOn;
- private long[] mVibratePattern;
-
+ private HapticFeedback mHaptic = new HapticFeedback();
/** Identifier for the "Add Call" intent extra. */
static final String ADD_CALL_MODE_KEY = "add_call_mode";
@@ -175,26 +176,30 @@
mDigits.getText().clear();
}
- final boolean notEmpty = mDigits.length() != 0;
- if (notEmpty) {
+ if (!isDigitsEmpty()) {
mDigits.setBackgroundDrawable(mDigitsBackground);
} else {
mDigits.setCursorVisible(false);
mDigits.setBackgroundDrawable(mDigitsEmptyBackground);
}
- updateDialAndDeleteButtonStateEnabledAttr();
+ updateDialAndDeleteButtonEnabledState();
}
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ Resources r = getResources();
+ // Do not show title in the case the device is in carmode.
+ if ((r.getConfiguration().uiMode & Configuration.UI_MODE_TYPE_MASK) ==
+ Configuration.UI_MODE_TYPE_CAR) {
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ }
// Set the content view
setContentView(getContentViewResource());
// Load up the resources for the text field.
- Resources r = getResources();
mDigitsBackground = r.getDrawable(R.drawable.btn_dial_textfield_active);
mDigitsEmptyBackground = r.getDrawable(R.drawable.btn_dial_textfield);
@@ -249,10 +254,12 @@
super.onRestoreInstanceState(icicle);
}
- // TODO: We might eventually need to make mVibrateOn come from a
- // user preference rather than a per-platform resource, in which
- // case we would need to update it in onResume() rather than here.
- initVibrationPattern(r);
+ try {
+ mHaptic.init(this, r.getBoolean(R.bool.config_enable_dialer_key_vibration));
+ } catch (Resources.NotFoundException nfe) {
+ Log.e(TAG, "Vibrate control bool missing.", nfe);
+ }
+
}
@Override
@@ -398,10 +405,17 @@
protected void onResume() {
super.onResume();
+ // Query the last dialed number. Do it first because hitting
+ // the DB is 'slow'. This call is asynchronous.
+ queryLastOutgoingCall();
+
// retrieve the DTMF tone play back setting.
mDTMFToneEnabled = Settings.System.getInt(getContentResolver(),
Settings.System.DTMF_TONE_WHEN_DIALING, 1) == 1;
+ // Retrieve the haptic feedback setting.
+ mHaptic.checkSystemSetting();
+
// if the mToneGenerator creation fails, just continue without it. It is
// a local audio signal, and is not as important as the dtmf tone itself.
synchronized(mToneGeneratorLock) {
@@ -455,7 +469,7 @@
showDialpadChooser(false);
}
- updateDialAndDeleteButtonStateEnabledAttr();
+ updateDialAndDeleteButtonEnabledState();
}
@Override
@@ -485,6 +499,9 @@
mToneGenerator = null;
}
}
+ // TODO: I wonder if we should not check if the AsyncTask that
+ // lookup the last dialed number has completed.
+ mLastNumberDialed = EMPTY_NUMBER; // Since we are going to query again, free stale number.
}
@Override
@@ -505,15 +522,16 @@
return false;
}
- CharSequence digits = mDigits.getText();
- if (digits == null || !TextUtils.isGraphic(digits)) {
+ if (isDigitsEmpty()) {
mAddToContactMenuItem.setVisible(false);
m2SecPauseMenuItem.setVisible(false);
mWaitMenuItem.setVisible(false);
} else {
+ CharSequence digits = mDigits.getText();
+
// Put the current digits string into an intent
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- intent.putExtra(Insert.PHONE, mDigits.getText());
+ intent.putExtra(Insert.PHONE, digits);
intent.setType(People.CONTENT_ITEM_TYPE);
mAddToContactMenuItem.setIntent(intent);
mAddToContactMenuItem.setVisible(true);
@@ -588,21 +606,26 @@
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_CALL: {
- if (phoneIsCdma()) {
- // If we're CDMA, regardless of where we are adding a call from (either
- // InCallScreen or Dialtacts), the user may need to send an empty
- // flash command to the network. So let's call placeCall() regardless
- // and placeCall will handle this functionality for us.
- placeCall();
- } else if (mIsAddCallMode && (TextUtils.isEmpty(mDigits.getText().toString()))) {
- // if we are adding a call from the InCallScreen and the phone
- // number entered is empty, we just close the dialer to expose
- // the InCallScreen under it.
+ // TODO: In dialButtonPressed we do some of these
+ // tests again. We should try to consolidate them in
+ // one place.
+ if (!phoneIsCdma() && mIsAddCallMode && isDigitsEmpty()) {
+ // For CDMA phones, we always call
+ // dialButtonPressed() because we may need to send
+ // an empty flash command to the network.
+ // Otherwise, if we are adding a call from the
+ // InCallScreen and the phone number entered is
+ // empty, we just close the dialer to expose the
+ // InCallScreen under it.
finish();
- } else {
- // otherwise, we place the call.
- placeCall();
}
+
+ // If we're CDMA, regardless of where we are adding a call from (either
+ // InCallScreen or Dialtacts), the user may need to send an empty
+ // flash command to the network. So let's call dialButtonPressed() regardless
+ // and dialButtonPressed will handle this functionality for us.
+ // otherwise, we place the call.
+ dialButtonPressed();
return true;
}
}
@@ -610,7 +633,7 @@
}
private void keyPressed(int keyCode) {
- vibrate();
+ mHaptic.vibrate();
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
mDigits.onKeyDown(keyCode, event);
}
@@ -619,7 +642,7 @@
switch (view.getId()) {
case R.id.digits:
if (keyCode == KeyEvent.KEYCODE_ENTER) {
- placeCall();
+ dialButtonPressed();
return true;
}
break;
@@ -694,17 +717,17 @@
return;
}
case R.id.dialButton: {
- vibrate(); // Vibrate here too, just like we do for the regular keys
- placeCall();
+ mHaptic.vibrate(); // Vibrate here too, just like we do for the regular keys
+ dialButtonPressed();
return;
}
case R.id.voicemailButton: {
callVoicemail();
- vibrate();
+ mHaptic.vibrate();
return;
}
case R.id.digits: {
- if (mDigits.length() != 0) {
+ if (!isDigitsEmpty()) {
mDigits.setCursorVisible(true);
}
return;
@@ -725,7 +748,7 @@
return true;
}
case R.id.one: {
- if (digits.length() == 0) {
+ if (isDigitsEmpty()) {
callVoicemail();
return true;
}
@@ -741,33 +764,45 @@
void callVoicemail() {
Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("voicemail", "", null));
+ Uri.fromParts("voicemail", EMPTY_NUMBER, null));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
mDigits.getText().clear();
finish();
}
- void placeCall() {
+ void dialButtonPressed() {
final String number = mDigits.getText().toString();
boolean sendEmptyFlash = false;
- Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("tel", number, null));
- if (number == null || !TextUtils.isGraphic(number)) {
- // There is no number entered.
+ Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED);
+
+ if (isDigitsEmpty()) { // There is no number entered.
if (phoneIsCdma() && phoneIsOffhook()) {
- // We only want to send this empty flash extra if we're CDMA and the
- // phone is offhook (don't want to send if ringing or dialing)
+ // On CDMA phones, if we're already on a call, pressing
+ // the Dial button without entering any digits means "send
+ // an empty flash."
+ intent.setData(Uri.fromParts("tel", EMPTY_NUMBER, null));
intent.putExtra(EXTRA_SEND_EMPTY_FLASH, true);
sendEmptyFlash = true;
+ } else if (!TextUtils.isEmpty(mLastNumberDialed)) {
+ // Otherwise, pressing the Dial button without entering
+ // any digits means "recall the last number dialed".
+ mDigits.setText(mLastNumberDialed);
+ return;
} else {
+ // Rare case: there's no "last number dialed". There's
+ // nothing useful for the Dial button to do in this case.
playTone(ToneGenerator.TONE_PROP_NACK);
return;
}
+ } else { // There is a number.
+ intent.setData(Uri.fromParts("tel", number, null));
}
+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
mDigits.getText().clear();
+
// Don't finish TwelveKeyDialer yet if we're sending a blank flash for CDMA. CDMA
// networks use Flash messages when special processing needs to be done, mainly for
// 3-way or call waiting scenarios. Presumably, here we're in a special 3-way scenario
@@ -1062,18 +1097,6 @@
return phoneOffhook;
}
- /**
- * Triggers haptic feedback (if enabled) for dialer key presses.
- */
- private synchronized void vibrate() {
- if (!mVibrateOn) {
- return;
- }
- if (mVibrator == null) {
- mVibrator = new Vibrator();
- }
- mVibrator.vibrate(mVibratePattern, VIBRATE_NO_REPEAT);
- }
/**
* Returns true whenever any one of the options from the menu is selected.
@@ -1127,20 +1150,25 @@
/**
* Update the enabledness of the "Dial" and "Backspace" buttons if applicable.
*/
- private void updateDialAndDeleteButtonStateEnabledAttr() {
- final boolean notEmpty = mDigits.length() != 0;
+ private void updateDialAndDeleteButtonEnabledState() {
+ final boolean digitsNotEmpty = !isDigitsEmpty();
- // If we're already on a CDMA call, then we want to enable the Call button
- if (phoneIsCdma() && phoneIsOffhook()) {
- if (mDialButton != null) {
+ if (mDialButton != null) {
+ // On CDMA phones, if we're already on a call, we *always*
+ // enable the Dial button (since you can press it without
+ // entering any digits to send an empty flash.)
+ if (phoneIsCdma() && phoneIsOffhook()) {
mDialButton.setEnabled(true);
- }
- } else {
- if (mDialButton != null) {
- mDialButton.setEnabled(notEmpty);
+ } else {
+ // Common case: GSM, or CDMA but not on a call.
+ // Enable the Dial button if some digits have
+ // been entered, or if there is a last dialed number
+ // that could be redialed.
+ mDialButton.setEnabled(digitsNotEmpty ||
+ !TextUtils.isEmpty(mLastNumberDialed));
}
}
- mDelete.setEnabled(notEmpty);
+ mDelete.setEnabled(digitsNotEmpty);
}
@@ -1164,35 +1192,6 @@
}
/**
- * Initialize the vibration parameters.
- * @param r The Resources with the vibration parameters.
- */
- private void initVibrationPattern(Resources r) {
- int[] pattern = null;
- try {
- mVibrateOn = r.getBoolean(R.bool.config_enable_dialer_key_vibration);
- pattern = r.getIntArray(com.android.internal.R.array.config_virtualKeyVibePattern);
- if (null == pattern) {
- Log.e(TAG, "Vibrate pattern is null.");
- mVibrateOn = false;
- }
- } catch (Resources.NotFoundException nfe) {
- Log.e(TAG, "Vibrate control bool or pattern missing.", nfe);
- mVibrateOn = false;
- }
-
- if (!mVibrateOn) {
- return;
- }
-
- // int[] to long[] conversion.
- mVibratePattern = new long[pattern.length];
- for (int i = 0; i < pattern.length; i++) {
- mVibratePattern[i] = pattern[i];
- }
- }
-
- /**
* This function return true if Wait menu item can be shown
* otherwise returns false. Assumes the passed string is non-empty
* and the 0th index check is not required.
@@ -1217,4 +1216,44 @@
}
return true;
}
+
+ /**
+ * @return true if the widget with the phone number digits is empty.
+ */
+ private boolean isDigitsEmpty() {
+ return mDigits.length() == 0;
+ }
+
+ /**
+ * Starts the asyn query to get the last dialed/outgoing
+ * number. When the background query finishes, mLastNumberDialed
+ * is set to the last dialed number or an empty string if none
+ * exists yet.
+ */
+ private void queryLastOutgoingCall() {
+ mLastNumberDialed = EMPTY_NUMBER;
+ CallLogAsync.GetLastOutgoingCallArgs lastCallArgs =
+ new CallLogAsync.GetLastOutgoingCallArgs(
+ this,
+ new CallLogAsync.OnLastOutgoingCallComplete() {
+ public void lastOutgoingCall(String number) {
+ // TODO: Filter out emergency numbers if
+ // the carrier does not want redial for
+ // these.
+ mLastNumberDialed = number;
+ updateDialAndDeleteButtonEnabledState();
+ }
+ });
+ mCallLog.getLastOutgoingCall(lastCallArgs);
+ }
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
}
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index ca3c08a..ead6a4a 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -15,7 +15,6 @@
*/
package com.android.contacts;
-
import com.android.contacts.Collapser.Collapsible;
import com.android.contacts.model.ContactsSource;
import com.android.contacts.model.Sources;
@@ -46,7 +45,10 @@
import android.database.ContentObserver;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
+import android.net.ParseException;
import android.net.Uri;
+import android.net.WebAddress;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.RemoteException;
@@ -56,7 +58,9 @@
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.DisplayNameSources;
import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.RawContactsEntity;
import android.provider.ContactsContract.StatusUpdates;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
@@ -65,6 +69,7 @@
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.Log;
@@ -79,15 +84,14 @@
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
-import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ListView;
-import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
/**
* Displays the details of a specific contact.
@@ -124,6 +128,7 @@
/* package */ ArrayList<ViewEntry> mEmailEntries = new ArrayList<ViewEntry>();
/* package */ ArrayList<ViewEntry> mPostalEntries = new ArrayList<ViewEntry>();
/* package */ ArrayList<ViewEntry> mImEntries = new ArrayList<ViewEntry>();
+ /* package */ ArrayList<ViewEntry> mNicknameEntries = new ArrayList<ViewEntry>();
/* package */ ArrayList<ViewEntry> mOrganizationEntries = new ArrayList<ViewEntry>();
/* package */ ArrayList<ViewEntry> mGroupEntries = new ArrayList<ViewEntry>();
/* package */ ArrayList<ViewEntry> mOtherEntries = new ArrayList<ViewEntry>();
@@ -140,6 +145,8 @@
protected int mWritableSourcesCnt;
protected boolean mAllRestricted;
+ protected Uri mPrimaryPhoneUri = null;
+
protected ArrayList<Long> mWritableRawContactIds = new ArrayList<Long>();
private static final int TOKEN_ENTITIES = 0;
@@ -148,9 +155,19 @@
private boolean mHasEntities = false;
private boolean mHasStatuses = false;
+ private long mNameRawContactId = -1;
+ private int mDisplayNameSource = DisplayNameSources.UNDEFINED;
+
private ArrayList<Entity> mEntities = Lists.newArrayList();
private HashMap<Long, DataStatus> mStatuses = Maps.newHashMap();
+ /**
+ * The view shown if the detail list is empty.
+ * We set this to the list view when first bind the adapter, so that it won't be shown while
+ * we're loading data.
+ */
+ private View mEmptyView;
+
private ContentObserver mObserver = new ContentObserver(new Handler()) {
@Override
public boolean deliverSelfNotifications() {
@@ -206,7 +223,8 @@
mListView.setOnCreateContextMenuListener(this);
mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
mListView.setOnItemClickListener(this);
- mListView.setEmptyView((ScrollView) findViewById(android.R.id.empty));
+ // Don't set it to mListView yet. We do so later when we bind the adapter.
+ mEmptyView = findViewById(android.R.id.empty);
mResolver = getContentResolver();
@@ -217,6 +235,7 @@
mSections.add(mEmailEntries);
mSections.add(mImEntries);
mSections.add(mPostalEntries);
+ mSections.add(mNicknameEntries);
mSections.add(mOrganizationEntries);
mSections.add(mGroupEntries);
mSections.add(mOtherEntries);
@@ -286,31 +305,65 @@
return null;
}
- // QUERY CODE //
/** {@inheritDoc} */
- public void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
- try {
- // Read incoming entities and consider binding
- readEntities(iterator);
- considerBindData();
- } finally {
- if (iterator != null) {
- iterator.close();
+ public void onQueryComplete(int token, Object cookie, final Cursor cursor) {
+ if (token == TOKEN_STATUSES) {
+ try {
+ // Read available social rows and consider binding
+ readStatuses(cursor);
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
}
+ considerBindData();
+ return;
}
- }
- /** {@inheritDoc} */
- public void onQueryComplete(int token, Object cookie, Cursor cursor) {
- try {
- // Read available social rows and consider binding
- readStatuses(cursor);
- considerBindData();
- } finally {
- if (cursor != null) {
- cursor.close();
+ // One would think we could just iterate over the Cursor
+ // directly here, as the result set should be small, and we've
+ // already run the query in an AsyncTask, but a lot of ANRs
+ // were being reported in this code nonetheless. See bug
+ // 2539603 for details. The real bug which makes this result
+ // set huge and CPU-heavy may be elsewhere.
+ // TODO: if we keep this async, perhaps the entity iteration
+ // should also be original AsyncTask, rather than ping-ponging
+ // between threads like this.
+ final ArrayList<Entity> oldEntities = mEntities;
+ (new AsyncTask<Void, Void, ArrayList<Entity>>() {
+ @Override
+ protected ArrayList<Entity> doInBackground(Void... params) {
+ ArrayList<Entity> newEntities = new ArrayList<Entity>(cursor.getCount());
+ EntityIterator iterator = RawContacts.newEntityIterator(cursor);
+ try {
+ while (iterator.hasNext()) {
+ Entity entity = iterator.next();
+ newEntities.add(entity);
+ }
+ } finally {
+ iterator.close();
+ }
+ return newEntities;
}
- }
+
+ @Override
+ protected void onPostExecute(ArrayList<Entity> newEntities) {
+ if (newEntities == null) {
+ // There was an error loading.
+ return;
+ }
+ synchronized (ViewContactActivity.this) {
+ if (mEntities != oldEntities) {
+ // Multiple async tasks were in flight and we
+ // lost the race.
+ return;
+ }
+ mEntities = newEntities;
+ mHasEntities = true;
+ }
+ considerBindData();
+ }
+ }).execute();
}
private long getRefreshedContactId() {
@@ -322,22 +375,6 @@
}
/**
- * Read from the given {@link EntityIterator} to build internal set of
- * {@link #mEntities} for data display.
- */
- private synchronized void readEntities(EntityIterator iterator) {
- mEntities.clear();
- try {
- while (iterator.hasNext()) {
- mEntities.add(iterator.next());
- }
- mHasEntities = true;
- } catch (RemoteException e) {
- Log.w(TAG, "Problem reading contact data: " + e.toString());
- }
- }
-
- /**
* Read from the given {@link Cursor} and build a set of {@link DataStatus}
* objects to match any valid statuses found.
*/
@@ -354,19 +391,65 @@
mHasStatuses = true;
}
+ private static Cursor setupContactCursor(ContentResolver resolver, Uri lookupUri) {
+ if (lookupUri == null) {
+ return null;
+ }
+ final List<String> segments = lookupUri.getPathSegments();
+ if (segments.size() != 4) {
+ return null;
+ }
+
+ // Contains an Id.
+ final long uriContactId = Long.parseLong(segments.get(3));
+ final String uriLookupKey = Uri.encode(segments.get(2));
+ final Uri dataUri = Uri.withAppendedPath(
+ ContentUris.withAppendedId(Contacts.CONTENT_URI, uriContactId),
+ Contacts.Data.CONTENT_DIRECTORY);
+
+ // This cursor has several purposes:
+ // - Fetch NAME_RAW_CONTACT_ID and DISPLAY_NAME_SOURCE
+ // - Fetch the lookup-key to ensure we are looking at the right record
+ // - Watcher for change events
+ Cursor cursor = resolver.query(dataUri,
+ new String[] {
+ Contacts.NAME_RAW_CONTACT_ID,
+ Contacts.DISPLAY_NAME_SOURCE,
+ Contacts.LOOKUP_KEY
+ }, null, null, null);
+
+ if (cursor.moveToFirst()) {
+ String lookupKey =
+ cursor.getString(cursor.getColumnIndex(Contacts.LOOKUP_KEY));
+ if (!lookupKey.equals(uriLookupKey)) {
+ // ID and lookup key do not match
+ cursor.close();
+ return null;
+ }
+ return cursor;
+ } else {
+ cursor.close();
+ return null;
+ }
+ }
+
private synchronized void startEntityQuery() {
closeCursor();
- Uri uri = null;
- if (mLookupUri != null) {
+ // Interprete mLookupUri
+ mCursor = setupContactCursor(mResolver, mLookupUri);
+
+ // If mCursor is null now we did not succeed in using the Uri's Id (or it didn't contain
+ // a Uri). Instead we now have to use the lookup key to find the record
+ if (mCursor == null) {
mLookupUri = Contacts.getLookupUri(getContentResolver(), mLookupUri);
- if (mLookupUri != null) {
- uri = Contacts.lookupContact(getContentResolver(), mLookupUri);
- }
+ mCursor = setupContactCursor(mResolver, mLookupUri);
}
- if (uri == null) {
-
+ // If mCursor is still null, we were unsuccessful in finding the record
+ if (mCursor == null) {
+ mNameRawContactId = -1;
+ mDisplayNameSource = DisplayNameSources.UNDEFINED;
// TODO either figure out a way to prevent a flash of black background or
// use some other UI than a toast
Toast.makeText(this, R.string.invalidContactMessage, Toast.LENGTH_SHORT).show();
@@ -375,21 +458,26 @@
return;
}
- final Uri dataUri = Uri.withAppendedPath(uri, Contacts.Data.CONTENT_DIRECTORY);
+ final long contactId = ContentUris.parseId(mLookupUri);
- // Keep stub cursor open on side to watch for change events
- mCursor = mResolver.query(dataUri,
- new String[] {Contacts.DISPLAY_NAME}, null, null, null);
+ mNameRawContactId =
+ mCursor.getLong(mCursor.getColumnIndex(Contacts.NAME_RAW_CONTACT_ID));
+ mDisplayNameSource =
+ mCursor.getInt(mCursor.getColumnIndex(Contacts.DISPLAY_NAME_SOURCE));
+
mCursor.registerContentObserver(mObserver);
- final long contactId = ContentUris.parseId(uri);
-
// Clear flags and start queries to data and status
mHasEntities = false;
mHasStatuses = false;
- mHandler.startQueryEntities(TOKEN_ENTITIES, null, RawContacts.CONTENT_URI,
- RawContacts.CONTACT_ID + "=" + contactId, null, null);
+ mHandler.startQuery(TOKEN_ENTITIES, null, RawContactsEntity.CONTENT_URI, null,
+ RawContacts.CONTACT_ID + "=?", new String[] {
+ String.valueOf(contactId)
+ }, null);
+ final Uri dataUri = Uri.withAppendedPath(
+ ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId),
+ Contacts.Data.CONTENT_DIRECTORY);
mHandler.startQuery(TOKEN_STATUSES, null, dataUri, StatusQuery.PROJECTION,
StatusUpdates.PRESENCE + " IS NOT NULL OR " + StatusUpdates.STATUS
+ " IS NOT NULL", null, null);
@@ -434,6 +522,7 @@
} else {
mAdapter.setSections(mSections, SHOW_SEPARATORS);
}
+ mListView.setEmptyView(mEmptyView);
}
@Override
@@ -535,7 +624,7 @@
if (mAllRestricted) return false;
// TODO: Keep around actual LOOKUP_KEY, or formalize method of extracting
- final String lookupKey = mLookupUri.getPathSegments().get(2);
+ final String lookupKey = Uri.encode(mLookupUri.getPathSegments().get(2));
final Uri shareUri = Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey);
final Intent intent = new Intent(Intent.ACTION_SEND);
@@ -624,15 +713,6 @@
}
}
- private void splitContact(long rawContactId) {
- setAggregationException(rawContactId, AggregationExceptions.TYPE_KEEP_SEPARATE);
-
- // The split operation may have removed the original aggregate contact, so we need
- // to requery everything
- Toast.makeText(this, R.string.contactsSplitMessage, Toast.LENGTH_LONG).show();
- startEntityQuery();
- }
-
private void joinAggregate(final long contactId) {
Cursor c = mResolver.query(RawContacts.CONTENT_URI, new String[] {RawContacts._ID},
RawContacts.CONTACT_ID + "=" + contactId, null, null);
@@ -702,20 +782,19 @@
int index = mListView.getSelectedItemPosition();
if (index != -1) {
ViewEntry entry = ViewAdapter.getEntry(mSections, index, SHOW_SEPARATORS);
- if (entry.intent.getAction() == Intent.ACTION_CALL_PRIVILEGED) {
+ if (entry != null &&
+ entry.intent.getAction() == Intent.ACTION_CALL_PRIVILEGED) {
startActivity(entry.intent);
+ return true;
}
- } else if (mNumPhoneNumbers != 0) {
+ } else if (mPrimaryPhoneUri != null) {
// There isn't anything selected, call the default number
- long freshContactId = getRefreshedContactId();
- if (freshContactId > 0) {
- Uri hardContacUri = ContentUris.withAppendedId(
- Contacts.CONTENT_URI, freshContactId);
- Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED, hardContacUri);
- startActivity(intent);
- }
+ final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+ mPrimaryPhoneUri);
+ startActivity(intent);
+ return true;
}
- return true;
+ return false;
}
case KeyEvent.KEYCODE_DEL: {
@@ -778,6 +857,7 @@
mReadOnlySourcesCnt = 0;
mWritableSourcesCnt = 0;
mAllRestricted = true;
+ mPrimaryPhoneUri = null;
mWritableRawContactIds.clear();
@@ -836,6 +916,9 @@
entry.secondaryIntent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts(Constants.SCHEME_SMSTO, entry.data, null));
+ // Remember super-primary phone
+ if (isSuperPrimary) mPrimaryPhoneUri = entry.uri;
+
entry.isPrimary = isSuperPrimary;
mPhoneEntries.add(entry);
@@ -883,15 +966,54 @@
entry.applyStatus(status, false);
}
mImEntries.add(entry);
- } else if ((Organization.CONTENT_ITEM_TYPE.equals(mimeType)
- || Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) && hasData) {
- // Build organization and note entries
- entry.uri = null;
- mOrganizationEntries.add(entry);
+ } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType) &&
+ (hasData || !TextUtils.isEmpty(entry.label))) {
+ // Build organization entries
+ final boolean isNameRawContact = (mNameRawContactId == rawContactId);
+
+ final boolean duplicatesTitle =
+ isNameRawContact
+ && mDisplayNameSource == DisplayNameSources.ORGANIZATION
+ && (!hasData || TextUtils.isEmpty(entry.label));
+
+ if (!duplicatesTitle) {
+ entry.uri = null;
+
+ if (TextUtils.isEmpty(entry.label)) {
+ entry.label = entry.data;
+ entry.data = "";
+ }
+
+ mOrganizationEntries.add(entry);
+ }
+ } else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
+ // Build nickname entries
+ final boolean isNameRawContact = (mNameRawContactId == rawContactId);
+
+ final boolean duplicatesTitle =
+ isNameRawContact
+ && mDisplayNameSource == DisplayNameSources.NICKNAME;
+
+ if (!duplicatesTitle) {
+ entry.uri = null;
+ mNicknameEntries.add(entry);
+ }
} else if (Note.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build note entries
entry.uri = null;
+ entry.maxLines = 100;
+ mOtherEntries.add(entry);
+ } else if (Website.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
+ // Build note entries
+ entry.uri = null;
entry.maxLines = 10;
+ try {
+ WebAddress webAddress = new WebAddress(entry.data);
+ entry.intent = new Intent(Intent.ACTION_VIEW,
+ Uri.parse(webAddress.toString()));
+ } catch (ParseException e) {
+ Log.e(TAG, "Couldn't parse website: " + entry.data);
+ }
mOtherEntries.add(entry);
} else {
// Handle showing custom rows
@@ -949,7 +1071,6 @@
public int collapseCount = 0;
public int presence = -1;
- public int presenceIcon = -1;
public CharSequence footerLine = null;
@@ -990,9 +1111,6 @@
*/
public ViewEntry applyStatus(DataStatus status, boolean fillData) {
presence = status.getPresence();
- presenceIcon = (presence == -1) ? -1 :
- StatusUpdates.getPresenceIconResourceId(this.presence);
-
if (fillData && status.isValid()) {
this.data = status.getStatus().toString();
this.footerLine = status.getTimestampLabel(context);
@@ -1040,39 +1158,20 @@
return false;
}
- if (Phone.CONTENT_ITEM_TYPE.equals(mimetype)
- && Phone.CONTENT_ITEM_TYPE.equals(entry.mimetype)) {
- if (!PhoneNumberUtils.compare(this.context, data, entry.data)) {
- return false;
- }
- } else {
- if (!equals(data, entry.data)) {
- return false;
- }
+ if (!ContactsUtils.shouldCollapse(context, mimetype, data, entry.mimetype,
+ entry.data)) {
+ return false;
}
- if (!equals(mimetype, entry.mimetype)
- || !intentCollapsible(intent, entry.intent)
- || !intentCollapsible(secondaryIntent, entry.secondaryIntent)
+ if (!TextUtils.equals(mimetype, entry.mimetype)
+ || !ContactsUtils.areIntentActionEqual(intent, entry.intent)
+ || !ContactsUtils.areIntentActionEqual(secondaryIntent, entry.secondaryIntent)
|| actionIcon != entry.actionIcon) {
return false;
}
return true;
}
-
- private boolean equals(Object a, Object b) {
- return a==b || (a != null && a.equals(b));
- }
-
- private boolean intentCollapsible(Intent a, Intent b) {
- if (a == b) {
- return true;
- } else if ((a != null && b != null) && equals(a.getAction(), b.getAction())) {
- return true;
- }
- return false;
- }
}
/** Cache of the children views of a row */
@@ -1199,13 +1298,8 @@
}
// Set the presence icon
- Drawable presenceIcon = null;
- if (entry.presenceIcon != -1) {
- presenceIcon = resources.getDrawable(entry.presenceIcon);
- } else if (entry.presence != -1) {
- presenceIcon = resources.getDrawable(
- StatusUpdates.getPresenceIconResourceId(entry.presence));
- }
+ Drawable presenceIcon = ContactPresenceIconUtil.getPresenceIcon(
+ mContext, entry.presence);
ImageView presenceIconView = views.presenceIcon;
if (presenceIcon != null) {
presenceIconView.setImageDrawable(presenceIcon);
@@ -1256,4 +1350,14 @@
final int _ID = 0;
}
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
}
diff --git a/src/com/android/contacts/model/ContactsSource.java b/src/com/android/contacts/model/ContactsSource.java
index 1198837..d008482 100644
--- a/src/com/android/contacts/model/ContactsSource.java
+++ b/src/com/android/contacts/model/ContactsSource.java
@@ -141,7 +141,7 @@
abstract public int getHeaderColor(Context context);
abstract public int getSideBarColor(Context context);
-
+
/**
* {@link Comparator} to sort by {@link DataKind#weight}.
*/
@@ -196,6 +196,12 @@
public boolean secondary;
public boolean editable;
+ /**
+ * If this is true (default), the user can add and remove values.
+ * If false, the editor will always show a single field (which might be empty).
+ */
+ public boolean isList;
+
public StringInflater actionHeader;
public StringInflater actionAltHeader;
public StringInflater actionBody;
@@ -203,6 +209,11 @@
public boolean actionBodySocial = false;
public String typeColumn;
+
+ /**
+ * Maximum number of values allowed in the list. -1 represents infinity.
+ * If {@link DataKind#isList} is false, this value is ignored.
+ */
public int typeOverallMax;
public List<EditType> typeList;
@@ -219,6 +230,7 @@
this.iconRes = iconRes;
this.weight = weight;
this.editable = editable;
+ this.isList = true;
this.typeOverallMax = -1;
}
}
diff --git a/src/com/android/contacts/model/Editor.java b/src/com/android/contacts/model/Editor.java
index b3e8443..473f0d3 100644
--- a/src/com/android/contacts/model/Editor.java
+++ b/src/com/android/contacts/model/Editor.java
@@ -18,6 +18,7 @@
import com.android.contacts.model.ContactsSource.DataKind;
import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.ui.ViewIdGenerator;
import android.provider.ContactsContract.Data;
@@ -50,7 +51,8 @@
* builds any needed views. Any changes performed by the user will be
* written back to that same object.
*/
- public void setValues(DataKind kind, ValuesDelta values, EntityDelta state, boolean readOnly);
+ public void setValues(DataKind kind, ValuesDelta values, EntityDelta state, boolean readOnly,
+ ViewIdGenerator vig);
/**
* Add a specific {@link EditorListener} to this {@link Editor}.
diff --git a/src/com/android/contacts/model/EntityDelta.java b/src/com/android/contacts/model/EntityDelta.java
index ae30806..9eb7779 100644
--- a/src/com/android/contacts/model/EntityDelta.java
+++ b/src/com/android/contacts/model/EntityDelta.java
@@ -379,6 +379,13 @@
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(RawContacts.CONTENT_URI);
possibleAdd(buildInto, builder);
@@ -412,9 +419,16 @@
builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_SUSPENDED);
buildInto.add(firstIndex, builder.build());
- // Restore aggregation as last operation
+ // 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(RawContacts.CONTENT_URI);
+ builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
+ builder.withSelection(RawContacts._ID + "=?", new String[1]);
+ builder.withSelectionBackReference(0, firstIndex);
+ buildInto.add(builder.build());
}
}
@@ -448,10 +462,11 @@
}
public void readFromParcel(Parcel source) {
+ final ClassLoader loader = getClass().getClassLoader();
final int size = source.readInt();
- mValues = source.<ValuesDelta> readParcelable(null);
+ mValues = source.<ValuesDelta> readParcelable(loader);
for (int i = 0; i < size; i++) {
- final ValuesDelta child = source.<ValuesDelta> readParcelable(null);
+ final ValuesDelta child = source.<ValuesDelta> readParcelable(loader);
this.addEntry(child);
}
}
@@ -571,14 +586,6 @@
return getAsLong(mIdColumn);
}
- /**
- * Return a valid integer value suitable for {@link View#setId(int)}.
- */
- public int getViewId() {
- final Long id = this.getId();
- return (id == null) ? View.NO_ID : id.intValue();
- }
-
public void setIdColumn(String idColumn) {
mIdColumn = idColumn;
}
@@ -818,8 +825,9 @@
}
public void readFromParcel(Parcel source) {
- mBefore = source.<ContentValues> readParcelable(null);
- mAfter = source.<ContentValues> readParcelable(null);
+ final ClassLoader loader = getClass().getClassLoader();
+ mBefore = source.<ContentValues> readParcelable(loader);
+ mAfter = source.<ContentValues> readParcelable(loader);
mIdColumn = source.readString();
}
diff --git a/src/com/android/contacts/model/EntityModifier.java b/src/com/android/contacts/model/EntityModifier.java
index fb3eba7..2e6899e 100644
--- a/src/com/android/contacts/model/EntityModifier.java
+++ b/src/com/android/contacts/model/EntityModifier.java
@@ -33,12 +33,13 @@
import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
+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.Intents.Insert;
-import android.provider.ContactsContract;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseIntArray;
@@ -484,6 +485,36 @@
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 = source.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
+ if (hasOrg && EntityModifier.canInsert(state, kindOrg)) {
+ final ValuesDelta child = EntityModifier.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 = source.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
+ if (hasNotes && EntityModifier.canInsert(state, kindNotes)) {
+ final ValuesDelta child = EntityModifier.insertChild(state, kindNotes);
+
+ final String notes = extras.getString(Insert.NOTES);
+ if (ContactsUtils.isGraphic(notes)) {
+ child.put(Note.NOTE, notes);
+ }
+ }
}
/**
diff --git a/src/com/android/contacts/model/EntitySet.java b/src/com/android/contacts/model/EntitySet.java
index be2f70f..83fe338 100644
--- a/src/com/android/contacts/model/EntitySet.java
+++ b/src/com/android/contacts/model/EntitySet.java
@@ -21,15 +21,12 @@
import android.content.Entity;
import android.content.EntityIterator;
import android.content.ContentProviderOperation.Builder;
-import android.graphics.BitmapFactory;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.RemoteException;
import android.provider.ContactsContract.AggregationExceptions;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.RawContactsEntity;
import com.google.android.collect.Lists;
@@ -65,26 +62,22 @@
*/
public static EntitySet fromQuery(ContentResolver resolver, String selection,
String[] selectionArgs, String sortOrder) {
- EntityIterator iterator = null;
- final EntitySet state = new EntitySet();
+ EntityIterator iterator = RawContacts.newEntityIterator(resolver.query(
+ RawContactsEntity.CONTENT_URI, null, selection, selectionArgs,
+ sortOrder));
try {
+ final EntitySet state = new EntitySet();
// Perform background query to pull contact details
- iterator = resolver.queryEntities(RawContacts.CONTENT_URI, selection, selectionArgs,
- sortOrder);
while (iterator.hasNext()) {
// Read all contacts into local deltas to prepare for edits
final Entity before = iterator.next();
final EntityDelta entity = EntityDelta.fromBefore(before);
state.add(entity);
}
- } catch (RemoteException e) {
- throw new IllegalStateException("Problem querying contact details", e);
+ return state;
} finally {
- if (iterator != null) {
- iterator.close();
- }
+ iterator.close();
}
- return state;
}
/**
@@ -323,9 +316,10 @@
}
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.<EntityDelta> readParcelable(null));
+ this.add(source.<EntityDelta> readParcelable(loader));
}
}
diff --git a/src/com/android/contacts/model/ExchangeSource.java b/src/com/android/contacts/model/ExchangeSource.java
index b46824c..3f2ab6c 100644
--- a/src/com/android/contacts/model/ExchangeSource.java
+++ b/src/com/android/contacts/model/ExchangeSource.java
@@ -32,6 +32,8 @@
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
+import java.util.Locale;
+
public class ExchangeSource extends FallbackSource {
public static final String ACCOUNT_TYPE = "com.android.exchange";
@@ -45,53 +47,70 @@
@Override
protected void inflate(Context context, int inflateLevel) {
- inflateStructuredName(inflateLevel);
- inflateNickname(inflateLevel);
- inflatePhone(inflateLevel);
- inflateEmail(inflateLevel);
- inflateStructuredPostal(inflateLevel);
- inflateIm(inflateLevel);
- inflateOrganization(inflateLevel);
- inflatePhoto(inflateLevel);
- inflateNote(inflateLevel);
- inflateWebsite(inflateLevel);
+ inflateStructuredName(context, inflateLevel);
+ inflateNickname(context, inflateLevel);
+ inflatePhone(context, inflateLevel);
+ inflateEmail(context, inflateLevel);
+ inflateStructuredPostal(context, inflateLevel);
+ inflateIm(context, inflateLevel);
+ inflateOrganization(context, inflateLevel);
+ inflatePhoto(context, inflateLevel);
+ inflateNote(context, inflateLevel);
+ inflateWebsite(context, inflateLevel);
setInflatedLevel(inflateLevel);
}
@Override
- protected DataKind inflateStructuredName(int inflateLevel) {
- final DataKind kind = super.inflateStructuredName(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateStructuredName(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateStructuredName(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
+ boolean displayOrderPrimary =
+ context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
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.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));
- kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
- R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
- kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
- R.string.name_phonetic_family, FLAGS_PHONETIC).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));
+ kind.fieldList.add(new EditField(StructuredName.SUFFIX,
+ R.string.name_suffix, FLAGS_PERSON_NAME).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
+ } 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));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
+ }
}
return kind;
}
@Override
- protected DataKind inflateNickname(int inflateLevel) {
- final DataKind kind = super.inflateNickname(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateNickname(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateNickname(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
- kind.typeOverallMax = 1;
+ kind.isList = false;
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
@@ -102,8 +121,8 @@
}
@Override
- protected DataKind inflatePhone(int inflateLevel) {
- final DataKind kind = super.inflatePhone(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflatePhone(Context context, int inflateLevel) {
+ final DataKind kind = super.inflatePhone(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
kind.typeColumn = Phone.TYPE;
@@ -134,8 +153,8 @@
}
@Override
- protected DataKind inflateEmail(int inflateLevel) {
- final DataKind kind = super.inflateEmail(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateEmail(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateEmail(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
kind.typeOverallMax = 3;
@@ -148,10 +167,12 @@
}
@Override
- protected DataKind inflateStructuredPostal(int inflateLevel) {
- final DataKind kind = super.inflateStructuredPostal(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateStructuredPostal(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateStructuredPostal(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
+ 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));
@@ -159,24 +180,37 @@
kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
kind.fieldList = Lists.newArrayList();
- 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));
+ 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 inflateIm(int inflateLevel) {
- final DataKind kind = super.inflateIm(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateIm(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateIm(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
kind.typeOverallMax = 3;
@@ -208,12 +242,11 @@
}
@Override
- protected DataKind inflateOrganization(int inflateLevel) {
- final DataKind kind = super.inflateOrganization(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateOrganization(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateOrganization(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
- kind.typeOverallMax = 1;
-
+ kind.isList = false;
kind.typeColumn = Organization.TYPE;
kind.typeList = Lists.newArrayList();
kind.typeList.add(buildOrgType(Organization.TYPE_WORK).setSpecificMax(1));
@@ -232,8 +265,8 @@
}
@Override
- protected DataKind inflatePhoto(int inflateLevel) {
- final DataKind kind = super.inflatePhoto(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflatePhoto(Context context, int inflateLevel) {
+ final DataKind kind = super.inflatePhoto(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
kind.typeOverallMax = 1;
@@ -246,12 +279,10 @@
}
@Override
- protected DataKind inflateNote(int inflateLevel) {
- final DataKind kind = super.inflateNote(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateNote(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateNote(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
- kind.typeOverallMax = 1;
-
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
}
@@ -260,11 +291,11 @@
}
@Override
- protected DataKind inflateWebsite(int inflateLevel) {
- final DataKind kind = super.inflateWebsite(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateWebsite(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateWebsite(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
- kind.typeOverallMax = 1;
+ kind.isList = false;
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
diff --git a/src/com/android/contacts/model/ExternalSource.java b/src/com/android/contacts/model/ExternalSource.java
index d554c3a..aa9d888 100644
--- a/src/com/android/contacts/model/ExternalSource.java
+++ b/src/com/android/contacts/model/ExternalSource.java
@@ -105,8 +105,8 @@
}
// Bring in name and photo from fallback source, which are non-optional
- inflateStructuredName(inflateLevel);
- inflatePhoto(inflateLevel);
+ inflateStructuredName(context, inflateLevel);
+ inflatePhoto(context, inflateLevel);
setInflatedLevel(inflateLevel);
}
diff --git a/src/com/android/contacts/model/FallbackSource.java b/src/com/android/contacts/model/FallbackSource.java
index ca405eb..9cc855c 100644
--- a/src/com/android/contacts/model/FallbackSource.java
+++ b/src/com/android/contacts/model/FallbackSource.java
@@ -35,9 +35,10 @@
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.text.TextUtils;
import android.view.inputmethod.EditorInfo;
+import java.util.Locale;
+
public class FallbackSource extends ContactsSource {
protected static final int FLAGS_PHONE = EditorInfo.TYPE_CLASS_PHONE;
protected static final int FLAGS_EMAIL = EditorInfo.TYPE_CLASS_TEXT
@@ -65,17 +66,17 @@
@Override
protected void inflate(Context context, int inflateLevel) {
- inflateStructuredName(inflateLevel);
- inflateNickname(inflateLevel);
- inflatePhone(inflateLevel);
- inflateEmail(inflateLevel);
- inflateStructuredPostal(inflateLevel);
- inflateIm(inflateLevel);
- inflateOrganization(inflateLevel);
- inflatePhoto(inflateLevel);
- inflateNote(inflateLevel);
- inflateWebsite(inflateLevel);
- inflateEvent(inflateLevel);
+ inflateStructuredName(context, inflateLevel);
+ inflateNickname(context, inflateLevel);
+ inflatePhone(context, inflateLevel);
+ inflateEmail(context, inflateLevel);
+ inflateStructuredPostal(context, inflateLevel);
+ inflateIm(context, inflateLevel);
+ inflateOrganization(context, inflateLevel);
+ inflatePhoto(context, inflateLevel);
+ inflateNote(context, inflateLevel);
+ inflateWebsite(context, inflateLevel);
+ inflateEvent(context, inflateLevel);
setInflatedLevel(inflateLevel);
@@ -101,7 +102,7 @@
return new EditType(type, Organization.getTypeLabelResource(type));
}
- protected DataKind inflateStructuredName(int inflateLevel) {
+ protected DataKind inflateStructuredName(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
@@ -109,34 +110,55 @@
}
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
+ boolean displayOrderPrimary =
+ context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
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.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));
- kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
- R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
- kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
- R.string.name_phonetic_middle, FLAGS_PHONETIC).setOptional(true));
- kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
- R.string.name_phonetic_family, FLAGS_PHONETIC).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));
+ kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
+ } 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));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC).setOptional(true));
+ }
}
return kind;
}
- protected DataKind inflateNickname(int inflateLevel) {
+ protected DataKind inflateNickname(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Nickname.CONTENT_ITEM_TYPE,
R.string.nicknameLabelsGroup, -1, 115, true));
kind.secondary = true;
+ kind.isList = false;
kind.actionHeader = new SimpleInflater(R.string.nicknameLabelsGroup);
kind.actionBody = new SimpleInflater(Nickname.NAME);
}
@@ -153,7 +175,7 @@
return kind;
}
- protected DataKind inflatePhone(int inflateLevel) {
+ protected DataKind inflatePhone(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Phone.CONTENT_ITEM_TYPE, R.string.phoneLabelsGroup,
@@ -198,7 +220,7 @@
return kind;
}
- protected DataKind inflateEmail(int inflateLevel) {
+ protected DataKind inflateEmail(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Email.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Email.CONTENT_ITEM_TYPE,
@@ -224,7 +246,7 @@
return kind;
}
- protected DataKind inflateStructuredPostal(int inflateLevel) {
+ protected DataKind inflateStructuredPostal(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(StructuredPostal.CONTENT_ITEM_TYPE,
@@ -234,6 +256,8 @@
}
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
+ final boolean useJapaneseOrder =
+ Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
kind.typeColumn = StructuredPostal.TYPE;
kind.typeList = Lists.newArrayList();
kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME));
@@ -243,30 +267,49 @@
.setCustomColumn(StructuredPostal.LABEL));
kind.fieldList = Lists.newArrayList();
- kind.fieldList.add(new EditField(StructuredPostal.STREET, R.string.postal_street,
- FLAGS_POSTAL));
- kind.fieldList.add(new EditField(StructuredPostal.POBOX, R.string.postal_pobox,
- FLAGS_POSTAL).setOptional(true));
- kind.fieldList.add(new EditField(StructuredPostal.NEIGHBORHOOD,
- R.string.postal_neighborhood, FLAGS_POSTAL).setOptional(true));
- 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));
+
+ 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.NEIGHBORHOOD,
+ R.string.postal_neighborhood, FLAGS_POSTAL).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POBOX,
+ R.string.postal_pobox, FLAGS_POSTAL).setOptional(true));
+ } else {
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POBOX,
+ R.string.postal_pobox, FLAGS_POSTAL).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredPostal.NEIGHBORHOOD,
+ R.string.postal_neighborhood, FLAGS_POSTAL).setOptional(true));
+ 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;
}
- protected DataKind inflateIm(int inflateLevel) {
+ protected DataKind inflateIm(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Im.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Im.CONTENT_ITEM_TYPE, R.string.imLabelsGroup,
android.R.drawable.sym_action_chat, 20, true));
+ kind.secondary = true;
kind.actionHeader = new ImActionInflater();
kind.actionBody = new SimpleInflater(Im.DATA);
}
@@ -298,7 +341,7 @@
return kind;
}
- protected DataKind inflateOrganization(int inflateLevel) {
+ protected DataKind inflateOrganization(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Organization.CONTENT_ITEM_TYPE,
@@ -325,7 +368,7 @@
return kind;
}
- protected DataKind inflatePhoto(int inflateLevel) {
+ protected DataKind inflatePhoto(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Photo.CONTENT_ITEM_TYPE, -1, -1, -1, true));
@@ -339,11 +382,12 @@
return kind;
}
- protected DataKind inflateNote(int inflateLevel) {
+ protected DataKind inflateNote(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Note.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Note.CONTENT_ITEM_TYPE,
R.string.label_notes, R.drawable.sym_note, 110, true));
+ kind.isList = false;
kind.secondary = true;
kind.actionHeader = new SimpleInflater(R.string.label_notes);
kind.actionBody = new SimpleInflater(Note.NOTE);
@@ -357,7 +401,7 @@
return kind;
}
- protected DataKind inflateWebsite(int inflateLevel) {
+ protected DataKind inflateWebsite(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Website.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Website.CONTENT_ITEM_TYPE,
@@ -378,7 +422,7 @@
return kind;
}
- protected DataKind inflateEvent(int inflateLevel) {
+ protected DataKind inflateEvent(Context context, int inflateLevel) {
DataKind kind = getKindForMimetype(Event.CONTENT_ITEM_TYPE);
if (kind == null) {
kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
diff --git a/src/com/android/contacts/model/GoogleSource.java b/src/com/android/contacts/model/GoogleSource.java
index a4b4cb2..90abc92 100644
--- a/src/com/android/contacts/model/GoogleSource.java
+++ b/src/com/android/contacts/model/GoogleSource.java
@@ -42,6 +42,10 @@
public class GoogleSource extends FallbackSource {
public static final String ACCOUNT_TYPE = "com.google";
+
+ private static final String SELECTION_GROUPS_BY_TITLE_AND_ACCOUNT =
+ Groups.TITLE + "=? AND " + Groups.ACCOUNT_NAME + "=? AND " + Groups.ACCOUNT_TYPE + "=?";
+
public GoogleSource(String resPackageName) {
this.accountType = ACCOUNT_TYPE;
this.resPackageName = null;
@@ -51,17 +55,17 @@
@Override
protected void inflate(Context context, int inflateLevel) {
- inflateStructuredName(inflateLevel);
- inflateNickname(inflateLevel);
- inflatePhone(inflateLevel);
- inflateEmail(inflateLevel);
- inflateStructuredPostal(inflateLevel);
- inflateIm(inflateLevel);
- inflateOrganization(inflateLevel);
- inflatePhoto(inflateLevel);
- inflateNote(inflateLevel);
- inflateWebsite(inflateLevel);
- inflateEvent(inflateLevel);
+ inflateStructuredName(context, inflateLevel);
+ inflateNickname(context, inflateLevel);
+ inflatePhone(context, inflateLevel);
+ inflateEmail(context, inflateLevel);
+ inflateStructuredPostal(context, inflateLevel);
+ inflateIm(context, inflateLevel);
+ inflateOrganization(context, inflateLevel);
+ inflatePhoto(context, inflateLevel);
+ inflateNote(context, inflateLevel);
+ inflateWebsite(context, inflateLevel);
+ inflateEvent(context, inflateLevel);
// TODO: GOOGLE: GROUPMEMBERSHIP
@@ -70,18 +74,18 @@
}
@Override
- protected DataKind inflateStructuredName(int inflateLevel) {
- return super.inflateStructuredName(inflateLevel);
+ protected DataKind inflateStructuredName(Context context, int inflateLevel) {
+ return super.inflateStructuredName(context, inflateLevel);
}
@Override
- protected DataKind inflateNickname(int inflateLevel) {
- return super.inflateNickname(inflateLevel);
+ protected DataKind inflateNickname(Context context, int inflateLevel) {
+ return super.inflateNickname(context, inflateLevel);
}
@Override
- protected DataKind inflatePhone(int inflateLevel) {
- final DataKind kind = super.inflatePhone(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflatePhone(Context context, int inflateLevel) {
+ final DataKind kind = super.inflatePhone(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
kind.typeColumn = Phone.TYPE;
@@ -104,8 +108,8 @@
}
@Override
- protected DataKind inflateEmail(int inflateLevel) {
- final DataKind kind = super.inflateEmail(ContactsSource.LEVEL_MIMETYPES);
+ protected DataKind inflateEmail(Context context, int inflateLevel) {
+ final DataKind kind = super.inflateEmail(context, ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
kind.typeColumn = Email.TYPE;
@@ -124,37 +128,37 @@
}
@Override
- protected DataKind inflateStructuredPostal(int inflateLevel) {
- return super.inflateStructuredPostal(inflateLevel);
+ protected DataKind inflateStructuredPostal(Context context, int inflateLevel) {
+ return super.inflateStructuredPostal(context, inflateLevel);
}
@Override
- protected DataKind inflateIm(int inflateLevel) {
- return super.inflateIm(inflateLevel);
+ protected DataKind inflateIm(Context context, int inflateLevel) {
+ return super.inflateIm(context, inflateLevel);
}
@Override
- protected DataKind inflateOrganization(int inflateLevel) {
- return super.inflateOrganization(inflateLevel);
+ protected DataKind inflateOrganization(Context context, int inflateLevel) {
+ return super.inflateOrganization(context, inflateLevel);
}
@Override
- protected DataKind inflatePhoto(int inflateLevel) {
- return super.inflatePhoto(inflateLevel);
+ protected DataKind inflatePhoto(Context context, int inflateLevel) {
+ return super.inflatePhoto(context, inflateLevel);
}
@Override
- protected DataKind inflateNote(int inflateLevel) {
- return super.inflateNote(inflateLevel);
+ protected DataKind inflateNote(Context context, int inflateLevel) {
+ return super.inflateNote(context, inflateLevel);
}
@Override
- protected DataKind inflateWebsite(int inflateLevel) {
- return super.inflateWebsite(inflateLevel);
+ protected DataKind inflateWebsite(Context context, int inflateLevel) {
+ return super.inflateWebsite(context, inflateLevel);
}
// TODO: this should come from resource in the future
- // Note that frameworks/base/core/java/android/pim/vcard/ContactStruct.java also wants
+ // Note that frameworks/base/core/java/android/pim/vcard/VCardEntry.java also wants
// this String.
private static final String GOOGLE_MY_CONTACTS_GROUP = "System Group: My Contacts";
@@ -223,11 +227,10 @@
operations.add(ContentProviderOperation
.newAssertQuery(Groups.CONTENT_URI)
- .withSelection(Groups.TITLE + "=?",
- new String[] { GOOGLE_MY_CONTACTS_GROUP })
+ .withSelection(SELECTION_GROUPS_BY_TITLE_AND_ACCOUNT,
+ new String[] {GOOGLE_MY_CONTACTS_GROUP, accountName, accountType})
.withExpectedCount(0).build());
operations.add(ContentProviderOperation
-
.newInsert(Groups.CONTENT_URI)
.withValues(newGroup)
.build());
diff --git a/src/com/android/contacts/model/Sources.java b/src/com/android/contacts/model/Sources.java
index f664fb1..be3f17d 100644
--- a/src/com/android/contacts/model/Sources.java
+++ b/src/com/android/contacts/model/Sources.java
@@ -42,6 +42,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Locale;
/**
* Singleton holder for all parsed {@link ContactsSource} available on the
@@ -50,6 +51,7 @@
public class Sources extends BroadcastReceiver implements OnAccountsUpdateListener {
private static final String TAG = "Sources";
+ private Context mContext;
private Context mApplicationContext;
private AccountManager mAccountManager;
@@ -78,6 +80,7 @@
* Internal constructor that only performs initial parsing.
*/
private Sources(Context context) {
+ mContext = context;
mApplicationContext = context.getApplicationContext();
mAccountManager = AccountManager.get(mApplicationContext);
@@ -87,12 +90,21 @@
queryAccounts();
// Request updates when packages or accounts change
- final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+ IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addDataScheme("package");
-
mApplicationContext.registerReceiver(this, filter);
+ IntentFilter sdFilter = new IntentFilter();
+ sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
+ sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
+ mApplicationContext.registerReceiver(this, 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);
+ mApplicationContext.registerReceiver(this, filter);
+
mAccountManager.addOnAccountsUpdatedListener(this, null, false);
}
@@ -112,19 +124,35 @@
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
- final String packageName = intent.getData().getSchemeSpecificPart();
if (Intent.ACTION_PACKAGE_REMOVED.equals(action)
|| Intent.ACTION_PACKAGE_ADDED.equals(action)
- || Intent.ACTION_PACKAGE_CHANGED.equals(action)) {
- final boolean knownPackage = mKnownPackages.contains(packageName);
- if (knownPackage) {
- // Invalidate cache of existing source
- invalidateCache(packageName);
+ || Intent.ACTION_PACKAGE_CHANGED.equals(action) ||
+ Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action) ||
+ Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) {
+ String[] pkgList = null;
+ // Handle applications on sdcard.
+ if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action) ||
+ Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) {
+ pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
} else {
- // Unknown source, so reload from scratch
- queryAccounts();
+ final String packageName = intent.getData().getSchemeSpecificPart();
+ pkgList = new String[] { packageName };
}
+ if (pkgList != null) {
+ for (String packageName : pkgList) {
+ final boolean knownPackage = mKnownPackages.contains(packageName);
+ if (knownPackage) {
+ // Invalidate cache of existing source
+ invalidateCache(packageName);
+ } else {
+ // Unknown source, so reload from scratch
+ queryAccounts();
+ }
+ }
+ }
+ } else if (Intent.ACTION_LOCALE_CHANGED.equals(action)) {
+ invalidateAllCache();
}
}
@@ -137,6 +165,13 @@
}
}
+ protected void invalidateAllCache() {
+ mFallbackSource.invalidateCache();
+ for (ContactsSource source : mSources.values()) {
+ source.invalidateCache();
+ }
+ }
+
/** {@inheritDoc} */
public void onAccountsUpdated(Account[] accounts) {
// Refresh to catch any changed accounts
@@ -233,6 +268,8 @@
* Find the best {@link DataKind} matching the requested
* {@link ContactsSource#accountType} and {@link DataKind#mimeType}. If no
* direct match found, we try searching {@link #mFallbackSource}.
+ * When fourceRefresh is set to true, cache is refreshed and inflation of each
+ * EditField will occur.
*/
public DataKind getKindOrFallback(String accountType, String mimeType, Context context,
int inflateLevel) {
@@ -271,7 +308,7 @@
return source;
} else {
// Not inflated, but requested that we force-inflate
- source.ensureInflated(mApplicationContext, inflateLevel);
+ source.ensureInflated(mContext, inflateLevel);
return source;
}
}
diff --git a/src/com/android/contacts/ui/ContactsPreferences.java b/src/com/android/contacts/ui/ContactsPreferences.java
new file mode 100644
index 0000000..49a49ef
--- /dev/null
+++ b/src/com/android/contacts/ui/ContactsPreferences.java
@@ -0,0 +1,138 @@
+/*
+ * 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.ui;
+
+import com.android.contacts.R;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.provider.ContactsContract;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+
+/**
+ * Manages user preferences for contacts.
+ */
+public final class ContactsPreferences {
+
+ private Context mContext;
+ private ContentResolver mContentResolver;
+ private int mSortOrder = -1;
+ private int mDisplayOrder = -1;
+ private SettingsObserver mSettingsObserver;
+
+ public ContactsPreferences(Context context) {
+ mContext = context;
+ mContentResolver = context.getContentResolver();
+
+ mSettingsObserver = new SettingsObserver();
+ mSettingsObserver.register();
+ }
+
+ public boolean isSortOrderUserChangeable() {
+ return mContext.getResources().getBoolean(R.bool.config_sort_order_user_changeable);
+ }
+
+ private int getDefaultSortOrder() {
+ if (mContext.getResources().getBoolean(R.bool.config_default_sort_order_primary)) {
+ return ContactsContract.Preferences.SORT_ORDER_PRIMARY;
+ } else {
+ return ContactsContract.Preferences.SORT_ORDER_ALTERNATIVE;
+ }
+ }
+
+ public int getSortOrder() {
+ if (!isSortOrderUserChangeable()) {
+ return getDefaultSortOrder();
+ }
+
+ if (mSortOrder == -1) {
+ try {
+ mSortOrder = Settings.System.getInt(mContext.getContentResolver(),
+ ContactsContract.Preferences.SORT_ORDER);
+ } catch (SettingNotFoundException e) {
+ mSortOrder = getDefaultSortOrder();
+ }
+ }
+ return mSortOrder;
+ }
+
+ public void setSortOrder(int sortOrder) {
+ mSortOrder = sortOrder;
+ Settings.System.putInt(mContext.getContentResolver(),
+ ContactsContract.Preferences.SORT_ORDER, sortOrder);
+ }
+
+ public boolean isDisplayOrderUserChangeable() {
+ return mContext.getResources().getBoolean(R.bool.config_display_order_user_changeable);
+ }
+
+ private int getDefaultDisplayOrder() {
+ if (mContext.getResources().getBoolean(R.bool.config_default_display_order_primary)) {
+ return ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY;
+ } else {
+ return ContactsContract.Preferences.DISPLAY_ORDER_ALTERNATIVE;
+ }
+ }
+
+ public int getDisplayOrder() {
+ if (!isDisplayOrderUserChangeable()) {
+ return getDefaultDisplayOrder();
+ }
+
+ if (mDisplayOrder == -1) {
+ try {
+ mDisplayOrder = Settings.System.getInt(mContext.getContentResolver(),
+ ContactsContract.Preferences.DISPLAY_ORDER);
+ } catch (SettingNotFoundException e) {
+ mDisplayOrder = getDefaultDisplayOrder();
+ }
+ }
+ return mDisplayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ mDisplayOrder = displayOrder;
+ Settings.System.putInt(mContext.getContentResolver(),
+ ContactsContract.Preferences.DISPLAY_ORDER, displayOrder);
+ }
+
+ private class SettingsObserver extends ContentObserver {
+
+ public SettingsObserver() {
+ super(null);
+ }
+
+ public void register() {
+ mContentResolver.registerContentObserver(
+ Settings.System.getUriFor(
+ ContactsContract.Preferences.SORT_ORDER), false, this);
+ mContentResolver.registerContentObserver(
+ Settings.System.getUriFor(
+ ContactsContract.Preferences.DISPLAY_ORDER), false, this);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ mSortOrder = -1;
+ mDisplayOrder = -1;
+
+ // TODO send a message to parent context to notify of the change
+ }
+ }
+}
diff --git a/src/com/android/contacts/ui/DisplayGroupsActivity.java b/src/com/android/contacts/ui/ContactsPreferencesActivity.java
similarity index 76%
rename from src/com/android/contacts/ui/DisplayGroupsActivity.java
rename to src/com/android/contacts/ui/ContactsPreferencesActivity.java
index ce68dcb..5a89745 100644
--- a/src/com/android/contacts/ui/DisplayGroupsActivity.java
+++ b/src/com/android/contacts/ui/ContactsPreferencesActivity.java
@@ -16,6 +16,7 @@
package com.android.contacts.ui;
+import com.android.contacts.ContactsSearchManager;
import com.android.contacts.R;
import com.android.contacts.model.ContactsSource;
import com.android.contacts.model.GoogleSource;
@@ -28,6 +29,7 @@
import android.accounts.Account;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
import android.app.ExpandableListActivity;
import android.app.ProgressDialog;
import android.content.ContentProviderOperation;
@@ -61,6 +63,7 @@
import android.widget.CheckBox;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
+import android.widget.ListView;
import android.widget.TextView;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
@@ -74,7 +77,7 @@
* Shows a list of all available {@link Groups} available, letting the user
* select which ones they want to be visible.
*/
-public final class DisplayGroupsActivity extends ExpandableListActivity implements
+public final class ContactsPreferencesActivity extends ExpandableListActivity implements
AdapterView.OnItemClickListener, View.OnClickListener {
private static final String TAG = "DisplayGroupsActivity";
@@ -84,28 +87,60 @@
}
+ private static final int DIALOG_SORT_ORDER = 1;
+ private static final int DIALOG_DISPLAY_ORDER = 2;
+
private ExpandableListView mList;
private DisplayAdapter mAdapter;
private SharedPreferences mPrefs;
+ private ContactsPreferences mContactsPrefs;
private CheckBox mDisplayPhones;
private View mHeaderPhones;
private View mHeaderSeparator;
+ private View mSortOrderView;
+ private TextView mSortOrderTextView;
+ private int mSortOrder;
+
+ private View mDisplayOrderView;
+ private TextView mDisplayOrderTextView;
+ private int mDisplayOrder;
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
- setContentView(R.layout.act_display_groups);
+ setContentView(R.layout.contacts_preferences);
mList = getExpandableListView();
+ mList.setHeaderDividersEnabled(true);
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ mContactsPrefs = new ContactsPreferences(this);
+ mAdapter = new DisplayAdapter(this);
final LayoutInflater inflater = getLayoutInflater();
+ createWithPhonesOnlyPreferenceView(inflater);
+ createSortOrderPreferenceView(inflater);
+ createDisplayOrderPreferenceView(inflater);
+ createDisplayGroupHeader(inflater);
+
+ findViewById(R.id.btn_done).setOnClickListener(this);
+ findViewById(R.id.btn_discard).setOnClickListener(this);
+
+ // Catch clicks on the header views
+ mList.setOnItemClickListener(this);
+ mList.setOnCreateContextMenuListener(this);
+
+ mSortOrder = mContactsPrefs.getSortOrder();
+ mDisplayOrder = mContactsPrefs.getDisplayOrder();
+ }
+
+ private void createWithPhonesOnlyPreferenceView(LayoutInflater inflater) {
// Add the "Only contacts with phones" header modifier.
- mHeaderPhones = inflater.inflate(R.layout.display_header, mList, false);
+ mHeaderPhones = inflater.inflate(R.layout.display_options_phones_only, mList, false);
mHeaderPhones.setId(R.id.header_phones);
mDisplayPhones = (CheckBox) mHeaderPhones.findViewById(android.R.id.checkbox);
mDisplayPhones.setChecked(mPrefs.getBoolean(Prefs.DISPLAY_ONLY_PHONES,
@@ -116,39 +151,184 @@
text1.setText(R.string.showFilterPhones);
text2.setText(R.string.showFilterPhonesDescrip);
}
- mList.addHeaderView(mHeaderPhones, null, true);
+ }
+ private void createSortOrderPreferenceView(LayoutInflater inflater) {
+ mSortOrderView = inflater.inflate(R.layout.preference_with_more_button, mList, false);
+
+ View preferenceLayout = mSortOrderView.findViewById(R.id.preference);
+
+ TextView label = (TextView)preferenceLayout.findViewById(R.id.label);
+ label.setText(getString(R.string.display_options_sort_list_by));
+
+ mSortOrderTextView = (TextView)preferenceLayout.findViewById(R.id.data);
+ }
+
+ private void createDisplayOrderPreferenceView(LayoutInflater inflater) {
+ mDisplayOrderView = inflater.inflate(R.layout.preference_with_more_button, mList, false);
+ View preferenceLayout = mDisplayOrderView.findViewById(R.id.preference);
+
+ TextView label = (TextView)preferenceLayout.findViewById(R.id.label);
+ label.setText(getString(R.string.display_options_view_names_as));
+
+ mDisplayOrderTextView = (TextView)preferenceLayout.findViewById(R.id.data);
+ }
+
+ private void createDisplayGroupHeader(LayoutInflater inflater) {
// Add the separator before showing the detailed group list.
mHeaderSeparator = inflater.inflate(R.layout.list_separator, mList, false);
{
final TextView text1 = (TextView)mHeaderSeparator;
text1.setText(R.string.headerContactGroups);
}
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mList.removeHeaderView(mHeaderPhones);
+ mList.removeHeaderView(mSortOrderView);
+ mList.removeHeaderView(mDisplayOrderView);
+ mList.removeHeaderView(mHeaderSeparator);
+
+ // List adapter needs to be reset, because header views cannot be added
+ // to a list with an existing adapter.
+ setListAdapter(null);
+
+ mList.addHeaderView(mHeaderPhones, null, true);
+ if (mContactsPrefs.isSortOrderUserChangeable()) {
+ mList.addHeaderView(mSortOrderView, null, true);
+ }
+
+ if (mContactsPrefs.isSortOrderUserChangeable()) {
+ mList.addHeaderView(mDisplayOrderView, null, true);
+ }
+
mList.addHeaderView(mHeaderSeparator, null, false);
- findViewById(R.id.btn_done).setOnClickListener(this);
- findViewById(R.id.btn_discard).setOnClickListener(this);
+ setListAdapter(mAdapter);
- // Catch clicks on the header views
- mList.setOnItemClickListener(this);
- mList.setOnCreateContextMenuListener(this);
+ bindView();
// Start background query to find account details
new QueryGroupsTask(this).execute();
}
+ private void bindView() {
+ mSortOrderTextView.setText(
+ mSortOrder == ContactsContract.Preferences.SORT_ORDER_PRIMARY
+ ? getString(R.string.display_options_sort_by_given_name)
+ : getString(R.string.display_options_sort_by_family_name));
+
+ mDisplayOrderTextView.setText(
+ mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY
+ ? getString(R.string.display_options_view_given_name_first)
+ : getString(R.string.display_options_view_family_name_first));
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id, Bundle args) {
+ switch (id) {
+ case DIALOG_SORT_ORDER:
+ return createSortOrderDialog();
+ case DIALOG_DISPLAY_ORDER:
+ return createDisplayOrderDialog();
+ }
+
+ return null;
+ }
+
+ private Dialog createSortOrderDialog() {
+ String[] items = new String[] {
+ getString(R.string.display_options_sort_by_given_name),
+ getString(R.string.display_options_sort_by_family_name),
+ };
+
+ return new AlertDialog.Builder(this)
+ .setIcon(com.android.internal.R.drawable.ic_dialog_menu_generic)
+ .setTitle(R.string.display_options_sort_list_by)
+ .setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ setSortOrder(dialog);
+ dialog.dismiss();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+ }
+
+ private Dialog createDisplayOrderDialog() {
+ String[] items = new String[] {
+ getString(R.string.display_options_view_given_name_first),
+ getString(R.string.display_options_view_family_name_first),
+ };
+
+ return new AlertDialog.Builder(this)
+ .setIcon(com.android.internal.R.drawable.ic_dialog_menu_generic)
+ .setTitle(R.string.display_options_view_names_as)
+ .setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ setDisplayOrder(dialog);
+ dialog.dismiss();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+ }
+
+ @Override
+ protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
+ switch (id) {
+ case DIALOG_SORT_ORDER:
+ setCheckedItem(dialog,
+ mSortOrder == ContactsContract.Preferences.SORT_ORDER_PRIMARY ? 0 : 1);
+ break;
+ case DIALOG_DISPLAY_ORDER:
+ setCheckedItem(dialog,
+ mDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY
+ ? 0 : 1);
+ break;
+ }
+ }
+
+ private void setCheckedItem(Dialog dialog, int position) {
+ ListView listView = ((AlertDialog)dialog).getListView();
+ listView.setItemChecked(position, true);
+ listView.setSelection(position);
+ }
+
+ protected void setSortOrder(DialogInterface dialog) {
+ ListView listView = ((AlertDialog)dialog).getListView();
+ int checked = listView.getCheckedItemPosition();
+ mSortOrder = checked == 0
+ ? ContactsContract.Preferences.SORT_ORDER_PRIMARY
+ : ContactsContract.Preferences.SORT_ORDER_ALTERNATIVE;
+
+ bindView();
+ }
+
+ protected void setDisplayOrder(DialogInterface dialog) {
+ ListView listView = ((AlertDialog)dialog).getListView();
+ int checked = listView.getCheckedItemPosition();
+ mDisplayOrder = checked == 0
+ ? ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY
+ : ContactsContract.Preferences.DISPLAY_ORDER_ALTERNATIVE;
+
+ bindView();
+ }
+
/**
* Background operation to build set of {@link AccountDisplay} for each
* {@link Sources#getAccounts(boolean)} that provides groups.
*/
private static class QueryGroupsTask extends
- WeakAsyncTask<Void, Void, AccountSet, DisplayGroupsActivity> {
- public QueryGroupsTask(DisplayGroupsActivity target) {
+ WeakAsyncTask<Void, Void, AccountSet, ContactsPreferencesActivity> {
+ public QueryGroupsTask(ContactsPreferencesActivity target) {
super(target);
}
@Override
- protected AccountSet doInBackground(DisplayGroupsActivity target,
+ protected AccountSet doInBackground(ContactsPreferencesActivity target,
Void... params) {
final Context context = target;
final Sources sources = Sources.getInstance(context);
@@ -164,20 +344,11 @@
}
@Override
- protected void onPostExecute(DisplayGroupsActivity target, AccountSet result) {
- // Build adapter to show available groups
- final Context context = target;
- final DisplayAdapter adapter = new DisplayAdapter(context, result);
- target.setListAdapter(adapter);
+ protected void onPostExecute(ContactsPreferencesActivity target, AccountSet result) {
+ target.mAdapter.setAccounts(result);
}
}
- public void setListAdapter(DisplayAdapter adapter) {
- mAdapter = adapter;
- mAdapter.setChildDescripWithPhones(mDisplayPhones.isChecked());
- super.setListAdapter(mAdapter);
- }
-
private static final int DEFAULT_SHOULD_SYNC = 1;
private static final int DEFAULT_VISIBLE = 0;
@@ -326,7 +497,7 @@
private static Uri addCallerIsSyncAdapterParameter(Uri uri) {
return uri.buildUpon()
.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
- .build();
+ .build();
}
/**
@@ -334,7 +505,21 @@
*/
private static Comparator<GroupDelta> sIdComparator = new Comparator<GroupDelta>() {
public int compare(GroupDelta object1, GroupDelta object2) {
- return object1.getViewId() - object2.getViewId();
+ 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;
+ }
}
};
@@ -371,30 +556,27 @@
mName = accountName;
mType = accountType;
- boolean hasGroups = false;
-
final Uri groupsUri = Groups.CONTENT_URI.buildUpon()
.appendQueryParameter(Groups.ACCOUNT_NAME, accountName)
.appendQueryParameter(Groups.ACCOUNT_TYPE, accountType).build();
- EntityIterator iterator = null;
+ EntityIterator iterator = ContactsContract.Groups.newEntityIterator(resolver.query(
+ groupsUri, null, null, null, null));
try {
+ boolean hasGroups = false;
+
// Create entries for each known group
- iterator = resolver.queryEntities(groupsUri, null, null, null);
while (iterator.hasNext()) {
final ContentValues values = iterator.next().getEntityValues();
final GroupDelta group = GroupDelta.fromBefore(values);
addGroup(group);
hasGroups = true;
}
- } catch (RemoteException e) {
- Log.w(TAG, "Problem reading groups: " + e.toString());
+ // Create single entry handling ungrouped status
+ mUngrouped = GroupDelta.fromSettings(resolver, accountName, accountType, hasGroups);
+ addGroup(mUngrouped);
} finally {
- if (iterator != null) iterator.close();
+ iterator.close();
}
-
- // Create single entry handling ungrouped status
- mUngrouped = GroupDelta.fromSettings(resolver, accountName, accountType, hasGroups);
- addGroup(mUngrouped);
}
/**
@@ -472,17 +654,19 @@
private Context mContext;
private LayoutInflater mInflater;
private Sources mSources;
-
private AccountSet mAccounts;
private boolean mChildWithPhones = false;
- public DisplayAdapter(Context context, AccountSet accounts) {
+ public DisplayAdapter(Context context) {
mContext = context;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mSources = Sources.getInstance(context);
+ }
+ public void setAccounts(AccountSet accounts) {
mAccounts = accounts;
+ notifyDataSetChanged();
}
/**
@@ -594,6 +778,9 @@
/** {@inheritDoc} */
public int getGroupCount() {
+ if (mAccounts == null) {
+ return 0;
+ }
return mAccounts.size();
}
@@ -618,11 +805,20 @@
* are usually the global modifier checkboxes.
*/
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- switch (view.getId()) {
- case R.id.header_phones: {
- mDisplayPhones.toggle();
- break;
- }
+ Log.d(TAG, "OnItemClick, position=" + position + ", id=" + id);
+ if (view == mHeaderPhones) {
+ mDisplayPhones.toggle();
+ return;
+ }
+ if (view == mDisplayOrderView) {
+ Log.d(TAG, "Showing Display Order dialog");
+ showDialog(DIALOG_DISPLAY_ORDER);
+ return;
+ }
+ if (view == mSortOrderView) {
+ Log.d(TAG, "Showing Sort Order dialog");
+ showDialog(DIALOG_SORT_ORDER);
+ return;
}
}
@@ -792,7 +988,12 @@
}
private void doSaveAction() {
- if (mAdapter == null) return;
+ mContactsPrefs.setSortOrder(mSortOrder);
+ mContactsPrefs.setDisplayOrder(mDisplayOrder);
+
+ if (mAdapter == null || mAdapter.mAccounts == null) {
+ return;
+ }
setDisplayOnlyPhones(mDisplayPhones.isChecked());
new UpdateTask(this).execute(mAdapter.mAccounts);
}
@@ -849,7 +1050,13 @@
final Context context = target;
final ProgressDialog dialog = mProgress.get();
- if (dialog != null) dialog.dismiss();
+ if (dialog != null) {
+ try {
+ dialog.dismiss();
+ } catch (Exception e) {
+ Log.e(TAG, "Error dismissing progress dialog", e);
+ }
+ }
target.finish();
@@ -857,4 +1064,14 @@
context.stopService(new Intent(context, EmptyService.class));
}
}
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
}
diff --git a/src/com/android/contacts/ui/EditContactActivity.java b/src/com/android/contacts/ui/EditContactActivity.java
index 8368714..c70cff6 100644
--- a/src/com/android/contacts/ui/EditContactActivity.java
+++ b/src/com/android/contacts/ui/EditContactActivity.java
@@ -17,6 +17,7 @@
package com.android.contacts.ui;
import com.android.contacts.ContactsListActivity;
+import com.android.contacts.ContactsSearchManager;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
import com.android.contacts.model.ContactsSource;
@@ -54,16 +55,18 @@
import android.content.ContentProviderOperation.Builder;
import android.database.Cursor;
import android.graphics.Bitmap;
+import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Environment;
import android.os.RemoteException;
import android.provider.ContactsContract;
+import android.provider.MediaStore;
import android.provider.ContactsContract.AggregationExceptions;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.util.Log;
import android.view.ContextThemeWrapper;
@@ -79,16 +82,20 @@
import android.widget.TextView;
import android.widget.Toast;
+import java.io.File;
import java.lang.ref.WeakReference;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Date;
/**
* Activity for editing or inserting a contact.
*/
public final class EditContactActivity extends Activity
implements View.OnClickListener, Comparator<EntityDelta> {
+
private static final String TAG = "EditContactActivity";
/** The launch code when picking a photo and the raw data is returned */
@@ -97,8 +104,15 @@
/** The launch code when a contact to join with is returned */
private static final int REQUEST_JOIN_CONTACT = 3022;
+ /** The launch code when taking a picture */
+ private static final int CAMERA_WITH_DATA = 3023;
+
private static final String KEY_EDIT_STATE = "state";
private static final String KEY_RAW_CONTACT_ID_REQUESTING_PHOTO = "photorequester";
+ private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
+ private static final String KEY_CURRENT_PHOTO_FILE = "currentphotofile";
+ private static final String KEY_QUERY_SELECTION = "queryselection";
+ private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
/** The result code when view activity should close after edit returns */
public static final int RESULT_CLOSE_VIEW_ACTIVITY = 777;
@@ -114,9 +128,23 @@
private static final int DIALOG_CONFIRM_MULTIPLE_DELETE = 3;
private static final int DIALOG_CONFIRM_READONLY_HIDE = 4;
+ private static final int ICON_SIZE = 96;
+
+ private static final File PHOTO_DIR = new File(
+ Environment.getExternalStorageDirectory() + "/DCIM/Camera");
+
+ private File mCurrentPhotoFile;
+
String mQuerySelection;
private long mContactIdForJoin;
+
+ private static final int STATUS_LOADING = 0;
+ private static final int STATUS_EDITING = 1;
+ private static final int STATUS_SAVING = 2;
+
+ private int mStatus;
+
EntitySet mState;
/** The linear layout holding the ContactEditorViews */
@@ -124,6 +152,8 @@
private ArrayList<Dialog> mManagedDialogs = Lists.newArrayList();
+ private ViewIdGenerator mViewIdGenerator;
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -143,78 +173,91 @@
final boolean hasIncomingState = icicle != null && icicle.containsKey(KEY_EDIT_STATE);
if (Intent.ACTION_EDIT.equals(action) && !hasIncomingState) {
+ setTitle(R.string.editContact_title_edit);
+ mStatus = STATUS_LOADING;
+
// Read initial state from database
new QueryEntitiesTask(this).execute(intent);
} else if (Intent.ACTION_INSERT.equals(action) && !hasIncomingState) {
+ setTitle(R.string.editContact_title_insert);
+ mStatus = STATUS_EDITING;
// Trigger dialog to pick account type
doAddAction();
}
+
+ if (icicle == null) {
+ // If icicle is non-null, onRestoreInstanceState() will restore the generator.
+ mViewIdGenerator = new ViewIdGenerator();
+ }
}
private static class QueryEntitiesTask extends
- WeakAsyncTask<Intent, Void, Void, EditContactActivity> {
+ WeakAsyncTask<Intent, Void, EntitySet, EditContactActivity> {
+
+ private String mSelection;
+
public QueryEntitiesTask(EditContactActivity target) {
super(target);
}
@Override
- protected Void doInBackground(EditContactActivity target, Intent... params) {
- // Load edit details in background
- final Context context = target;
- final Sources sources = Sources.getInstance(context);
+ protected EntitySet doInBackground(EditContactActivity target, Intent... params) {
final Intent intent = params[0];
- final ContentResolver resolver = context.getContentResolver();
+ final ContentResolver resolver = target.getContentResolver();
// Handle both legacy and new authorities
final Uri data = intent.getData();
final String authority = data.getAuthority();
final String mimeType = intent.resolveType(resolver);
- String selection = "0";
+ mSelection = "0";
if (ContactsContract.AUTHORITY.equals(authority)) {
if (Contacts.CONTENT_ITEM_TYPE.equals(mimeType)) {
// Handle selected aggregate
final long contactId = ContentUris.parseId(data);
- selection = RawContacts.CONTACT_ID + "=" + contactId;
+ mSelection = RawContacts.CONTACT_ID + "=" + contactId;
} else if (RawContacts.CONTENT_ITEM_TYPE.equals(mimeType)) {
final long rawContactId = ContentUris.parseId(data);
final long contactId = ContactsUtils.queryForContactId(resolver, rawContactId);
- selection = RawContacts.CONTACT_ID + "=" + contactId;
+ mSelection = RawContacts.CONTACT_ID + "=" + contactId;
}
} else if (android.provider.Contacts.AUTHORITY.equals(authority)) {
final long rawContactId = ContentUris.parseId(data);
- selection = Data.RAW_CONTACT_ID + "=" + rawContactId;
+ mSelection = Data.RAW_CONTACT_ID + "=" + rawContactId;
}
- target.mQuerySelection = selection;
- target.mState = EntitySet.fromQuery(resolver, selection, null, null);
+ return EntitySet.fromQuery(target.getContentResolver(), mSelection, null, null);
+ }
+
+ @Override
+ protected void onPostExecute(EditContactActivity target, EntitySet entitySet) {
+ target.mQuerySelection = mSelection;
+
+ // Load edit details in background
+ final Context context = target;
+ final Sources sources = Sources.getInstance(context);
// Handle any incoming values that should be inserted
- final Bundle extras = intent.getExtras();
+ final Bundle extras = target.getIntent().getExtras();
final boolean hasExtras = extras != null && extras.size() > 0;
- final boolean hasState = target.mState.size() > 0;
+ final boolean hasState = entitySet.size() > 0;
if (hasExtras && hasState) {
// Find source defining the first RawContact found
- final EntityDelta state = target.mState.get(0);
+ final EntityDelta state = entitySet.get(0);
final String accountType = state.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
final ContactsSource source = sources.getInflatedSource(accountType,
ContactsSource.LEVEL_CONSTRAINTS);
EntityModifier.parseExtras(context, source, state, extras);
}
- return null;
- }
+ target.mState = entitySet;
- @Override
- protected void onPostExecute(EditContactActivity target, Void result) {
// Bind UI to new background state
target.bindEditors();
}
}
-
-
@Override
protected void onSaveInstanceState(Bundle outState) {
if (hasValidState()) {
@@ -223,6 +266,12 @@
}
outState.putLong(KEY_RAW_CONTACT_ID_REQUESTING_PHOTO, mRawContactIdRequestingPhoto);
+ outState.putParcelable(KEY_VIEW_ID_GENERATOR, mViewIdGenerator);
+ if (mCurrentPhotoFile != null) {
+ outState.putString(KEY_CURRENT_PHOTO_FILE, mCurrentPhotoFile.toString());
+ }
+ outState.putString(KEY_QUERY_SELECTION, mQuerySelection);
+ outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
super.onSaveInstanceState(outState);
}
@@ -232,6 +281,14 @@
mState = savedInstanceState.<EntitySet> getParcelable(KEY_EDIT_STATE);
mRawContactIdRequestingPhoto = savedInstanceState.getLong(
KEY_RAW_CONTACT_ID_REQUESTING_PHOTO);
+ mViewIdGenerator = savedInstanceState.getParcelable(KEY_VIEW_ID_GENERATOR);
+ String fileName = savedInstanceState.getString(KEY_CURRENT_PHOTO_FILE);
+ if (fileName != null) {
+ mCurrentPhotoFile = new File(fileName);
+ }
+ mQuerySelection = savedInstanceState.getString(KEY_QUERY_SELECTION);
+ mContactIdForJoin = savedInstanceState.getLong(KEY_CONTACT_ID_FOR_JOIN);
+
bindEditors();
super.onRestoreInstanceState(savedInstanceState);
@@ -242,14 +299,12 @@
super.onDestroy();
for (Dialog dialog : mManagedDialogs) {
- if (dialog.isShowing()) {
- dialog.dismiss();
- }
+ dismissDialog(dialog);
}
}
@Override
- protected Dialog onCreateDialog(int id) {
+ protected Dialog onCreateDialog(int id, Bundle bundle) {
switch (id) {
case DIALOG_CONFIRM_DELETE:
return new AlertDialog.Builder(this)
@@ -308,11 +363,25 @@
}
/**
+ * Dismiss the given {@link Dialog}.
+ */
+ static void dismissDialog(Dialog dialog) {
+ try {
+ // Only dismiss when valid reference and still showing
+ if (dialog != null && dialog.isShowing()) {
+ dialog.dismiss();
+ }
+ } catch (Exception e) {
+ Log.w(TAG, "Ignoring exception while dismissing dialog: " + e.toString());
+ }
+ }
+
+ /**
* Check if our internal {@link #mState} is valid, usually checked before
* performing user actions.
*/
protected boolean hasValidState() {
- return mState != null && mState.size() > 0;
+ return mStatus == STATUS_EDITING && mState != null && mState.size() > 0;
}
/**
@@ -321,7 +390,9 @@
* {@link RawContacts}.
*/
protected void bindEditors() {
- if (!hasValidState()) return;
+ if (mState == null) {
+ return;
+ }
final LayoutInflater inflater = (LayoutInflater) getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
@@ -357,11 +428,12 @@
photoEditor));
mContent.addView(editor);
- editor.setState(entity, source);
+ editor.setState(entity, source, mViewIdGenerator);
}
// Show editor now that we've loaded state
mContent.setVisibility(View.VISIBLE);
+ mStatus = STATUS_EDITING;
}
/**
@@ -515,6 +587,11 @@
break;
}
+ case CAMERA_WITH_DATA: {
+ doCropPhoto(mCurrentPhotoFile);
+ break;
+ }
+
case REQUEST_JOIN_CONTACT: {
if (resultCode == RESULT_OK && data != null) {
final long contactId = ContentUris.parseId(data.getData());
@@ -682,10 +759,7 @@
Toast.makeText(context, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
}
- // Only dismiss when valid reference and still showing
- if (progress != null && progress.isShowing()) {
- progress.dismiss();
- }
+ dismissDialog(progress);
// Stop the service that was protecting us
context.stopService(new Intent(context, EmptyService.class));
@@ -699,8 +773,11 @@
* finishes the activity.
*/
boolean doSaveAction(int saveMode) {
- if (!hasValidState()) return false;
+ if (!hasValidState()) {
+ return false;
+ }
+ mStatus = STATUS_SAVING;
final PersistTask task = new PersistTask(this, saveMode);
task.execute(mState);
@@ -760,6 +837,7 @@
break;
case SAVE_MODE_JOIN:
+ mStatus = STATUS_EDITING;
if (success) {
showJoinAggregateActivity(contactLookupUri);
}
@@ -783,6 +861,20 @@
startActivityForResult(intent, REQUEST_JOIN_CONTACT);
}
+ private interface JoinContactQuery {
+ String[] PROJECTION = {
+ RawContacts._ID,
+ RawContacts.CONTACT_ID,
+ RawContacts.NAME_VERIFIED,
+ };
+
+ String SELECTION = RawContacts.CONTACT_ID + "=? OR " + RawContacts.CONTACT_ID + "=?";
+
+ int _ID = 0;
+ int CONTACT_ID = 1;
+ int NAME_VERIFIED = 2;
+ }
+
/**
* Performs aggregation with the contact selected by the user from suggestions or A-Z list.
*/
@@ -792,16 +884,24 @@
// Load raw contact IDs for all raw contacts involved - currently edited and selected
// in the join UIs
Cursor c = resolver.query(RawContacts.CONTENT_URI,
- new String[] {RawContacts._ID},
- RawContacts.CONTACT_ID + "=" + contactId
- + " OR " + RawContacts.CONTACT_ID + "=" + mContactIdForJoin, null, null);
+ JoinContactQuery.PROJECTION,
+ JoinContactQuery.SELECTION,
+ new String[]{String.valueOf(contactId), String.valueOf(mContactIdForJoin)}, null);
long rawContactIds[];
+ long verifiedNameRawContactId = -1;
try {
rawContactIds = new long[c.getCount()];
for (int i = 0; i < rawContactIds.length; i++) {
c.moveToNext();
- rawContactIds[i] = c.getLong(0);
+ long rawContactId = c.getLong(JoinContactQuery._ID);
+ rawContactIds[i] = rawContactId;
+ if (c.getLong(JoinContactQuery.CONTACT_ID) == mContactIdForJoin) {
+ if (verifiedNameRawContactId == -1
+ || c.getInt(JoinContactQuery.NAME_VERIFIED) != 0) {
+ verifiedNameRawContactId = rawContactId;
+ }
+ }
}
} finally {
c.close();
@@ -817,6 +917,13 @@
}
}
+ // Mark the original contact as "name verified" to make sure that the contact
+ // display name does not change as a result of the join
+ Builder builder = ContentProviderOperation.newUpdate(
+ ContentUris.withAppendedId(RawContacts.CONTENT_URI, verifiedNameRawContactId));
+ builder.withValue(RawContacts.NAME_VERIFIED, 1);
+ operations.add(builder.build());
+
// Apply all aggregation exceptions as one batch
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
@@ -864,6 +971,10 @@
* {@link EntityDelta} under the currently edited {@link Contacts}.
*/
private boolean doAddAction() {
+ if (mStatus != STATUS_EDITING) {
+ return false;
+ }
+
// Adding is okay when missing state
new AddContactTask(this).execute();
return true;
@@ -874,12 +985,13 @@
* user confirmation before continuing.
*/
private boolean doDeleteAction() {
- if (!hasValidState()) return false;
+ if (!hasValidState())
+ return false;
int readOnlySourcesCnt = 0;
- int writableSourcesCnt = 0;
+ int writableSourcesCnt = 0;
Sources sources = Sources.getInstance(EditContactActivity.this);
for (EntityDelta delta : mState) {
- final String accountType = delta.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+ final String accountType = delta.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
final ContactsSource contactsSource = sources.getInflatedSource(accountType,
ContactsSource.LEVEL_CONSTRAINTS);
if (contactsSource != null && contactsSource.readOnly) {
@@ -887,18 +999,18 @@
} else {
writableSourcesCnt += 1;
}
- }
+ }
if (readOnlySourcesCnt > 0 && writableSourcesCnt > 0) {
- showDialog(DIALOG_CONFIRM_READONLY_DELETE);
- } else if (readOnlySourcesCnt > 0 && writableSourcesCnt == 0) {
- showDialog(DIALOG_CONFIRM_READONLY_HIDE);
- } else if (readOnlySourcesCnt == 0 && writableSourcesCnt > 1) {
- showDialog(DIALOG_CONFIRM_MULTIPLE_DELETE);
+ showDialog(DIALOG_CONFIRM_READONLY_DELETE);
+ } else if (readOnlySourcesCnt > 0 && writableSourcesCnt == 0) {
+ showDialog(DIALOG_CONFIRM_READONLY_HIDE);
+ } else if (readOnlySourcesCnt == 0 && writableSourcesCnt > 1) {
+ showDialog(DIALOG_CONFIRM_MULTIPLE_DELETE);
} else {
- showDialog(DIALOG_CONFIRM_DELETE);
- }
- return true;
+ showDialog(DIALOG_CONFIRM_DELETE);
+ }
+ return true;
}
/**
@@ -907,15 +1019,144 @@
boolean doPickPhotoAction(long rawContactId) {
if (!hasValidState()) return false;
+ mRawContactIdRequestingPhoto = rawContactId;
+
+ showAndManageDialog(createPickPhotoDialog());
+
+ return true;
+ }
+
+ /**
+ * Creates a dialog offering two options: take a photo or pick a photo from the gallery.
+ */
+ private Dialog createPickPhotoDialog() {
+ Context context = EditContactActivity.this;
+
+ // Wrap our context to inflate list items using correct theme
+ final Context dialogContext = new ContextThemeWrapper(context,
+ android.R.style.Theme_Light);
+
+ String[] choices;
+ choices = new String[2];
+ choices[0] = getString(R.string.take_photo);
+ choices[1] = getString(R.string.pick_photo);
+ final ListAdapter adapter = new ArrayAdapter<String>(dialogContext,
+ android.R.layout.simple_list_item_1, choices);
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(dialogContext);
+ builder.setTitle(R.string.attachToContact);
+ builder.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ switch(which) {
+ case 0:
+ doTakePhoto();
+ break;
+ case 1:
+ doPickPhotoFromGallery();
+ break;
+ }
+ }
+ });
+ return builder.create();
+ }
+
+ /**
+ * Create a file name for the icon photo using current time.
+ */
+ private String getPhotoFileName() {
+ Date date = new Date(System.currentTimeMillis());
+ SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
+ return dateFormat.format(date) + ".jpg";
+ }
+
+ /**
+ * Launches Camera to take a picture and store it in a file.
+ */
+ protected void doTakePhoto() {
try {
- // Launch picker to choose photo for selected contact
- final Intent intent = ContactsUtils.getPhotoPickIntent();
- startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
- mRawContactIdRequestingPhoto = rawContactId;
+ // Launch camera to take photo for selected contact
+ PHOTO_DIR.mkdirs();
+ mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());
+ final Intent intent = getTakePickIntent(mCurrentPhotoFile);
+ startActivityForResult(intent, CAMERA_WITH_DATA);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
}
- return true;
+ }
+
+ /**
+ * Constructs an intent for capturing a photo and storing it in a temporary file.
+ */
+ public static Intent getTakePickIntent(File f) {
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
+ return intent;
+ }
+
+ /**
+ * Sends a newly acquired photo to Gallery for cropping
+ */
+ protected void doCropPhoto(File f) {
+ try {
+
+ // Add the image to the media store
+ MediaScannerConnection.scanFile(
+ this,
+ new String[] { f.getAbsolutePath() },
+ new String[] { null },
+ null);
+
+ // Launch gallery to crop the photo
+ final Intent intent = getCropImageIntent(Uri.fromFile(f));
+ startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
+ } catch (Exception e) {
+ Log.e(TAG, "Cannot crop image", e);
+ Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
+ }
+ }
+
+ /**
+ * Constructs an intent for image cropping.
+ */
+ public static Intent getCropImageIntent(Uri photoUri) {
+ Intent intent = new Intent("com.android.camera.action.CROP");
+ intent.setDataAndType(photoUri, "image/*");
+ intent.putExtra("crop", "true");
+ intent.putExtra("aspectX", 1);
+ intent.putExtra("aspectY", 1);
+ intent.putExtra("outputX", ICON_SIZE);
+ intent.putExtra("outputY", ICON_SIZE);
+ intent.putExtra("return-data", true);
+ return intent;
+ }
+
+ /**
+ * Launches Gallery to pick a photo.
+ */
+ protected void doPickPhotoFromGallery() {
+ try {
+ // Launch picker to choose photo for selected contact
+ final Intent intent = getPhotoPickIntent();
+ startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(this, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
+ }
+ }
+
+ /**
+ * Constructs an intent for picking a photo from Gallery, cropping it and returning the bitmap.
+ */
+ public static Intent getPhotoPickIntent() {
+ Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
+ intent.setType("image/*");
+ intent.putExtra("crop", "true");
+ intent.putExtra("aspectX", 1);
+ intent.putExtra("aspectY", 1);
+ intent.putExtra("outputX", ICON_SIZE);
+ intent.putExtra("outputY", ICON_SIZE);
+ intent.putExtra("return-data", true);
+ return intent;
}
/** {@inheritDoc} */
@@ -951,246 +1192,144 @@
return doSaveAction(SAVE_MODE_JOIN);
}
-
-
-
-
-
-
-
/**
* Build dialog that handles adding a new {@link RawContacts} after the user
* picks a specific {@link ContactsSource}.
*/
private static class AddContactTask extends
- WeakAsyncTask<Void, Void, AlertDialog.Builder, EditContactActivity> {
+ WeakAsyncTask<Void, Void, ArrayList<Account>, EditContactActivity> {
+
public AddContactTask(EditContactActivity target) {
super(target);
}
@Override
- protected AlertDialog.Builder doInBackground(final EditContactActivity target,
+ protected ArrayList<Account> doInBackground(final EditContactActivity target,
Void... params) {
- final Sources sources = Sources.getInstance(target);
-
- // Wrap our context to inflate list items using correct theme
- final Context dialogContext = new ContextThemeWrapper(target, android.R.style.Theme_Light);
- final LayoutInflater dialogInflater = (LayoutInflater)dialogContext
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- final ArrayList<Account> writable = sources.getAccounts(true);
-
- // No Accounts available. Create a phone-local contact.
- if (writable.isEmpty()) {
- selectAccount(null);
- return null; // Don't show a dialog.
- }
-
- // In the common case of a single account being writable, auto-select
- // it without showing a dialog.
- if (writable.size() == 1) {
- selectAccount(writable.get(0));
- return null; // Don't show a dialog.
- }
-
- final ArrayAdapter<Account> accountAdapter = new ArrayAdapter<Account>(target,
- android.R.layout.simple_list_item_2, writable) {
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = dialogInflater.inflate(android.R.layout.simple_list_item_2,
- parent, false);
- }
-
- // TODO: show icon along with title
- final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
- final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
-
- final Account account = this.getItem(position);
- final ContactsSource source = sources.getInflatedSource(account.type,
- ContactsSource.LEVEL_SUMMARY);
-
- text1.setText(account.name);
- text2.setText(source.getDisplayLabel(target));
-
- return convertView;
- }
- };
-
- final DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
-
- // Create new contact based on selected source
- final Account account = accountAdapter.getItem(which);
- selectAccount(account);
-
- // Update the UI.
- EditContactActivity target = mTarget.get();
- if (target != null) {
- target.bindEditors();
- }
- }
- };
-
- final DialogInterface.OnCancelListener cancelListener = new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- // If nothing remains, close activity
- if (!target.hasValidState()) {
- target.finish();
- }
- }
- };
-
- // TODO: when canceled and was single add, finish()
- final AlertDialog.Builder builder = new AlertDialog.Builder(target);
- builder.setTitle(R.string.dialog_new_contact_account);
- builder.setSingleChoiceItems(accountAdapter, 0, clickListener);
- builder.setOnCancelListener(cancelListener);
- return builder;
- }
-
- /**
- * Sets up EditContactActivity's mState for the account selected.
- * Runs from a background thread.
- *
- * @param account may be null to signal a device-local contact should
- * be created.
- */
- private void selectAccount(Account account) {
- EditContactActivity target = mTarget.get();
- if (target == null) {
- return;
- }
- final Sources sources = Sources.getInstance(target);
- final ContentValues values = new ContentValues();
- if (account != null) {
- values.put(RawContacts.ACCOUNT_NAME, account.name);
- values.put(RawContacts.ACCOUNT_TYPE, account.type);
- } else {
- values.putNull(RawContacts.ACCOUNT_NAME);
- values.putNull(RawContacts.ACCOUNT_TYPE);
- }
-
- // Parse any values from incoming intent
- final EntityDelta insert = new EntityDelta(ValuesDelta.fromAfter(values));
- final ContactsSource source = sources.getInflatedSource(
- account != null ? account.type : null,
- ContactsSource.LEVEL_CONSTRAINTS);
- final Bundle extras = target.getIntent().getExtras();
- EntityModifier.parseExtras(target, source, insert, extras);
-
- // Ensure we have some default fields
- EntityModifier.ensureKindExists(insert, source, Phone.CONTENT_ITEM_TYPE);
- EntityModifier.ensureKindExists(insert, source, Email.CONTENT_ITEM_TYPE);
-
- // Create "My Contacts" membership for Google contacts
- // TODO: move this off into "templates" for each given source
- if (GoogleSource.ACCOUNT_TYPE.equals(source.accountType)) {
- GoogleSource.attemptMyContactsMembership(insert, target);
- }
-
- // TODO: no synchronization here on target.mState. This
- // runs in the background thread, but it's accessed from
- // multiple thread, including the UI thread.
- if (target.mState == null) {
- // Create state if none exists yet
- target.mState = EntitySet.fromSingle(insert);
- } else {
- // Add contact onto end of existing state
- target.mState.add(insert);
- }
+ return Sources.getInstance(target).getAccounts(true);
}
@Override
- protected void onPostExecute(EditContactActivity target, AlertDialog.Builder result) {
- if (result != null) {
- // Note: null is returned when no dialog is to be
- // shown (no multiple accounts to select between)
- target.showAndManageDialog(result.create());
- } else {
- // Account was auto-selected on the background thread,
- // but we need to update the UI still in the
- // now-current UI thread.
- target.bindEditors();
- }
+ protected void onPostExecute(final EditContactActivity target, ArrayList<Account> accounts) {
+ target.selectAccountAndCreateContact(accounts);
}
}
+ public void selectAccountAndCreateContact(ArrayList<Account> accounts) {
+ // No Accounts available. Create a phone-local contact.
+ if (accounts.isEmpty()) {
+ createContact(null);
+ return; // Don't show a dialog.
+ }
-
- private Dialog createDeleteDialog() {
- final AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(R.string.deleteConfirmation_title);
- builder.setIcon(android.R.drawable.ic_dialog_alert);
- builder.setMessage(R.string.deleteConfirmation);
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- // Mark all raw contacts for deletion
- for (EntityDelta delta : mState) {
- delta.markDeleted();
- }
-
- // Save the deletes
- doSaveAction(SAVE_MODE_DEFAULT);
- finish();
- }
- });
- builder.setNegativeButton(android.R.string.cancel, null);
- builder.setCancelable(false);
- return builder.create();
- }
-
- /**
- * Create dialog for selecting primary display name.
- */
- private Dialog createNameDialog() {
- // Build set of all available display names
- final ArrayList<ValuesDelta> allNames = Lists.newArrayList();
- for (EntityDelta entity : mState) {
- final ArrayList<ValuesDelta> displayNames = entity
- .getMimeEntries(StructuredName.CONTENT_ITEM_TYPE);
- allNames.addAll(displayNames);
+ // In the common case of a single account being writable, auto-select
+ // it without showing a dialog.
+ if (accounts.size() == 1) {
+ createContact(accounts.get(0));
+ return; // Don't show a dialog.
}
// Wrap our context to inflate list items using correct theme
final Context dialogContext = new ContextThemeWrapper(this, android.R.style.Theme_Light);
- final LayoutInflater dialogInflater = this.getLayoutInflater()
- .cloneInContext(dialogContext);
+ final LayoutInflater dialogInflater =
+ (LayoutInflater)dialogContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- final ListAdapter nameAdapter = new ArrayAdapter<ValuesDelta>(this,
- android.R.layout.simple_list_item_1, allNames) {
+ final Sources sources = Sources.getInstance(this);
+
+ final ArrayAdapter<Account> accountAdapter = new ArrayAdapter<Account>(this,
+ android.R.layout.simple_list_item_2, accounts) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
- convertView = dialogInflater.inflate(android.R.layout.simple_list_item_1,
+ convertView = dialogInflater.inflate(android.R.layout.simple_list_item_2,
parent, false);
}
- final ValuesDelta structuredName = this.getItem(position);
- final String displayName = structuredName.getAsString(StructuredName.DISPLAY_NAME);
+ // TODO: show icon along with title
+ final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
+ final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
- ((TextView)convertView).setText(displayName);
+ final Account account = this.getItem(position);
+ final ContactsSource source = sources.getInflatedSource(account.type,
+ ContactsSource.LEVEL_SUMMARY);
+
+ text1.setText(account.name);
+ text2.setText(source.getDisplayLabel(EditContactActivity.this));
return convertView;
}
};
- final DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener() {
+ final DialogInterface.OnClickListener clickListener =
+ new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
- // User picked display name, so make super-primary
- final ValuesDelta structuredName = allNames.get(which);
- structuredName.put(Data.IS_PRIMARY, 1);
- structuredName.put(Data.IS_SUPER_PRIMARY, 1);
+ // Create new contact based on selected source
+ final Account account = accountAdapter.getItem(which);
+ createContact(account);
+ }
+ };
+
+ final DialogInterface.OnCancelListener cancelListener =
+ new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ // If nothing remains, close activity
+ if (!hasValidState()) {
+ finish();
+ }
}
};
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(R.string.dialog_primary_name);
- builder.setSingleChoiceItems(nameAdapter, 0, clickListener);
- return builder.create();
+ builder.setTitle(R.string.dialog_new_contact_account);
+ builder.setSingleChoiceItems(accountAdapter, 0, clickListener);
+ builder.setOnCancelListener(cancelListener);
+ showAndManageDialog(builder.create());
+ }
+
+ /**
+ * @param account may be null to signal a device-local contact should
+ * be created.
+ */
+ private void createContact(Account account) {
+ final Sources sources = Sources.getInstance(this);
+ final ContentValues values = new ContentValues();
+ if (account != null) {
+ values.put(RawContacts.ACCOUNT_NAME, account.name);
+ values.put(RawContacts.ACCOUNT_TYPE, account.type);
+ } else {
+ values.putNull(RawContacts.ACCOUNT_NAME);
+ values.putNull(RawContacts.ACCOUNT_TYPE);
+ }
+
+ // Parse any values from incoming intent
+ EntityDelta insert = new EntityDelta(ValuesDelta.fromAfter(values));
+ final ContactsSource source = sources.getInflatedSource(
+ account != null ? account.type : null,
+ ContactsSource.LEVEL_CONSTRAINTS);
+ final Bundle extras = getIntent().getExtras();
+ EntityModifier.parseExtras(this, source, insert, extras);
+
+ // Ensure we have some default fields
+ EntityModifier.ensureKindExists(insert, source, Phone.CONTENT_ITEM_TYPE);
+ EntityModifier.ensureKindExists(insert, source, Email.CONTENT_ITEM_TYPE);
+
+ // Create "My Contacts" membership for Google contacts
+ // TODO: move this off into "templates" for each given source
+ if (GoogleSource.ACCOUNT_TYPE.equals(source.accountType)) {
+ GoogleSource.attemptMyContactsMembership(insert, this);
+ }
+
+ if (mState == null) {
+ // Create state if none exists yet
+ mState = EntitySet.fromSingle(insert);
+ } else {
+ // Add contact onto end of existing state
+ mState.add(insert);
+ }
+
+ bindEditors();
}
/**
@@ -1225,7 +1364,7 @@
return -1;
} else if (twoIsGoogle && !oneIsGoogle) {
return 1;
- } else {
+ } else if (oneIsGoogle && twoIsGoogle){
skipAccountTypeCheck = true;
}
@@ -1250,8 +1389,24 @@
}
// Both are in the same account, fall back to contact ID
- long oneId = oneValues.getAsLong(RawContacts._ID);
- long twoId = twoValues.getAsLong(RawContacts._ID);
+ Long oneId = oneValues.getAsLong(RawContacts._ID);
+ Long twoId = twoValues.getAsLong(RawContacts._ID);
+ if (oneId == null) {
+ return -1;
+ } else if (twoId == null) {
+ return 1;
+ }
+
return (int)(oneId - twoId);
}
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
}
diff --git a/src/com/android/contacts/ui/QuickContactActivity.java b/src/com/android/contacts/ui/QuickContactActivity.java
index b5e445f..7f6e39b 100644
--- a/src/com/android/contacts/ui/QuickContactActivity.java
+++ b/src/com/android/contacts/ui/QuickContactActivity.java
@@ -17,11 +17,13 @@
package com.android.contacts.ui;
import android.app.Activity;
+import android.content.ContentUris;
import android.content.Intent;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.QuickContact;
+import android.provider.ContactsContract.RawContacts;
import android.util.Log;
/**
@@ -33,7 +35,7 @@
QuickContactWindow.OnDismissListener {
private static final String TAG = "QuickContactActivity";
- static final boolean LOGV = true;
+ static final boolean LOGV = false;
static final boolean FORCE_CREATE = false;
private QuickContactWindow mQuickContact;
@@ -61,34 +63,23 @@
}
// Use our local window token for now
- final Uri lookupUri = intent.getData();
+ Uri lookupUri = intent.getData();
+ // Check to see whether it comes from the old version.
+ if (android.provider.Contacts.AUTHORITY.equals(lookupUri.getAuthority())) {
+ final long rawContactId = ContentUris.parseId(lookupUri);
+ lookupUri = RawContacts.getContactLookupUri(getContentResolver(),
+ ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
+ }
final Bundle extras = intent.getExtras();
// Read requested parameters for displaying
- final Rect target = getTargetRect(intent);
+ final Rect target = intent.getSourceBounds();
final int mode = extras.getInt(QuickContact.EXTRA_MODE, QuickContact.MODE_MEDIUM);
final String[] excludeMimes = extras.getStringArray(QuickContact.EXTRA_EXCLUDE_MIMES);
mQuickContact.show(lookupUri, target, mode, excludeMimes);
}
- private Rect getTargetRect(Intent intent) {
- Rect target = intent.getSourceBounds();
- if (target != null) {
- return target;
- }
- final Bundle extras = intent.getExtras();
- try {
- target = (Rect)extras.getParcelable(QuickContact.EXTRA_TARGET_RECT);
- if (target != null) {
- return target;
- }
- } catch (ClassCastException ex) {
- // fall through
- }
- return new Rect(0, 0, 0, 0);
- }
-
/** {@inheritDoc} */
@Override
public void onBackPressed() {
diff --git a/src/com/android/contacts/ui/QuickContactWindow.java b/src/com/android/contacts/ui/QuickContactWindow.java
index 132b18c..6fdcb01 100644
--- a/src/com/android/contacts/ui/QuickContactWindow.java
+++ b/src/com/android/contacts/ui/QuickContactWindow.java
@@ -16,6 +16,8 @@
package com.android.contacts.ui;
+import com.android.contacts.Collapser;
+import com.android.contacts.ContactPresenceIconUtil;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
import com.android.contacts.model.ContactsSource;
@@ -32,7 +34,6 @@
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
-import android.content.EntityIterator;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
@@ -54,7 +55,10 @@
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
+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.view.ContextThemeWrapper;
import android.view.Gravity;
@@ -81,10 +85,12 @@
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.ListView;
+import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.ref.SoftReference;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
@@ -109,6 +115,32 @@
public void onDismiss(QuickContactWindow dialog);
}
+ /**
+ * Custom layout the sole purpose of which is to intercept the BACK key and
+ * close QC even when the soft keyboard is open.
+ */
+ public static class RootLayout extends RelativeLayout {
+
+ QuickContactWindow mQuickContactWindow;
+
+ public RootLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ /**
+ * Intercepts the BACK key event and dismisses QuickContact window.
+ */
+ @Override
+ public boolean dispatchKeyEventPreIme(KeyEvent event) {
+ if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
+ mQuickContactWindow.onBackPressed();
+ return true;
+ } else {
+ return super.dispatchKeyEventPreIme(event);
+ }
+ }
+ }
+
private final Context mContext;
private final LayoutInflater mInflater;
private final WindowManager mWindowManager;
@@ -143,6 +175,7 @@
private ImageView mArrowDown;
private int mMode;
+ private RootLayout mRootView;
private View mHeader;
private HorizontalScrollView mTrackScroll;
private ViewGroup mTrack;
@@ -173,10 +206,17 @@
private String[] mExcludeMimes;
/**
- * Specific MIME-types that should be bumped to the front of the dialog.
- * Other MIME-types not appearing in this list follow in alphabetic order.
+ * {@link #PRECEDING_MIMETYPES} and {@link #FOLLOWING_MIMETYPES} are used to sort MIME-types.
+ *
+ * <p>The MIME-types in {@link #PRECEDING_MIMETYPES} appear in the front of the dialog,
+ * in the order in the array.
+ *
+ * <p>The ones in {@link #FOLLOWING_MIMETYPES} appear in the end of the dialog, in alphabetical
+ * order.
+ *
+ * <p>The rest go between them, in the order in the array.
*/
- private static final String[] ORDERED_MIMETYPES = new String[] {
+ private static final String[] PRECEDING_MIMETYPES = new String[] {
Phone.CONTENT_ITEM_TYPE,
Contacts.CONTENT_ITEM_TYPE,
Constants.MIME_SMS_ADDRESS,
@@ -184,6 +224,14 @@
};
/**
+ * See {@link #PRECEDING_MIMETYPES}.
+ */
+ private static final String[] FOLLOWING_MIMETYPES = new String[] {
+ StructuredPostal.CONTENT_ITEM_TYPE,
+ Website.CONTENT_ITEM_TYPE,
+ };
+
+ /**
* Specific list {@link ApplicationInfo#packageName} of apps that are
* prefered <strong>only</strong> for the purposes of default icons when
* multiple {@link ResolveInfo} are found to match. This only happens when
@@ -195,7 +243,8 @@
"com.android.calendar",
"com.android.contacts",
"com.android.mms",
- "com.android.phone");
+ "com.android.phone",
+ "com.android.browser");
private static final int TOKEN_DATA = 1;
@@ -215,9 +264,16 @@
mWindow = PolicyManager.makeNewWindow(mContext);
mWindow.setCallback(this);
mWindow.setWindowManager(mWindowManager, null, null);
+ mWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED);
mWindow.setContentView(R.layout.quickcontact);
+ mRootView = (RootLayout)mWindow.findViewById(R.id.root);
+ mRootView.mQuickContactWindow = this;
+ mRootView.setFocusable(true);
+ mRootView.setFocusableInTouchMode(true);
+ mRootView.setDescendantFocusability(RootLayout.FOCUS_AFTER_DESCENDANTS);
+
mArrowUp = (ImageView)mWindow.findViewById(R.id.arrow_up);
mArrowDown = (ImageView)mWindow.findViewById(R.id.arrow_down);
@@ -303,6 +359,18 @@
android.os.Debug.startMethodTracing(TRACE_TAG);
}
+ // Validate incoming parameters
+ final boolean validMode = (mode == QuickContact.MODE_SMALL
+ || mode == QuickContact.MODE_MEDIUM || mode == QuickContact.MODE_LARGE);
+ if (!validMode) {
+ throw new IllegalArgumentException("Invalid mode, expecting MODE_LARGE, "
+ + "MODE_MEDIUM, or MODE_SMALL");
+ }
+
+ if (anchor == null) {
+ throw new IllegalArgumentException("Missing anchor rectangle");
+ }
+
// Prepare header view for requested mode
mLookupUri = lookupUri;
mAnchor = new Rect(anchor);
@@ -320,6 +388,10 @@
resetTrack();
+ // We need to have a focused view inside the QuickContact window so
+ // that the BACK key event can be intercepted
+ mRootView.requestFocus();
+
mHasValidSocial = false;
mDismissed = false;
mQuerying = true;
@@ -585,30 +657,6 @@
}
/**
- * Find the presence icon for showing in summary header.
- */
- private Drawable getPresenceIcon(int status) {
- int resId = -1;
- switch (status) {
- case StatusUpdates.AVAILABLE:
- resId = android.R.drawable.presence_online;
- break;
- case StatusUpdates.IDLE:
- case StatusUpdates.AWAY:
- resId = android.R.drawable.presence_away;
- break;
- case StatusUpdates.DO_NOT_DISTURB:
- resId = android.R.drawable.presence_busy;
- break;
- }
- if (resId != -1) {
- return mContext.getResources().getDrawable(resId);
- } else {
- return null;
- }
- }
-
- /**
* Find the QuickContact-specific presence icon for showing in chiclets.
*/
private Drawable getTrackPresenceIcon(int status) {
@@ -650,7 +698,7 @@
* Abstract definition of an action that could be performed, along with
* string description and icon.
*/
- private interface Action {
+ private interface Action extends Collapser.Collapsible<Action> {
public CharSequence getHeader();
public CharSequence getBody();
@@ -739,6 +787,12 @@
mIntent = new Intent(Intent.ACTION_SENDTO, mailUri);
}
+ } else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ final String url = getAsString(cursor, Website.URL);
+ if (!TextUtils.isEmpty(url)) {
+ mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ }
+
} else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
final boolean isEmail = Email.CONTENT_ITEM_TYPE.equals(
getAsString(cursor, Data.MIMETYPE));
@@ -836,6 +890,39 @@
public Intent getIntent() {
return mIntent;
}
+
+ /** {@inheritDoc} */
+ public boolean collapseWith(Action other) {
+ if (!shouldCollapseWith(other)) {
+ return false;
+ }
+ return true;
+ }
+
+ /** {@inheritDoc} */
+ public boolean shouldCollapseWith(Action t) {
+ if (t == null) {
+ return false;
+ }
+ if (!(t instanceof DataAction)) {
+ Log.e(TAG, "t must be DataAction");
+ return false;
+ }
+ DataAction other = (DataAction)t;
+ if (!ContactsUtils.areObjectsEqual(mKind, other.mKind)) {
+ return false;
+ }
+ if (!ContactsUtils.shouldCollapse(mContext, mMimeType, mBody, other.mMimeType,
+ other.mBody)) {
+ return false;
+ }
+ if (!TextUtils.equals(mMimeType, other.mMimeType)
+ || !ContactsUtils.areIntentActionEqual(mIntent, other.mIntent)
+ ) {
+ return false;
+ }
+ return true;
+ }
}
/**
@@ -887,6 +974,15 @@
return null;
}
+ /** {@inheritDoc} */
+ public boolean collapseWith(Action t) {
+ return false; // Never dup.
+ }
+
+ /** {@inheritDoc} */
+ public boolean shouldCollapseWith(Action t) {
+ return false; // Never dup.
+ }
}
/**
@@ -1029,7 +1125,7 @@
* Provide a strongly-typed {@link LinkedList} that holds a list of
* {@link Action} objects.
*/
- private class ActionList extends LinkedList<Action> {
+ private class ActionList extends ArrayList<Action> {
}
/**
@@ -1135,7 +1231,7 @@
// Read contact information from last data row
final String name = cursor.getString(DataQuery.DISPLAY_NAME);
final int presence = cursor.getInt(DataQuery.CONTACT_PRESENCE);
- final Drawable statusIcon = getPresenceIcon(presence);
+ final Drawable statusIcon = ContactPresenceIconUtil.getPresenceIcon(mContext, presence);
setHeaderText(R.id.name, name);
setHeaderImage(R.id.presence, statusIcon);
@@ -1154,22 +1250,39 @@
setHeaderText(R.id.timestamp, status.getTimestampLabel(mContext));
}
- // Turn our list of actions into UI elements, starting with common types
- final Set<String> containedTypes = mActions.keySet();
- for (String mimeType : ORDERED_MIMETYPES) {
+ // Turn our list of actions into UI elements
+
+ // Index where we start adding child views.
+ int index = mTrack.getChildCount() - 1;
+
+ // All the mime-types to add.
+ final Set<String> containedTypes = new HashSet<String>(mActions.keySet());
+
+ // First, add PRECEDING_MIMETYPES, which are most common.
+ for (String mimeType : PRECEDING_MIMETYPES) {
if (containedTypes.contains(mimeType)) {
- final int index = mTrack.getChildCount() - 1;
- mTrack.addView(inflateAction(mimeType), index);
+ mTrack.addView(inflateAction(mimeType), index++);
containedTypes.remove(mimeType);
}
}
- // Then continue with remaining MIME-types in alphabetical order
+ // Keep the current index to append non PRECEDING/FOLLOWING items.
+ final int indexAfterPreceding = index;
+
+ // Then, add FOLLOWING_MIMETYPES, which are least common.
+ for (String mimeType : FOLLOWING_MIMETYPES) {
+ if (containedTypes.contains(mimeType)) {
+ mTrack.addView(inflateAction(mimeType), index++);
+ containedTypes.remove(mimeType);
+ }
+ }
+
+ // Go back to just after PRECEDING_MIMETYPES, and append the rest.
+ index = indexAfterPreceding;
final String[] remainingTypes = containedTypes.toArray(new String[containedTypes.size()]);
Arrays.sort(remainingTypes);
for (String mimeType : remainingTypes) {
- final int index = mTrack.getChildCount() - 1;
- mTrack.addView(inflateAction(mimeType), index);
+ mTrack.addView(inflateAction(mimeType), index++);
}
}
@@ -1208,8 +1321,8 @@
}
/**
- * Inflate the in-track view for the action of the given MIME-type. Will use
- * the icon provided by the {@link DataKind}.
+ * Inflate the in-track view for the action of the given MIME-type, collapsing duplicate values.
+ * Will use the icon provided by the {@link DataKind}.
*/
private View inflateAction(String mimeType) {
final CheckableImageView view = (CheckableImageView)obtainView();
@@ -1217,6 +1330,9 @@
// Add direct intent if single child, otherwise flag for multiple
ActionList children = mActions.get(mimeType);
+ if (children.size() > 1) {
+ Collapser.collapseList(children);
+ }
Action firstInfo = children.get(0);
if (children.size() == 1) {
view.setTag(firstInfo);
@@ -1428,7 +1544,7 @@
* window, which usually means we should dismiss.
*/
protected void detectEventOutside(MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN && mDecor != null) {
// Only try detecting outside events on down-press
mDecor.getHitRect(mRect);
mRect.top = mRect.top + mShadowTouch;
@@ -1507,11 +1623,6 @@
}
/** {@inheritDoc} */
- public void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
- // No actions
- }
-
- /** {@inheritDoc} */
public void onAttachedToWindow() {
// No actions
}
diff --git a/src/com/android/contacts/ui/ShowOrCreateActivity.java b/src/com/android/contacts/ui/ShowOrCreateActivity.java
index 7728b36..e0781d2 100755
--- a/src/com/android/contacts/ui/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/ui/ShowOrCreateActivity.java
@@ -16,6 +16,7 @@
package com.android.contacts.ui;
+import com.android.contacts.ContactsSearchManager;
import com.android.contacts.ContactsListActivity;
import com.android.contacts.R;
import com.android.contacts.util.Constants;
@@ -221,11 +222,6 @@
return super.onCreateDialog(id);
}
- /** {@inheritDoc} */
- public void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
- // No actions
- }
-
/**
* Listener for {@link DialogInterface} that launches a given {@link Intent}
* when clicked. When clicked, this also closes the parent using
@@ -251,4 +247,14 @@
mParent.finish();
}
}
+
+ @Override
+ public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
+ boolean globalSearch) {
+ if (globalSearch) {
+ super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
+ } else {
+ ContactsSearchManager.startSearch(this, initialQuery);
+ }
+ }
}
diff --git a/src/com/android/contacts/ui/ViewIdGenerator.java b/src/com/android/contacts/ui/ViewIdGenerator.java
new file mode 100644
index 0000000..f7281d4
--- /dev/null
+++ b/src/com/android/contacts/ui/ViewIdGenerator.java
@@ -0,0 +1,133 @@
+/*
+ * 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.ui;
+
+import com.android.contacts.model.EntityDelta;
+import com.android.contacts.model.ContactsSource.DataKind;
+import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.ui.widget.GenericEditorView;
+import com.android.contacts.ui.widget.KindSectionView;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A class that provides unique view ids for {@link ContentEditorView}, {@link KindSectionView},
+ * {@link GenericEditorView} 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.
+ *
+ * <p>This class is not thread safe.
+ */
+public final class ViewIdGenerator implements Parcelable {
+ private static final int INVALID_VIEW_ID = 0;
+ private static final int INITIAL_VIEW_ID = 1;
+
+ public static final int NO_VIEW_INDEX = -1;
+
+ private int mNextId;
+
+ /**
+ * Used as a map from the "key" of the views to actual ids. {@link #getId()} generates keys for
+ * the views.
+ */
+ private Bundle mIdMap = new Bundle();
+
+ private static final char KEY_SEPARATOR = '*';
+
+ private final static StringBuilder sWorkStringBuilder = new StringBuilder();
+
+ public ViewIdGenerator() {
+ mNextId = INITIAL_VIEW_ID;
+ }
+
+ /** {@inheritDoc} */
+ public int describeContents() {
+ return 0;
+ }
+
+ /**
+ * Returns an id for a view associated with specified contact field.
+ *
+ * @param entity {@link EntityDelta} associated with the view
+ * @param kind {@link DataKind} associated with the view, or null if none exists.
+ * @param values {@link ValuesDelta} associated with the view, or null if none exists.
+ * @param viewIndex index of the view in the parent {@link Editor}, if it's a leave view.
+ * Otherwise, pass {@link #NO_VIEW_INDEX}.
+ */
+ public int getId(EntityDelta entity, DataKind kind, ValuesDelta values,
+ int viewIndex) {
+ final String k = getMapKey(entity, kind, values, viewIndex);
+
+ int id = mIdMap.getInt(k, INVALID_VIEW_ID);
+ if (id == INVALID_VIEW_ID) {
+ // Make sure the new id won't conflict with auto-generated ids by masking with 0xffff.
+ id = (mNextId++) & 0xFFFF;
+ mIdMap.putInt(k, id);
+ }
+ return id;
+ }
+
+ private static String getMapKey(EntityDelta entity, DataKind kind, ValuesDelta values,
+ int viewIndex) {
+ sWorkStringBuilder.setLength(0);
+ if (entity != null) {
+ sWorkStringBuilder.append(entity.getValues().getId());
+
+ if (kind != null) {
+ sWorkStringBuilder.append(KEY_SEPARATOR);
+ sWorkStringBuilder.append(kind.mimeType);
+
+ if (values != null) {
+ sWorkStringBuilder.append(KEY_SEPARATOR);
+ sWorkStringBuilder.append(values.getId());
+
+ if (viewIndex != NO_VIEW_INDEX) {
+ sWorkStringBuilder.append(KEY_SEPARATOR);
+ sWorkStringBuilder.append(viewIndex);
+ }
+ }
+ }
+ }
+ return sWorkStringBuilder.toString();
+ }
+
+ /** {@Override} */
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mNextId);
+ dest.writeBundle(mIdMap);
+ }
+
+ private void readFromParcel(Parcel src) {
+ mNextId = src.readInt();
+ mIdMap = src.readBundle();
+ }
+
+ public static final Parcelable.Creator<ViewIdGenerator> CREATOR =
+ new Parcelable.Creator<ViewIdGenerator>() {
+ public ViewIdGenerator createFromParcel(Parcel in) {
+ final ViewIdGenerator vig = new ViewIdGenerator();
+ vig.readFromParcel(in);
+ return vig;
+ }
+
+ public ViewIdGenerator[] newArray(int size) {
+ return new ViewIdGenerator[size];
+ }
+ };
+}
diff --git a/src/com/android/contacts/ui/widget/BaseContactEditorView.java b/src/com/android/contacts/ui/widget/BaseContactEditorView.java
index 189e2d5..c2f9136 100644
--- a/src/com/android/contacts/ui/widget/BaseContactEditorView.java
+++ b/src/com/android/contacts/ui/widget/BaseContactEditorView.java
@@ -22,6 +22,7 @@
import com.android.contacts.model.ContactsSource.EditType;
import com.android.contacts.model.Editor.EditorListener;
import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.ui.ViewIdGenerator;
import android.content.Context;
import android.content.Entity;
@@ -95,7 +96,7 @@
* {@link EntityDelta} state and the {@link ContactsSource} that
* apply to that state.
*/
- public abstract void setState(EntityDelta state, ContactsSource source);
+ public abstract void setState(EntityDelta state, ContactsSource source, ViewIdGenerator vig);
/**
* Sets the {@link EditorListener} on the name field
diff --git a/src/com/android/contacts/ui/widget/ContactEditorView.java b/src/com/android/contacts/ui/widget/ContactEditorView.java
index 1720822..83bf2fb 100644
--- a/src/com/android/contacts/ui/widget/ContactEditorView.java
+++ b/src/com/android/contacts/ui/widget/ContactEditorView.java
@@ -24,11 +24,14 @@
import com.android.contacts.model.ContactsSource.EditType;
import com.android.contacts.model.Editor.EditorListener;
import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.ui.ViewIdGenerator;
import android.content.Context;
import android.content.Entity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
@@ -61,6 +64,7 @@
private View mPhotoStub;
private GenericEditorView mName;
+ private boolean mIsSourceReadOnly;
private ViewGroup mGeneral;
private ViewGroup mSecondary;
private boolean mSecondaryVisible;
@@ -135,12 +139,22 @@
/**
* Set the visibility of secondary sections, along with header icon.
+ *
+ * <p>If the source is read-only and there's no secondary fields, the entire secondary section
+ * will be hidden.
*/
private void setSecondaryVisible(boolean makeVisible) {
- mSecondary.setVisibility(makeVisible ? View.VISIBLE : View.GONE);
- mSecondaryHeader.setCompoundDrawablesWithIntrinsicBounds(makeVisible ? mSecondaryOpen
- : mSecondaryClosed, null, null, null);
mSecondaryVisible = makeVisible;
+
+ if (!mIsSourceReadOnly && mSecondary.getChildCount() > 0) {
+ mSecondaryHeader.setVisibility(View.VISIBLE);
+ mSecondaryHeader.setCompoundDrawablesWithIntrinsicBounds(
+ makeVisible ? mSecondaryOpen : mSecondaryClosed, null, null, null);
+ mSecondary.setVisibility(makeVisible ? View.VISIBLE : View.GONE);
+ } else {
+ mSecondaryHeader.setVisibility(View.GONE);
+ mSecondary.setVisibility(View.GONE);
+ }
}
/**
@@ -149,7 +163,7 @@
* apply to that state.
*/
@Override
- public void setState(EntityDelta state, ContactsSource source) {
+ public void setState(EntityDelta state, ContactsSource source, ViewIdGenerator vig) {
// Remove any existing sections
mGeneral.removeAllViews();
mSecondary.removeAllViews();
@@ -157,6 +171,10 @@
// Bail if invalid state or source
if (state == null || source == null) return;
+ setId(vig.getId(state, null, null, ViewIdGenerator.NO_VIEW_INDEX));
+
+ mIsSourceReadOnly = source.readOnly;
+
// Make sure we have StructuredName
EntityModifier.ensureKindExists(state, source, StructuredName.CONTENT_ITEM_TYPE);
@@ -180,12 +198,11 @@
EntityModifier.ensureKindExists(state, source, Photo.CONTENT_ITEM_TYPE);
mHasPhotoEditor = (source.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null);
mPhoto.setVisibility(mHasPhotoEditor ? View.VISIBLE : View.GONE);
- mPhoto.setEnabled(!source.readOnly);
- mName.setEnabled(!source.readOnly);
+ mPhoto.setEnabled(!mIsSourceReadOnly);
+ mName.setEnabled(!mIsSourceReadOnly);
- boolean readOnly = source.readOnly;
// Show and hide the appropriate views
- if (readOnly) {
+ if (mIsSourceReadOnly) {
mGeneral.setVisibility(View.GONE);
mName.setVisibility(View.GONE);
mReadOnly.setVisibility(View.VISIBLE);
@@ -198,6 +215,7 @@
mReadOnlyName.setVisibility(View.GONE);
}
+ boolean anySecondaryFieldFilled = false;
// Create editor sections for each possible data kind
for (DataKind kind : source.getSortedDataKinds()) {
// Skip kind of not editable
@@ -207,8 +225,8 @@
if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
// Handle special case editor for structured name
final ValuesDelta primary = state.getPrimaryEntry(mimeType);
- if (!readOnly) {
- mName.setValues(kind, primary, state, source.readOnly);
+ if (!mIsSourceReadOnly) {
+ mName.setValues(kind, primary, state, mIsSourceReadOnly, vig);
} else {
String displayName = primary.getAsString(StructuredName.DISPLAY_NAME);
mReadOnlyName.setText(displayName);
@@ -216,37 +234,27 @@
} else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
// Handle special case editor for photos
final ValuesDelta primary = state.getPrimaryEntry(mimeType);
- mPhoto.setValues(kind, primary, state, source.readOnly);
- if (readOnly && !mPhoto.hasSetPhoto()) {
+ mPhoto.setValues(kind, primary, state, mIsSourceReadOnly, vig);
+ if (mIsSourceReadOnly && !mPhoto.hasSetPhoto()) {
mPhotoStub.setVisibility(View.GONE);
} else {
mPhotoStub.setVisibility(View.VISIBLE);
}
- } else if (!readOnly) {
+ } else if (!mIsSourceReadOnly) {
// Otherwise use generic section-based editors
if (kind.fieldList == null) continue;
final ViewGroup parent = kind.secondary ? mSecondary : mGeneral;
final KindSectionView section = (KindSectionView)mInflater.inflate(
R.layout.item_kind_section, parent, false);
- section.setState(kind, state, source.readOnly);
- section.setId(kind.weight);
+ section.setState(kind, state, mIsSourceReadOnly, vig);
+ if (kind.secondary && section.isAnyEditorFilledOut()) {
+ anySecondaryFieldFilled = true;
+ }
parent.addView(section);
}
}
- if (!readOnly && mSecondary.getChildCount() > 0) {
- // There exist secondary elements, show the header and honor mSecondaryVisible
- mSecondaryHeader.setVisibility(View.VISIBLE);
- if (mSecondaryVisible) {
- mSecondary.setVisibility(View.VISIBLE);
- } else {
- mSecondary.setVisibility(View.GONE);
- }
- } else {
- // There are no secondary elements, hide the whole thing
- mSecondaryHeader.setVisibility(View.GONE);
- mSecondary.setVisibility(View.GONE);
- }
+ setSecondaryVisible(anySecondaryFieldFilled);
}
/**
@@ -261,4 +269,57 @@
public long getRawContactId() {
return mRawContactId;
}
+
+ private static class SavedState extends BaseSavedState {
+ public boolean mSecondaryVisible;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ mSecondaryVisible = (in.readInt() == 0 ? false : true);
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(mSecondaryVisible ? 1 : 0);
+ }
+
+ 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];
+ }
+ };
+ }
+
+ /**
+ * Saves the visibility of the secondary field.
+ */
+ @Override
+ protected Parcelable onSaveInstanceState() {
+ Parcelable superState = super.onSaveInstanceState();
+ SavedState ss = new SavedState(superState);
+
+ ss.mSecondaryVisible = mSecondaryVisible;
+ return ss;
+ }
+
+ /**
+ * Restores the visibility of the secondary field.
+ */
+ @Override
+ protected void onRestoreInstanceState(Parcelable state) {
+ SavedState ss = (SavedState) state;
+ super.onRestoreInstanceState(ss.getSuperState());
+
+ setSecondaryVisible(ss.mSecondaryVisible);
+ }
}
diff --git a/src/com/android/contacts/ui/widget/GenericEditorView.java b/src/com/android/contacts/ui/widget/GenericEditorView.java
index e1fdd71..24262bb 100644
--- a/src/com/android/contacts/ui/widget/GenericEditorView.java
+++ b/src/com/android/contacts/ui/widget/GenericEditorView.java
@@ -25,15 +25,19 @@
import com.android.contacts.model.ContactsSource.EditField;
import com.android.contacts.model.ContactsSource.EditType;
import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.ui.ViewIdGenerator;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Entity;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.telephony.PhoneNumberFormattingTextWatcher;
import android.text.Editable;
import android.text.InputType;
+import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
@@ -67,6 +71,7 @@
protected ViewGroup mFields;
protected View mDelete;
protected View mMore;
+ protected View mLess;
protected DataKind mKind;
protected ValuesDelta mEntry;
@@ -79,6 +84,8 @@
// Used only when a user tries to use custom label.
private EditType mPendingType;
+ private ViewIdGenerator mViewIdGenerator;
+
public GenericEditorView(Context context) {
super(context);
}
@@ -103,6 +110,9 @@
mMore = findViewById(R.id.edit_more);
mMore.setOnClickListener(this);
+
+ mLess = findViewById(R.id.edit_less);
+ mLess.setOnClickListener(this);
}
protected EditorListener mListener;
@@ -124,6 +134,7 @@
v.setEnabled(enabled);
}
mMore.setEnabled(enabled);
+ mLess.setEnabled(enabled);
}
/**
@@ -159,19 +170,33 @@
}
}
+ public boolean isAnyFieldFilledOut() {
+ int childCount = mFields.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ EditText editorView = (EditText) mFields.getChildAt(i);
+ if (!TextUtils.isEmpty(editorView.getText())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private void rebuildValues() {
- setValues(mKind, mEntry, mState, mReadOnly);
+ setValues(mKind, mEntry, mState, mReadOnly, mViewIdGenerator);
}
/**
* Prepare this editor using the given {@link DataKind} for defining
* structure and {@link ValuesDelta} describing the content to edit.
*/
- public void setValues(DataKind kind, ValuesDelta entry, EntityDelta state, boolean readOnly) {
+ public void setValues(DataKind kind, ValuesDelta entry, EntityDelta state, boolean readOnly,
+ ViewIdGenerator vig) {
mKind = kind;
mEntry = entry;
mState = state;
mReadOnly = readOnly;
+ mViewIdGenerator = vig;
+ setId(vig.getId(state, kind, entry, ViewIdGenerator.NO_VIEW_INDEX));
final boolean enabled = !readOnly;
@@ -195,9 +220,11 @@
// Build out set of fields
mFields.removeAllViews();
boolean hidePossible = false;
+ int n = 0;
for (EditField field : kind.fieldList) {
// Inflate field from definition
EditText fieldView = (EditText)mInflater.inflate(RES_FIELD, mFields, false);
+ fieldView.setId(vig.getId(state, kind, entry, n++));
if (field.titleRes > 0) {
fieldView.setHint(field.titleRes);
}
@@ -238,8 +265,15 @@
}
// When hiding fields, place expandable
- mMore.setVisibility(hidePossible ? View.VISIBLE : View.GONE);
+ if (hidePossible) {
+ mMore.setVisibility(mHideOptional ? View.VISIBLE : View.GONE);
+ mLess.setVisibility(mHideOptional ? View.GONE : View.VISIBLE);
+ } else {
+ mMore.setVisibility(View.GONE);
+ mLess.setVisibility(View.GONE);
+ }
mMore.setEnabled(enabled);
+ mLess.setEnabled(enabled);
}
/**
@@ -268,6 +302,8 @@
mEntry.put(mKind.typeColumn, mType.rawValue);
mEntry.put(mType.customColumn, customText);
rebuildLabel();
+ if (!mFields.hasFocus())
+ mFields.requestFocus();
}
}
});
@@ -324,6 +360,8 @@
mType = selected;
mEntry.put(mKind.typeColumn, mType.rawValue);
rebuildLabel();
+ if (!mFields.hasFocus())
+ mFields.requestFocus();
}
}
};
@@ -355,11 +393,80 @@
}
break;
}
- case R.id.edit_more: {
+ case R.id.edit_more:
+ case R.id.edit_less: {
mHideOptional = !mHideOptional;
rebuildValues();
break;
}
}
}
+
+ private static class SavedState extends BaseSavedState {
+ public boolean mHideOptional;
+ public int[] mVisibilities;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ mVisibilities = new int[in.readInt()];
+ in.readIntArray(mVisibilities);
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(mVisibilities.length);
+ out.writeIntArray(mVisibilities);
+ }
+
+ 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];
+ }
+ };
+ }
+
+ /**
+ * Saves the visibility of the child EditTexts, and mHideOptional.
+ */
+ @Override
+ protected Parcelable onSaveInstanceState() {
+ Parcelable superState = super.onSaveInstanceState();
+ SavedState ss = new SavedState(superState);
+
+ ss.mHideOptional = mHideOptional;
+
+ final int numChildren = mFields.getChildCount();
+ ss.mVisibilities = new int[numChildren];
+ for (int i = 0; i < numChildren; i++) {
+ ss.mVisibilities[i] = mFields.getChildAt(i).getVisibility();
+ }
+
+ return ss;
+ }
+
+ /**
+ * Restores the visibility of the child EditTexts, and mHideOptional.
+ */
+ @Override
+ protected void onRestoreInstanceState(Parcelable state) {
+ SavedState ss = (SavedState) state;
+ super.onRestoreInstanceState(ss.getSuperState());
+
+ mHideOptional = ss.mHideOptional;
+
+ int numChildren = Math.min(mFields.getChildCount(), ss.mVisibilities.length);
+ for (int i = 0; i < numChildren; i++) {
+ mFields.getChildAt(i).setVisibility(ss.mVisibilities[i]);
+ }
+ }
}
diff --git a/src/com/android/contacts/ui/widget/KindSectionView.java b/src/com/android/contacts/ui/widget/KindSectionView.java
index b52cfd0..221bc16 100644
--- a/src/com/android/contacts/ui/widget/KindSectionView.java
+++ b/src/com/android/contacts/ui/widget/KindSectionView.java
@@ -23,6 +23,7 @@
import com.android.contacts.model.ContactsSource.DataKind;
import com.android.contacts.model.Editor.EditorListener;
import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.ui.ViewIdGenerator;
import android.content.Context;
import android.provider.ContactsContract.Data;
@@ -31,6 +32,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -46,12 +48,15 @@
private ViewGroup mEditors;
private View mAdd;
+ private ImageView mAddPlusButton;
private TextView mTitle;
private DataKind mKind;
private EntityDelta mState;
private boolean mReadOnly;
+ private ViewIdGenerator mViewIdGenerator;
+
public KindSectionView(Context context) {
super(context);
}
@@ -74,6 +79,8 @@
mAdd = findViewById(R.id.kind_header);
mAdd.setOnClickListener(this);
+ mAddPlusButton = (ImageView) findViewById(R.id.kind_plus);
+
mTitle = (TextView)findViewById(R.id.kind_title);
}
@@ -88,19 +95,45 @@
// Ignore requests
}
- public void setState(DataKind kind, EntityDelta state, boolean readOnly) {
+ public void setState(DataKind kind, EntityDelta 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
mTitle.setText(kind.titleRes);
+ // Only show the add button if this is a list
+ mAddPlusButton.setVisibility(mKind.isList ? View.VISIBLE : View.GONE);
+
this.rebuildFromState();
this.updateAddEnabled();
this.updateEditorsVisible();
}
+ public boolean isAnyEditorFilledOut() {
+ if (mState == null) {
+ return false;
+ }
+
+ if (!mState.hasMimeEntries(mKind.mimeType)) {
+ return false;
+ }
+
+ int editorCount = mEditors.getChildCount();
+ for (int i = 0; i < editorCount; i++) {
+ GenericEditorView editorView = (GenericEditorView) mEditors.getChildAt(i);
+ if (editorView.isAnyFieldFilledOut()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* Build editors for all current {@link #mState} rows.
*/
@@ -108,18 +141,44 @@
// Remove any existing editors
mEditors.removeAllViews();
- // Build individual editors for each entry
- if (!mState.hasMimeEntries(mKind.mimeType)) return;
- for (ValuesDelta entry : mState.getMimeEntries(mKind.mimeType)) {
- // Skip entries that aren't visible
- if (!entry.isVisible()) continue;
+ // Check if we are displaying anything here
+ boolean hasEntries = mState.hasMimeEntries(mKind.mimeType);
- final GenericEditorView editor = (GenericEditorView)mInflater.inflate(
- R.layout.item_generic_editor, mEditors, false);
- editor.setValues(mKind, entry, mState, mReadOnly);
- editor.setEditorListener(this);
- editor.setId(entry.getViewId());
- mEditors.addView(editor);
+ if (!mKind.isList) {
+ if (hasEntries) {
+ // we might have no visible entries. check that, too
+ for (ValuesDelta entry : mState.getMimeEntries(mKind.mimeType)) {
+ if (!entry.isVisible()) {
+ hasEntries = false;
+ break;
+ }
+ }
+ }
+
+ if (!hasEntries) {
+ EntityModifier.insertChild(mState, mKind);
+ hasEntries = true;
+ }
+ }
+
+ if (hasEntries) {
+ int entryIndex = 0;
+ for (ValuesDelta entry : mState.getMimeEntries(mKind.mimeType)) {
+ // Skip entries that aren't visible
+ if (!entry.isVisible()) continue;
+
+ final GenericEditorView editor = (GenericEditorView)mInflater.inflate(
+ R.layout.item_generic_editor, mEditors, false);
+ editor.setValues(mKind, entry, mState, mReadOnly, mViewIdGenerator);
+ // older versions of android had lists where we now have a single value
+ // in these cases we should show the remove button for all but the first value
+ // to ensure that nothing is removed
+ editor.mDelete.setVisibility((mKind.isList || (entryIndex != 0))
+ ? View.VISIBLE : View.GONE);
+ editor.setEditorListener(this);
+ mEditors.addView(editor);
+ entryIndex++;
+ }
}
}
@@ -131,16 +190,28 @@
protected void updateAddEnabled() {
// Set enabled state on the "add" view
final boolean canInsert = EntityModifier.canInsert(mState, mKind);
- final boolean isEnabled = !mReadOnly && canInsert;
+ final boolean isEnabled = !mReadOnly && canInsert;
mAdd.setEnabled(isEnabled);
}
/** {@inheritDoc} */
public void onClick(View v) {
+ // if this is not a list the plus button is not visible but the user might have clicked
+ // the text.
+ if (!mKind.isList)
+ return;
+
// Insert a new child and rebuild
- EntityModifier.insertChild(mState, mKind);
+ final ValuesDelta newValues = EntityModifier.insertChild(mState, mKind);
this.rebuildFromState();
this.updateAddEnabled();
this.updateEditorsVisible();
+
+ // Find the newly added EditView and set focus.
+ final int newFieldId = mViewIdGenerator.getId(mState, mKind, newValues, 0);
+ final View newField = findViewById(newFieldId);
+ if (newField != null) {
+ newField.requestFocus();
+ }
}
}
diff --git a/src/com/android/contacts/ui/widget/PhotoEditorView.java b/src/com/android/contacts/ui/widget/PhotoEditorView.java
index f117091..eff39d0 100644
--- a/src/com/android/contacts/ui/widget/PhotoEditorView.java
+++ b/src/com/android/contacts/ui/widget/PhotoEditorView.java
@@ -21,6 +21,7 @@
import com.android.contacts.model.ContactsSource.DataKind;
import com.android.contacts.model.EntityDelta.ValuesDelta;
import com.android.contacts.model.Editor;
+import com.android.contacts.ui.ViewIdGenerator;
import android.content.Context;
import android.graphics.Bitmap;
@@ -75,9 +76,13 @@
}
/** {@inheritDoc} */
- public void setValues(DataKind kind, ValuesDelta values, EntityDelta state, boolean readOnly) {
+ public void setValues(DataKind kind, ValuesDelta values, EntityDelta state, boolean readOnly,
+ ViewIdGenerator vig) {
mEntry = values;
mReadOnly = readOnly;
+
+ setId(vig.getId(state, kind, values, 0));
+
if (values != null) {
// Try decoding photo if actual entry
final byte[] photoBytes = values.getAsByteArray(Photo.PHOTO);
diff --git a/src/com/android/contacts/ui/widget/ReadOnlyContactEditorView.java b/src/com/android/contacts/ui/widget/ReadOnlyContactEditorView.java
index a5f8eb6..4635f6a 100644
--- a/src/com/android/contacts/ui/widget/ReadOnlyContactEditorView.java
+++ b/src/com/android/contacts/ui/widget/ReadOnlyContactEditorView.java
@@ -24,6 +24,7 @@
import com.android.contacts.model.ContactsSource.EditType;
import com.android.contacts.model.Editor.EditorListener;
import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.ui.ViewIdGenerator;
import android.content.Context;
import android.content.Entity;
@@ -101,7 +102,7 @@
* TODO: make this more generic using data from the source
*/
@Override
- public void setState(EntityDelta state, ContactsSource source) {
+ public void setState(EntityDelta state, ContactsSource source, ViewIdGenerator vig) {
// Remove any existing sections
mGeneral.removeAllViews();
@@ -135,7 +136,7 @@
EntityModifier.ensureKindExists(state, source, Photo.CONTENT_ITEM_TYPE);
mHasPhotoEditor = (source.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null);
primary = state.getPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
- mPhoto.setValues(kind, primary, state, source.readOnly);
+ mPhoto.setValues(kind, primary, state, source.readOnly, vig);
if (!mHasPhotoEditor || !mPhoto.hasSetPhoto()) {
mPhotoStub.setVisibility(View.GONE);
} else {
diff --git a/src/com/android/contacts/util/AccountSelectionUtil.java b/src/com/android/contacts/util/AccountSelectionUtil.java
index cf83581..cc46d2b 100644
--- a/src/com/android/contacts/util/AccountSelectionUtil.java
+++ b/src/com/android/contacts/util/AccountSelectionUtil.java
@@ -35,6 +35,7 @@
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
+import android.net.Uri;
import java.util.List;
@@ -45,13 +46,18 @@
// TODO: maybe useful for EditContactActivity.java...
private static final String LOG_TAG = "AccountSelectionUtil";
- private static class AccountSelectedListener
- implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+ public static boolean mVCardShare = false;
+
+ public static Uri mPath;
+
+ public static class AccountSelectedListener
+ implements DialogInterface.OnClickListener {
final private Context mContext;
- final private List<Account> mAccountList;
final private int mResId;
+ final protected List<Account> mAccountList;
+
public AccountSelectedListener(Context context, List<Account> accountList, int resId) {
if (accountList == null || accountList.size() == 0) {
Log.e(LOG_TAG, "The size of Account list is 0.");
@@ -65,17 +71,23 @@
dialog.dismiss();
doImport(mContext, mResId, mAccountList.get(which));
}
-
- public void onCancel(DialogInterface dialog) {
- dialog.dismiss();
- }
}
public static Dialog getSelectAccountDialog(Context context, int resId) {
- return getSelectAccountDialog(context, resId, null);
+ return getSelectAccountDialog(context, resId, null, null);
}
public static Dialog getSelectAccountDialog(Context context, int resId,
+ DialogInterface.OnClickListener onClickListener) {
+ return getSelectAccountDialog(context, resId, onClickListener, null);
+ }
+
+ /**
+ * When OnClickListener or OnCancelListener is null, uses a default listener.
+ * The default OnCancelListener just closes itself with {@link Dialog#dismiss()}.
+ */
+ public static Dialog getSelectAccountDialog(Context context, int resId,
+ DialogInterface.OnClickListener onClickListener,
DialogInterface.OnCancelListener onCancelListener) {
final Sources sources = Sources.getInstance(context);
final List<Account> writableAccountList = sources.getAccounts(true);
@@ -118,12 +130,22 @@
}
};
- AccountSelectedListener accountSelectedListener =
- new AccountSelectedListener(context, writableAccountList, resId);
+ if (onClickListener == null) {
+ AccountSelectedListener accountSelectedListener =
+ new AccountSelectedListener(context, writableAccountList, resId);
+ onClickListener = accountSelectedListener;
+ }
+ if (onCancelListener == null) {
+ onCancelListener = new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ dialog.dismiss();
+ }
+ };
+ }
return new AlertDialog.Builder(context)
.setTitle(R.string.dialog_new_contact_account)
- .setSingleChoiceItems(accountAdapter, 0, accountSelectedListener)
- .setOnCancelListener(accountSelectedListener)
+ .setSingleChoiceItems(accountAdapter, 0, onClickListener)
+ .setOnCancelListener(onCancelListener)
.create();
}
@@ -165,6 +187,13 @@
importIntent.putExtra("account_name", account.name);
importIntent.putExtra("account_type", account.type);
}
+
+ if (mVCardShare) {
+ importIntent.setAction(Intent.ACTION_VIEW);
+ importIntent.setData(mPath);
+ }
+ mVCardShare = false;
+ mPath = null;
context.startActivity(importIntent);
}
}
diff --git a/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java b/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java
index 795ac79..83fae29 100644
--- a/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java
+++ b/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java
@@ -18,7 +18,6 @@
import android.content.AsyncQueryHandler;
import android.content.Context;
-import android.content.EntityIterator;
import android.database.Cursor;
import java.lang.ref.WeakReference;
@@ -26,7 +25,7 @@
/**
* Slightly more abstract {@link AsyncQueryHandler} that helps keep a
* {@link WeakReference} back to a listener. Will properly close any
- * {@link Cursor} or {@link EntityIterator} if the listener ceases to exist.
+ * {@link Cursor} if the listener ceases to exist.
* <p>
* This pattern can be used to perform background queries without leaking
* {@link Context} objects.
@@ -41,7 +40,6 @@
*/
public interface AsyncQueryListener {
void onQueryComplete(int token, Object cookie, Cursor cursor);
- void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator);
}
public NotifyingAsyncQueryHandler(Context context, AsyncQueryListener listener) {
@@ -67,15 +65,4 @@
cursor.close();
}
}
-
- /** {@inheritDoc} */
- @Override
- protected void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
- final AsyncQueryListener listener = mListener.get();
- if (listener != null) {
- listener.onQueryEntitiesComplete(token, cookie, iterator);
- } else if (iterator != null) {
- iterator.close();
- }
- }
}
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 593d6cc..7af1a54 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -31,6 +31,11 @@
android:targetPackage="com.android.contacts"
android:label="Contacts launch performance">
</instrumentation>
-
+
+
+ <instrumentation android:name="com.android.contacts.DialerLaunchPerformance"
+ android:targetPackage="com.android.contacts"
+ android:label="Dialer launch performance">
+ </instrumentation>
</manifest>
diff --git a/tests/src/com/android/contacts/ContactsLaunchPerformance.java b/tests/src/com/android/contacts/ContactsLaunchPerformance.java
index bd60e70..9177457 100644
--- a/tests/src/com/android/contacts/ContactsLaunchPerformance.java
+++ b/tests/src/com/android/contacts/ContactsLaunchPerformance.java
@@ -17,25 +17,22 @@
package com.android.contacts;
import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
import android.test.LaunchPerformanceBase;
import android.os.Bundle;
-import java.util.Map;
-
/**
* Instrumentation class for Address Book launch performance testing.
*/
public class ContactsLaunchPerformance extends LaunchPerformanceBase {
- public static final String LOG_TAG = "ContactsLaunchPerformance";
-
- public ContactsLaunchPerformance() {
- super();
- }
-
@Override
public void onCreate(Bundle arguments) {
- mIntent.setClassName(getTargetContext(), "com.android.contacts.ContactsListActivity");
+ mIntent.setAction(Intent.ACTION_MAIN);
+ mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+ mIntent.setComponent(new ComponentName("com.android.contacts",
+ "com.android.contacts.DialtactsContactsEntryActivity"));
start();
}
diff --git a/tests/src/com/android/contacts/ContactsUtilsTests.java b/tests/src/com/android/contacts/ContactsUtilsTests.java
index 01a1ef4..8e18044 100644
--- a/tests/src/com/android/contacts/ContactsUtilsTests.java
+++ b/tests/src/com/android/contacts/ContactsUtilsTests.java
@@ -21,6 +21,7 @@
import android.net.Uri;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
@@ -98,4 +99,96 @@
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 testShouldCollapse() throws Exception {
+ checkShouldCollapse("1", true, null, null, null, null);
+ checkShouldCollapse("2", true, "a", "b", "a", "b");
+
+ checkShouldCollapse("11", false, "a", null, null, null);
+ checkShouldCollapse("12", false, null, "a", null, null);
+ checkShouldCollapse("13", false, null, null, "a", null);
+ checkShouldCollapse("14", false, null, null, null, "a");
+
+ checkShouldCollapse("21", false, "a", "b", null, null);
+ checkShouldCollapse("22", false, "a", "b", "a", null);
+ checkShouldCollapse("23", false, "a", "b", null, "b");
+ checkShouldCollapse("24", false, "a", "b", "a", "x");
+ checkShouldCollapse("25", false, "a", "b", "x", "b");
+
+ checkShouldCollapse("31", false, null, null, "a", "b");
+ checkShouldCollapse("32", false, "a", null, "a", "b");
+ checkShouldCollapse("33", false, null, "b", "a", "b");
+ checkShouldCollapse("34", false, "a", "x", "a", "b");
+ checkShouldCollapse("35", false, "x", "b", "a", "b");
+
+ checkShouldCollapse("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE,
+ null);
+ checkShouldCollapse("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
+
+ checkShouldCollapse("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE,
+ "2");
+ checkShouldCollapse("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE,
+ null);
+ checkShouldCollapse("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE,
+ "2");
+
+ // Test phone numbers
+ checkShouldCollapse("60", true,
+ Phone.CONTENT_ITEM_TYPE, "1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234567");
+ checkShouldCollapse("61", false,
+ Phone.CONTENT_ITEM_TYPE, "1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234568");
+ checkShouldCollapse("62", true,
+ Phone.CONTENT_ITEM_TYPE, "1234567;0",
+ Phone.CONTENT_ITEM_TYPE, "1234567;0");
+ checkShouldCollapse("63", false,
+ Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+ Phone.CONTENT_ITEM_TYPE, "1234567;321");
+ checkShouldCollapse("64", true,
+ Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+ Phone.CONTENT_ITEM_TYPE, "1234567;89321");
+ checkShouldCollapse("65", false,
+ Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
+ Phone.CONTENT_ITEM_TYPE, "1234567;");
+ checkShouldCollapse("66", false,
+ Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
+ Phone.CONTENT_ITEM_TYPE, "12345675426");
+ checkShouldCollapse("67", false,
+ Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
+ Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
+ checkShouldCollapse("68", true,
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
+ checkShouldCollapse("69", false,
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
+ }
+
+ private void checkShouldCollapse(String message, boolean expected, CharSequence mimetype1,
+ CharSequence data1, CharSequence mimetype2, CharSequence data2) {
+ assertEquals(message, expected,
+ ContactsUtils.shouldCollapse(mContext, mimetype1, data1, mimetype2, data2));
+ }
+
+ 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")));
+ }
}
diff --git a/tests/src/com/android/contacts/DialerLaunchPerformance.java b/tests/src/com/android/contacts/DialerLaunchPerformance.java
new file mode 100644
index 0000000..ae78082
--- /dev/null
+++ b/tests/src/com/android/contacts/DialerLaunchPerformance.java
@@ -0,0 +1,49 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.Bundle;
+import android.test.LaunchPerformanceBase;
+
+/**
+ * Instrumentation class for Address Book launch performance testing.
+ */
+public class DialerLaunchPerformance extends LaunchPerformanceBase {
+
+ @Override
+ public void onCreate(Bundle arguments) {
+ mIntent.setAction(Intent.ACTION_MAIN);
+ mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+ mIntent.setComponent(new ComponentName("com.android.contacts",
+ "com.android.contacts.DialtactsActivity"));
+
+ start();
+ }
+
+ /**
+ * Calls LaunchApp and finish.
+ */
+ @Override
+ public void onStart() {
+ super.onStart();
+ LaunchApp();
+ finish(Activity.RESULT_OK, mResults);
+ }
+}
diff --git a/tests/src/com/android/contacts/EntityDeltaTests.java b/tests/src/com/android/contacts/EntityDeltaTests.java
index 70a506b..fa716c7 100644
--- a/tests/src/com/android/contacts/EntityDeltaTests.java
+++ b/tests/src/com/android/contacts/EntityDeltaTests.java
@@ -367,7 +367,7 @@
final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
source.buildAssert(diff);
source.buildDiff(diff);
- assertEquals("Unexpected operations", 1, diff.size());
+ assertEquals("Unexpected operations", 2, diff.size());
{
final ContentProviderOperation oper = diff.get(0);
assertEquals("Incorrect type", TYPE_INSERT, oper.getType());
@@ -395,7 +395,7 @@
final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
source.buildAssert(diff);
source.buildDiff(diff);
- assertEquals("Unexpected operations", 2, diff.size());
+ assertEquals("Unexpected operations", 3, diff.size());
{
final ContentProviderOperation oper = diff.get(0);
assertEquals("Incorrect type", TYPE_INSERT, oper.getType());
diff --git a/tests/src/com/android/contacts/EntityModifierTests.java b/tests/src/com/android/contacts/EntityModifierTests.java
index 489bf04..18877a3 100644
--- a/tests/src/com/android/contacts/EntityModifierTests.java
+++ b/tests/src/com/android/contacts/EntityModifierTests.java
@@ -34,10 +34,16 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.Entity;
+import android.os.Bundle;
+import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
+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.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
@@ -56,6 +62,10 @@
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";
@@ -95,12 +105,24 @@
// Email is unlimited
kind = new DataKind(Email.CONTENT_ITEM_TYPE, -1, -1, 10, true);
-
kind.typeOverallMax = -1;
-
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Email.DATA, -1, -1));
+ addKind(kind);
+ // IM is only one
+ kind = new DataKind(Im.CONTENT_ITEM_TYPE, -1, -1, 10, true);
+ kind.typeOverallMax = 1;
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Im.DATA, -1, -1));
+ addKind(kind);
+
+ // Organization is only one
+ kind = new DataKind(Organization.CONTENT_ITEM_TYPE, -1, -1, 10, true);
+ kind.typeOverallMax = 1;
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Organization.COMPANY, -1, -1));
+ kind.fieldList.add(new EditField(Organization.TITLE, -1, -1));
addKind(kind);
}
@@ -490,7 +512,7 @@
// Build diff, expecting single insert
final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
state.buildDiff(diff);
- assertEquals("Unexpected operations", 1, diff.size());
+ assertEquals("Unexpected operations", 2, diff.size());
{
final ContentProviderOperation oper = diff.get(0);
assertEquals("Incorrect type", TYPE_INSERT, oper.getType());
@@ -518,7 +540,7 @@
// Build diff, expecting two insert operations
final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
state.buildDiff(diff);
- assertEquals("Unexpected operations", 2, diff.size());
+ assertEquals("Unexpected operations", 3, diff.size());
{
final ContentProviderOperation oper = diff.get(0);
assertEquals("Incorrect type", TYPE_INSERT, oper.getType());
@@ -662,4 +684,73 @@
assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
}
}
+
+ public void testParseExtrasExistingName() {
+ final ContactsSource source = getSource();
+ final DataKind kindName = source.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+
+ // 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 EntityDelta state = getEntity(TEST_ID, first);
+ final Bundle extras = new Bundle();
+ extras.putString(Insert.NAME, TEST_NAME2);
+ EntityModifier.parseExtras(mContext, source, state, extras);
+
+ final int nameCount = state.getMimeEntriesCount(StructuredName.CONTENT_ITEM_TYPE, true);
+ assertEquals("Unexpected names", 1, nameCount);
+ }
+
+ public void testParseExtrasIgnoreLimit() {
+ final ContactsSource source = getSource();
+ final DataKind kindIm = source.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
+
+ // 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 EntityDelta state = getEntity(TEST_ID, first);
+ final int beforeCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
+
+ // We should ignore data that doesn't fit source rules, since source
+ // 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);
+ EntityModifier.parseExtras(mContext, source, state, extras);
+
+ final int afterCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
+ assertEquals("Broke source rules", beforeCount, afterCount);
+ }
+
+ public void testParseExtrasIgnoreUnhandled() {
+ final ContactsSource source = getSource();
+ final EntityDelta state = getEntity(TEST_ID);
+
+ // We should silently ignore types unsupported by source
+ final Bundle extras = new Bundle();
+ extras.putString(Insert.POSTAL, TEST_POSTAL);
+ EntityModifier.parseExtras(mContext, source, state, extras);
+
+ assertNull("Broke source rules", state.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE));
+ }
+
+ public void testParseExtrasJobTitle() {
+ final ContactsSource source = getSource();
+ final EntityDelta state = getEntity(TEST_ID);
+
+ // Make sure that we create partial Organizations
+ final Bundle extras = new Bundle();
+ extras.putString(Insert.JOB_TITLE, TEST_NAME);
+ EntityModifier.parseExtras(mContext, source, state, extras);
+
+ final int count = state.getMimeEntries(Organization.CONTENT_ITEM_TYPE).size();
+ assertEquals("Expected to create organization", 1, count);
+ }
}
diff --git a/tests/src/com/android/contacts/EntitySetTests.java b/tests/src/com/android/contacts/EntitySetTests.java
index 26f4184..edfca6d 100644
--- a/tests/src/com/android/contacts/EntitySetTests.java
+++ b/tests/src/com/android/contacts/EntitySetTests.java
@@ -480,11 +480,13 @@
final ContentValues joePhoneInsert = buildPhone(PHONE_BLUE);
final EntityDelta 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),
buildOper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
buildOper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
+ buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
buildUpdateAggregationKeepTogether(CONTACT_BOB));
// Merge in the second version, verify that our insert remains
@@ -494,6 +496,7 @@
buildAssertVersion(VER_SECOND),
buildOper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
buildOper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
+ buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
buildUpdateAggregationKeepTogether(CONTACT_BOB));
}
@@ -536,6 +539,7 @@
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 EntitySet merged = EntitySet.mergeAfter(second, first);
@@ -543,6 +547,7 @@
buildAssertVersion(VER_SECOND),
buildOper(RawContacts.CONTENT_URI, TYPE_INSERT, contactInsert),
buildOper(Data.CONTENT_URI, TYPE_INSERT, phoneInsert),
+ buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
buildUpdateAggregationKeepTogether(CONTACT_BOB));
}
diff --git a/tests/src/com/android/contacts/GroupingListAdapterTests.java b/tests/src/com/android/contacts/GroupingListAdapterTests.java
new file mode 100644
index 0000000..1877fac
--- /dev/null
+++ b/tests/src/com/android/contacts/GroupingListAdapterTests.java
@@ -0,0 +1,316 @@
+/*
+ * 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.database.CharArrayBuffer;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.provider.CallLog.Calls;
+import android.test.AndroidTestCase;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.ViewGroup;
+
+import static com.android.contacts.GroupingListAdapter.ITEM_TYPE_STANDALONE;
+import static com.android.contacts.GroupingListAdapter.ITEM_TYPE_IN_GROUP;
+import static com.android.contacts.GroupingListAdapter.ITEM_TYPE_GROUP_HEADER;
+
+/**
+ * Tests for the contact call list adapter.
+ *
+ * Running all tests:
+ *
+ * runtest contacts
+ * or
+ * adb shell am instrument \
+ * -w com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+public class GroupingListAdapterTests extends AndroidTestCase {
+
+ static private final String[] CALL_LOG_PROJECTION = new String[] {
+ Calls._ID,
+ Calls.NUMBER,
+ Calls.DATE,
+ };
+
+ private static final int CALLS_NUMBER_COLUMN_INDEX = 1;
+
+ private MatrixCursor mCursor;
+ private long mNextCall;
+
+ private GroupingListAdapter mAdapter = new GroupingListAdapter(null) {
+
+ @Override
+ protected void addGroups(Cursor cursor) {
+ int count = cursor.getCount();
+ int groupItemCount = 1;
+ cursor.moveToFirst();
+ String currentValue = cursor.getString(CALLS_NUMBER_COLUMN_INDEX);
+ for (int i = 1; i < count; i++) {
+ cursor.moveToNext();
+ String value = cursor.getString(CALLS_NUMBER_COLUMN_INDEX);
+ if (TextUtils.equals(value, currentValue)) {
+ groupItemCount++;
+ } else {
+ if (groupItemCount > 1) {
+ addGroup(i - groupItemCount, groupItemCount, false);
+ }
+
+ groupItemCount = 1;
+ currentValue = value;
+ }
+ }
+ if (groupItemCount > 1) {
+ addGroup(count - groupItemCount, groupItemCount, false);
+ }
+ }
+
+ @Override
+ protected void bindChildView(View view, Context context, Cursor cursor) {
+ }
+
+ @Override
+ protected void bindGroupView(View view, Context context, Cursor cursor, int groupSize,
+ boolean expanded) {
+ }
+
+ @Override
+ protected void bindStandAloneView(View view, Context context, Cursor cursor) {
+ }
+
+ @Override
+ protected View newChildView(Context context, ViewGroup parent) {
+ return null;
+ }
+
+ @Override
+ protected View newGroupView(Context context, ViewGroup parent) {
+ return null;
+ }
+
+ @Override
+ protected View newStandAloneView(Context context, ViewGroup parent) {
+ return null;
+ }
+ };
+
+ private void buildCursor(String... numbers) {
+ mCursor = new MatrixCursor(CALL_LOG_PROJECTION);
+ mNextCall = 1;
+ for (String number : numbers) {
+ mCursor.addRow(new Object[]{mNextCall, number, 1000 - mNextCall});
+ mNextCall++;
+ }
+ }
+
+ public void testGroupingWithoutGroups() {
+ buildCursor("1", "2", "3");
+ mAdapter.changeCursor(mCursor);
+
+ assertEquals(3, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_STANDALONE, false, 1);
+ assertPositionMetadata(2, ITEM_TYPE_STANDALONE, false, 2);
+ }
+
+ public void testGroupingWithCollapsedGroupAtTheBeginning() {
+ buildCursor("1", "1", "2");
+ mAdapter.changeCursor(mCursor);
+
+ assertEquals(2, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_GROUP_HEADER, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_STANDALONE, false, 2);
+ }
+
+ public void testGroupingWithExpandedGroupAtTheBeginning() {
+ buildCursor("1", "1", "2");
+ mAdapter.changeCursor(mCursor);
+ mAdapter.toggleGroup(0);
+
+ assertEquals(4, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_GROUP_HEADER, true, 0);
+ assertPositionMetadata(1, ITEM_TYPE_IN_GROUP, false, 0);
+ assertPositionMetadata(2, ITEM_TYPE_IN_GROUP, false, 1);
+ assertPositionMetadata(3, ITEM_TYPE_STANDALONE, false, 2);
+ }
+
+ public void testGroupingWithExpandCollapseCycleAtTheBeginning() {
+ buildCursor("1", "1", "2");
+ mAdapter.changeCursor(mCursor);
+ mAdapter.toggleGroup(0);
+ mAdapter.toggleGroup(0);
+
+ assertEquals(2, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_GROUP_HEADER, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_STANDALONE, false, 2);
+ }
+
+ public void testGroupingWithCollapsedGroupInTheMiddle() {
+ buildCursor("1", "2", "2", "2", "3");
+ mAdapter.changeCursor(mCursor);
+
+ assertEquals(3, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, false, 1);
+ assertPositionMetadata(2, ITEM_TYPE_STANDALONE, false, 4);
+ }
+
+ public void testGroupingWithExpandedGroupInTheMiddle() {
+ buildCursor("1", "2", "2", "2", "3");
+ mAdapter.changeCursor(mCursor);
+ mAdapter.toggleGroup(1);
+
+ assertEquals(6, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, true, 1);
+ assertPositionMetadata(2, ITEM_TYPE_IN_GROUP, false, 1);
+ assertPositionMetadata(3, ITEM_TYPE_IN_GROUP, false, 2);
+ assertPositionMetadata(4, ITEM_TYPE_IN_GROUP, false, 3);
+ assertPositionMetadata(5, ITEM_TYPE_STANDALONE, false, 4);
+ }
+
+ public void testGroupingWithCollapsedGroupAtTheEnd() {
+ buildCursor("1", "2", "3", "3", "3");
+ mAdapter.changeCursor(mCursor);
+
+ assertEquals(3, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_STANDALONE, false, 1);
+ assertPositionMetadata(2, ITEM_TYPE_GROUP_HEADER, false, 2);
+ }
+
+ public void testGroupingWithExpandedGroupAtTheEnd() {
+ buildCursor("1", "2", "3", "3", "3");
+ mAdapter.changeCursor(mCursor);
+ mAdapter.toggleGroup(2);
+
+ assertEquals(6, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_STANDALONE, false, 1);
+ assertPositionMetadata(2, ITEM_TYPE_GROUP_HEADER, true, 2);
+ assertPositionMetadata(3, ITEM_TYPE_IN_GROUP, false, 2);
+ assertPositionMetadata(4, ITEM_TYPE_IN_GROUP, false, 3);
+ assertPositionMetadata(5, ITEM_TYPE_IN_GROUP, false, 4);
+ }
+
+ public void testGroupingWithMultipleCollapsedGroups() {
+ buildCursor("1", "2", "2", "3", "4", "4", "5", "5", "6");
+ mAdapter.changeCursor(mCursor);
+
+ assertEquals(6, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, false, 1);
+ assertPositionMetadata(2, ITEM_TYPE_STANDALONE, false, 3);
+ assertPositionMetadata(3, ITEM_TYPE_GROUP_HEADER, false, 4);
+ assertPositionMetadata(4, ITEM_TYPE_GROUP_HEADER, false, 6);
+ assertPositionMetadata(5, ITEM_TYPE_STANDALONE, false, 8);
+ }
+
+ public void testGroupingWithMultipleExpandedGroups() {
+ buildCursor("1", "2", "2", "3", "4", "4", "5", "5", "6");
+ mAdapter.changeCursor(mCursor);
+ mAdapter.toggleGroup(1);
+
+ // Note that expanding the group of 2's shifted the group of 5's down from the
+ // 4th to the 6th position
+ mAdapter.toggleGroup(6);
+
+ assertEquals(10, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, true, 1);
+ assertPositionMetadata(2, ITEM_TYPE_IN_GROUP, false, 1);
+ assertPositionMetadata(3, ITEM_TYPE_IN_GROUP, false, 2);
+ assertPositionMetadata(4, ITEM_TYPE_STANDALONE, false, 3);
+ assertPositionMetadata(5, ITEM_TYPE_GROUP_HEADER, false, 4);
+ assertPositionMetadata(6, ITEM_TYPE_GROUP_HEADER, true, 6);
+ assertPositionMetadata(7, ITEM_TYPE_IN_GROUP, false, 6);
+ assertPositionMetadata(8, ITEM_TYPE_IN_GROUP, false, 7);
+ assertPositionMetadata(9, ITEM_TYPE_STANDALONE, false, 8);
+ }
+
+ public void testPositionCache() {
+ buildCursor("1", "2", "2", "3", "4", "4", "5", "5", "6");
+ mAdapter.changeCursor(mCursor);
+
+ // First pass - building up cache
+ assertEquals(6, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, false, 1);
+ assertPositionMetadata(2, ITEM_TYPE_STANDALONE, false, 3);
+ assertPositionMetadata(3, ITEM_TYPE_GROUP_HEADER, false, 4);
+ assertPositionMetadata(4, ITEM_TYPE_GROUP_HEADER, false, 6);
+ assertPositionMetadata(5, ITEM_TYPE_STANDALONE, false, 8);
+
+ // Second pass - using cache
+ assertEquals(6, mAdapter.getCount());
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, false, 1);
+ assertPositionMetadata(2, ITEM_TYPE_STANDALONE, false, 3);
+ assertPositionMetadata(3, ITEM_TYPE_GROUP_HEADER, false, 4);
+ assertPositionMetadata(4, ITEM_TYPE_GROUP_HEADER, false, 6);
+ assertPositionMetadata(5, ITEM_TYPE_STANDALONE, false, 8);
+
+ // Invalidate cache by expanding a group
+ mAdapter.toggleGroup(1);
+
+ // First pass - building up cache
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, true, 1);
+ assertPositionMetadata(2, ITEM_TYPE_IN_GROUP, false, 1);
+ assertPositionMetadata(3, ITEM_TYPE_IN_GROUP, false, 2);
+ assertPositionMetadata(4, ITEM_TYPE_STANDALONE, false, 3);
+ assertPositionMetadata(5, ITEM_TYPE_GROUP_HEADER, false, 4);
+ assertPositionMetadata(6, ITEM_TYPE_GROUP_HEADER, false, 6);
+ assertPositionMetadata(7, ITEM_TYPE_STANDALONE, false, 8);
+
+ // Second pass - using cache
+ assertPositionMetadata(0, ITEM_TYPE_STANDALONE, false, 0);
+ assertPositionMetadata(1, ITEM_TYPE_GROUP_HEADER, true, 1);
+ assertPositionMetadata(2, ITEM_TYPE_IN_GROUP, false, 1);
+ assertPositionMetadata(3, ITEM_TYPE_IN_GROUP, false, 2);
+ assertPositionMetadata(4, ITEM_TYPE_STANDALONE, false, 3);
+ assertPositionMetadata(5, ITEM_TYPE_GROUP_HEADER, false, 4);
+ assertPositionMetadata(6, ITEM_TYPE_GROUP_HEADER, false, 6);
+ assertPositionMetadata(7, ITEM_TYPE_STANDALONE, false, 8);
+ }
+
+ public void testGroupDescriptorArrayGrowth() {
+ String[] numbers = new String[500];
+ for (int i = 0; i < numbers.length; i++) {
+
+ // Make groups of 2
+ numbers[i] = String.valueOf((i / 2) * 2);
+ }
+
+ buildCursor(numbers);
+ mAdapter.changeCursor(mCursor);
+
+ assertEquals(250, mAdapter.getCount());
+ }
+
+ private void assertPositionMetadata(int position, int itemType, boolean isExpanded,
+ int cursorPosition) {
+ GroupingListAdapter.PositionMetadata metadata = new GroupingListAdapter.PositionMetadata();
+ mAdapter.obtainPositionMetadata(metadata, position);
+ assertEquals(itemType, metadata.itemType);
+ if (metadata.itemType == ITEM_TYPE_GROUP_HEADER) {
+ assertEquals(isExpanded, metadata.isExpanded);
+ }
+ assertEquals(cursorPosition, metadata.cursorPosition);
+ }
+}
diff --git a/tests/src/com/android/contacts/RecentCallsListActivityTests.java b/tests/src/com/android/contacts/RecentCallsListActivityTests.java
index 2cdd8d7..d00854f 100644
--- a/tests/src/com/android/contacts/RecentCallsListActivityTests.java
+++ b/tests/src/com/android/contacts/RecentCallsListActivityTests.java
@@ -97,7 +97,7 @@
@Override
public void setUp() {
- mActivity = (RecentCallsListActivity) getActivity();
+ mActivity = getActivity();
mVoicemail = mActivity.mVoiceMailNumber;
mAdapter = mActivity.mAdapter;
mParentView = new FrameLayout(mActivity);
@@ -224,9 +224,9 @@
mCursor.moveToLast();
while(!mCursor.isBeforeFirst()) {
if (null == mList[i]) {
- mList[i] = mAdapter.newView(mActivity, mCursor, mParentView);
+ mList[i] = mAdapter.newStandAloneView(mActivity, mParentView);
}
- mAdapter.bindView(mList[i], mActivity, mCursor);
+ mAdapter.bindStandAloneView(mList[i], mActivity, mCursor);
mCursor.moveToPrevious();
i++;
}
@@ -276,7 +276,7 @@
duration = mRnd.nextInt(10 * 60); // 0 - 10 minutes random.
}
row.add(duration); // duration
- if (mVoicemail.equals(number)) {
+ if (mVoicemail != null && mVoicemail.equals(number)) {
assertEquals(Calls.OUTGOING_TYPE, type);
}
row.add(type); // type
@@ -309,7 +309,10 @@
* @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
*/
private void insertVoicemail(long date, int duration) {
- insert(mVoicemail, date, duration, Calls.OUTGOING_TYPE);
+ // mVoicemail may be null
+ if (mVoicemail != null) {
+ insert(mVoicemail, date, duration, Calls.OUTGOING_TYPE);
+ }
}
/**