am 994b896e: (-s ours) am 4000887f: (-s ours) am 0308361b: Import translations. DO NOT MERGE
* commit '994b896ef15187b8e7abef679e76540d57f4b144':
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d06fe1d..43fd693 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -545,7 +545,13 @@
<data android:mimeType="image/*" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- />
+ </activity>
+
+ <!-- Internal photo selection activity -->
+ <activity android:name=".activities.PhotoSelectionActivity"
+ android:theme="@style/Theme.PhotoSelector"
+ android:launchMode="singleTop"
+ android:windowSoftInputMode="stateUnchanged">
</activity>
<!-- Interstitial activity that shows a phone disambig dialog -->
@@ -562,7 +568,6 @@
<data android:mimeType="text/directory" />
<data android:mimeType="text/vcard" />
<data android:mimeType="text/x-vcard" />
- <data android:mimeType="text/x-vCard" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
@@ -574,7 +579,6 @@
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data android:mimeType="text/vcard" />
<data android:mimeType="text/x-vcard" />
- <data android:mimeType="text/x-vCard" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
diff --git a/proguard.flags b/proguard.flags
index f4ec4b2..79378e6 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -9,24 +9,10 @@
public void *(android.view.MenuItem);
}
-# 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();
-}
-
-# Any methods whose name is '*ForTest' are preserved.
--keep class ** {
- *** *ForTest(...);
-}
-
# Any class or method annotated with NeededForTesting.
-keep @com.android.contacts.test.NeededForTesting class *
-keepclassmembers class * {
@com.android.contacts.test.NeededForTesting *;
}
+
+-verbose
diff --git a/res/drawable-hdpi/ic_menu_2sec_pause.png b/res/drawable-hdpi/ic_menu_2sec_pause.png
deleted file mode 100644
index 3951948..0000000
--- a/res/drawable-hdpi/ic_menu_2sec_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_accounts_holo_light.png b/res/drawable-hdpi/ic_menu_accounts_holo_light.png
deleted file mode 100644
index 59496c9..0000000
--- a/res/drawable-hdpi/ic_menu_accounts_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_display_all_holo_light.png b/res/drawable-hdpi/ic_menu_display_all_holo_light.png
deleted file mode 100644
index 59631f0..0000000
--- a/res/drawable-hdpi/ic_menu_display_all_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_import_export_holo_light.png b/res/drawable-hdpi/ic_menu_import_export_holo_light.png
deleted file mode 100644
index a67386f..0000000
--- a/res/drawable-hdpi/ic_menu_import_export_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_mark.png b/res/drawable-hdpi/ic_menu_mark.png
deleted file mode 100755
index 1c09175..0000000
--- a/res/drawable-hdpi/ic_menu_mark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_merge_holo_light.png b/res/drawable-hdpi/ic_menu_merge_holo_light.png
deleted file mode 100644
index eaf32d2..0000000
--- a/res/drawable-hdpi/ic_menu_merge_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_share_holo_light.png b/res/drawable-hdpi/ic_menu_share_holo_light.png
deleted file mode 100644
index 2ba6fb7..0000000
--- a/res/drawable-hdpi/ic_menu_share_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_split_holo_light.png b/res/drawable-hdpi/ic_menu_split_holo_light.png
deleted file mode 100644
index 3784544..0000000
--- a/res/drawable-hdpi/ic_menu_split_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_trash_holo_light.png b/res/drawable-hdpi/ic_menu_trash_holo_light.png
deleted file mode 100644
index 481eb65..0000000
--- a/res/drawable-hdpi/ic_menu_trash_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_wait.png b/res/drawable-hdpi/ic_menu_wait.png
deleted file mode 100644
index 6886e5d..0000000
--- a/res/drawable-hdpi/ic_menu_wait.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_2sec_pause.png b/res/drawable-mdpi/ic_menu_2sec_pause.png
deleted file mode 100644
index dcaa5ff..0000000
--- a/res/drawable-mdpi/ic_menu_2sec_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_accounts_holo_light.png b/res/drawable-mdpi/ic_menu_accounts_holo_light.png
deleted file mode 100644
index ae291d8..0000000
--- a/res/drawable-mdpi/ic_menu_accounts_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_display_all_holo_light.png b/res/drawable-mdpi/ic_menu_display_all_holo_light.png
deleted file mode 100644
index 9781312..0000000
--- a/res/drawable-mdpi/ic_menu_display_all_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_import_export_holo_light.png b/res/drawable-mdpi/ic_menu_import_export_holo_light.png
deleted file mode 100644
index e31ec6b..0000000
--- a/res/drawable-mdpi/ic_menu_import_export_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_mark.png b/res/drawable-mdpi/ic_menu_mark.png
deleted file mode 100644
index 41ccddf..0000000
--- a/res/drawable-mdpi/ic_menu_mark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_merge_holo_light.png b/res/drawable-mdpi/ic_menu_merge_holo_light.png
deleted file mode 100644
index a650c4d..0000000
--- a/res/drawable-mdpi/ic_menu_merge_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_share_holo_light.png b/res/drawable-mdpi/ic_menu_share_holo_light.png
deleted file mode 100644
index 6b42585..0000000
--- a/res/drawable-mdpi/ic_menu_share_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_split_holo_light.png b/res/drawable-mdpi/ic_menu_split_holo_light.png
deleted file mode 100644
index 56afbc9..0000000
--- a/res/drawable-mdpi/ic_menu_split_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_trash_holo_light.png b/res/drawable-mdpi/ic_menu_trash_holo_light.png
deleted file mode 100644
index 29801b4..0000000
--- a/res/drawable-mdpi/ic_menu_trash_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_wait.png b/res/drawable-mdpi/ic_menu_wait.png
deleted file mode 100644
index c20457a..0000000
--- a/res/drawable-mdpi/ic_menu_wait.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_2sec_pause.png b/res/drawable-xhdpi/ic_menu_2sec_pause.png
deleted file mode 100644
index 56f68b3..0000000
--- a/res/drawable-xhdpi/ic_menu_2sec_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_accounts_holo_light.png b/res/drawable-xhdpi/ic_menu_accounts_holo_light.png
deleted file mode 100644
index e58c7c8..0000000
--- a/res/drawable-xhdpi/ic_menu_accounts_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_display_all_holo_light.png b/res/drawable-xhdpi/ic_menu_display_all_holo_light.png
deleted file mode 100644
index 0aa4cad..0000000
--- a/res/drawable-xhdpi/ic_menu_display_all_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_import_export_holo_light.png b/res/drawable-xhdpi/ic_menu_import_export_holo_light.png
deleted file mode 100644
index 7b7d9da..0000000
--- a/res/drawable-xhdpi/ic_menu_import_export_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_mark.png b/res/drawable-xhdpi/ic_menu_mark.png
deleted file mode 100644
index a24adc5..0000000
--- a/res/drawable-xhdpi/ic_menu_mark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_merge_holo_light.png b/res/drawable-xhdpi/ic_menu_merge_holo_light.png
deleted file mode 100644
index 31bc346..0000000
--- a/res/drawable-xhdpi/ic_menu_merge_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_share_holo_light.png b/res/drawable-xhdpi/ic_menu_share_holo_light.png
deleted file mode 100644
index 1c88e0e..0000000
--- a/res/drawable-xhdpi/ic_menu_share_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_split_holo_light.png b/res/drawable-xhdpi/ic_menu_split_holo_light.png
deleted file mode 100644
index 16c6ade..0000000
--- a/res/drawable-xhdpi/ic_menu_split_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_trash_holo_light.png b/res/drawable-xhdpi/ic_menu_trash_holo_light.png
deleted file mode 100644
index d234d73..0000000
--- a/res/drawable-xhdpi/ic_menu_trash_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_wait.png b/res/drawable-xhdpi/ic_menu_wait.png
deleted file mode 100644
index ee5ee68..0000000
--- a/res/drawable-xhdpi/ic_menu_wait.png
+++ /dev/null
Binary files differ
diff --git a/res/layout-sw580dp-w1000dp/contact_editor_activity.xml b/res/layout-sw580dp-w1000dp/contact_editor_activity.xml
index d2e0d22..cb4067e 100644
--- a/res/layout-sw580dp-w1000dp/contact_editor_activity.xml
+++ b/res/layout-sw580dp-w1000dp/contact_editor_activity.xml
@@ -23,7 +23,8 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:baselineAligned="false">
<!-- Empty view to represent the left margin -->
<View
diff --git a/res/layout-sw580dp/detail_header_contact_without_updates.xml b/res/layout-sw580dp/detail_header_contact_without_updates.xml
index 9261f11..0f0e3c2 100644
--- a/res/layout-sw580dp/detail_header_contact_without_updates.xml
+++ b/res/layout-sw580dp/detail_header_contact_without_updates.xml
@@ -40,9 +40,7 @@
android:layout_height="match_parent"
android:orientation="horizontal">
- <ImageView
- android:id="@+id/photo"
- android:scaleType="centerCrop"
+ <include layout="@layout/photo_selector_view"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="2" />
diff --git a/res/layout-sw580dp/join_contact_picker.xml b/res/layout-sw580dp/join_contact_picker.xml
new file mode 100644
index 0000000..3d9127b
--- /dev/null
+++ b/res/layout-sw580dp/join_contact_picker.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<view xmlns:android="http://schemas.android.com/apk/res/android"
+ class="com.android.contacts.widget.FullHeightLinearLayout"
+ style="@style/ContactPickerLayout"
+ android:orientation="vertical">
+ <!-- See also comments in contact_picker.xml -->
+ <view
+ class="android.widget.SearchView"
+ android:id="@+id/search_view"
+ android:layout_width="match_parent"
+ android:maxWidth="@dimen/contact_picker_search_view_max_width"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="0dip"
+ android:layout_marginRight="@dimen/list_visible_scrollbar_padding"
+ android:paddingRight="0dip"
+ android:iconifiedByDefault="false" />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:id="@+id/list_container" />
+</view>
diff --git a/res/layout-sw580dp/people_activity.xml b/res/layout-sw580dp/people_activity.xml
index 59a218d..9cf695d 100644
--- a/res/layout-sw580dp/people_activity.xml
+++ b/res/layout-sw580dp/people_activity.xml
@@ -25,14 +25,14 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
- android:splitMotionEvents="true">
+ android:splitMotionEvents="true"
+ android:baselineAligned="false">
- <LinearLayout
+ <FrameLayout
android:id="@+id/browse_view"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
- android:orientation="vertical"
android:background="@drawable/list_background_holo"
android:visibility="gone">
@@ -40,9 +40,8 @@
<fragment
android:id="@+id/all_fragment"
class="com.android.contacts.list.DefaultContactBrowseListFragment"
- android:layout_height="0dip"
- android:layout_width="match_parent"
- android:layout_weight="1" />
+ android:layout_height="match_parent"
+ android:layout_width="match_parent" />
<!-- Groups -->
<fragment
@@ -50,7 +49,7 @@
class="com.android.contacts.group.GroupBrowseListFragment"
android:layout_height="match_parent"
android:layout_width="match_parent" />
- </LinearLayout>
+ </FrameLayout>
<view
class="com.android.contacts.widget.TransitionAnimationView"
@@ -111,7 +110,8 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/list_background_holo">
+ android:background="@drawable/list_background_holo"
+ android:baselineAligned="false">
<!-- Starred -->
<FrameLayout
diff --git a/res/layout-sw680dp-w1000dp/contact_detail_container.xml b/res/layout-sw680dp-w1000dp/contact_detail_container.xml
index 6b1d094..9e1eb33 100644
--- a/res/layout-sw680dp-w1000dp/contact_detail_container.xml
+++ b/res/layout-sw680dp-w1000dp/contact_detail_container.xml
@@ -24,7 +24,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:baselineAligned="false">
<!--
Container for the "About" fragment on the contact card for a contact
diff --git a/res/layout-sw680dp-w1000dp/contact_detail_fragment.xml b/res/layout-sw680dp-w1000dp/contact_detail_fragment.xml
index ecf8130..890a81c 100644
--- a/res/layout-sw680dp-w1000dp/contact_detail_fragment.xml
+++ b/res/layout-sw680dp-w1000dp/contact_detail_fragment.xml
@@ -36,14 +36,15 @@
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="match_parent"
- android:layout_height="0dip">
+ android:layout_height="0dip"
+ android:baselineAligned="false">
- <ImageView android:id="@+id/photo"
- android:scaleType="centerCrop"
+ <include android:id="@+id/static_photo_container"
+ layout="@layout/photo_selector_view"
android:layout_width="@dimen/detail_contact_photo_size"
android:layout_height="@dimen/detail_contact_photo_size"
android:layout_marginTop="@dimen/detail_contact_photo_margin"
- android:layout_marginRight="@dimen/detail_contact_photo_margin"/>
+ android:layout_marginRight="@dimen/detail_contact_photo_margin" />
<ListView android:id="@android:id/list"
android:layout_width="0dip"
diff --git a/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml b/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
index 98ffce6..2016131 100644
--- a/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
+++ b/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
@@ -50,15 +50,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" />
-
- <TextView
- android:id="@+id/footer"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:visibility="gone" />
-
</LinearLayout>
<ImageView
diff --git a/res/layout-sw680dp-w1000dp/detail_header_contact_with_updates.xml b/res/layout-sw680dp-w1000dp/detail_header_contact_with_updates.xml
index dfba659..7758a21 100644
--- a/res/layout-sw680dp-w1000dp/detail_header_contact_with_updates.xml
+++ b/res/layout-sw680dp-w1000dp/detail_header_contact_with_updates.xml
@@ -27,9 +27,7 @@
android:paddingBottom="8dip"
android:orientation="horizontal">
- <ImageView
- android:id="@+id/photo"
- android:scaleType="centerCrop"
+ <include layout="@layout/photo_selector_view"
android:layout_width="@dimen/detail_contact_photo_size"
android:layout_height="@dimen/detail_contact_photo_size" />
diff --git a/res/layout-sw680dp-w1000dp/detail_header_contact_without_updates.xml b/res/layout-sw680dp-w1000dp/detail_header_contact_without_updates.xml
index f9dcf3d..9e53df0 100644
--- a/res/layout-sw680dp-w1000dp/detail_header_contact_without_updates.xml
+++ b/res/layout-sw680dp-w1000dp/detail_header_contact_without_updates.xml
@@ -50,7 +50,6 @@
android:id="@+id/company"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingTop="16dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary" />
diff --git a/res/layout-sw680dp-w1000dp/people_activity.xml b/res/layout-sw680dp-w1000dp/people_activity.xml
index a288ff0..e34ec21 100644
--- a/res/layout-sw680dp-w1000dp/people_activity.xml
+++ b/res/layout-sw680dp-w1000dp/people_activity.xml
@@ -26,11 +26,10 @@
android:layout_height="match_parent"
android:splitMotionEvents="true">
- <LinearLayout
+ <FrameLayout
android:id="@+id/browse_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:orientation="vertical"
android:minWidth="100dip"
ex:layout_narrowParentWidth="1000dip"
ex:layout_narrowWidth="276dip"
@@ -43,9 +42,8 @@
<fragment
android:id="@+id/all_fragment"
class="com.android.contacts.list.DefaultContactBrowseListFragment"
- android:layout_height="0dip"
- android:layout_width="match_parent"
- android:layout_weight="1" />
+ android:layout_height="match_parent"
+ android:layout_width="match_parent" />
<!-- Groups -->
<fragment
@@ -53,7 +51,7 @@
class="com.android.contacts.group.GroupBrowseListFragment"
android:layout_height="match_parent"
android:layout_width="match_parent" />
- </LinearLayout>
+ </FrameLayout>
<view
class="com.android.contacts.widget.TransitionAnimationView"
@@ -115,7 +113,8 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/list_background_holo">
+ android:background="@drawable/list_background_holo"
+ android:baselineAligned="false">
<!-- Starred -->
<FrameLayout
diff --git a/res/layout-w470dp/contact_detail_fragment.xml b/res/layout-w470dp/contact_detail_fragment.xml
index 415bb56..5de063f 100644
--- a/res/layout-w470dp/contact_detail_fragment.xml
+++ b/res/layout-w470dp/contact_detail_fragment.xml
@@ -35,14 +35,15 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_above="@id/contact_quick_fix"
- android:layout_height="match_parent" >
+ android:layout_height="match_parent"
+ android:baselineAligned="false" >
- <ImageView android:id="@+id/photo"
- android:scaleType="centerCrop"
+ <include android:id="@+id/static_photo_container"
+ layout="@layout/photo_selector_view"
android:layout_width="128dip"
android:layout_height="128dip"
android:layout_marginLeft="@dimen/detail_contact_photo_margin"
- android:layout_marginTop="@dimen/detail_contact_photo_margin"/>
+ android:layout_marginTop="@dimen/detail_contact_photo_margin" />
<ListView android:id="@android:id/list"
android:layout_width="0dip"
diff --git a/res/layout/account_filter_header.xml b/res/layout/account_filter_header.xml
index ef0a9c2..0ffb7e1 100644
--- a/res/layout/account_filter_header.xml
+++ b/res/layout/account_filter_header.xml
@@ -23,7 +23,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:paddingTop="@dimen/account_filter_header_top_padding"
+ android:paddingTop="@dimen/list_header_extra_top_padding"
android:layout_marginLeft="@dimen/contact_browser_list_header_left_margin"
android:layout_marginRight="@dimen/contact_browser_list_header_right_margin"
android:background="?android:attr/selectableItemBackground"
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index 13124f2..7498f5a 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -162,16 +162,22 @@
<TextView android:id="@+id/call_and_sms_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:paddingRight="@dimen/call_log_icon_margin"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?attr/call_log_primary_text_color"
+ android:singleLine="true"
+ android:ellipsize="end"
/>
<TextView android:id="@+id/call_and_sms_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:paddingRight="@dimen/call_log_icon_margin"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?attr/call_log_primary_text_color"
android:textAllCaps="true"
+ android:singleLine="true"
+ android:ellipsize="end"
/>
</LinearLayout>
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index 777c7af..4040c28 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -69,18 +69,38 @@
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginRight="@dimen/call_log_icon_margin"
android:textColor="?attr/call_log_primary_text_color"
android:textSize="18sp"
android:singleLine="true"
/>
- <TextView
- android:id="@+id/number"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="?attr/call_log_secondary_text_color"
- android:textSize="14sp"
- android:singleLine="true"
- />
+ android:orientation="horizontal"
+ >
+ <TextView
+ android:id="@+id/number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="14sp"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ />
+ <TextView
+ android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:textColor="?attr/call_log_secondary_text_color"
+ android:textStyle="bold"
+ android:textSize="14sp"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ />
+ </LinearLayout>
<LinearLayout
android:id="@+id/call_type"
android:layout_width="wrap_content"
@@ -99,6 +119,7 @@
android:id="@+id/call_count_and_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginRight="@dimen/call_log_icon_margin"
android:layout_gravity="center_vertical"
android:textColor="?attr/call_log_secondary_text_color"
android:textSize="14sp"
diff --git a/res/layout/contact_detail_fragment_carousel.xml b/res/layout/contact_detail_fragment_carousel.xml
index 2572cc4..d01a18e 100644
--- a/res/layout/contact_detail_fragment_carousel.xml
+++ b/res/layout/contact_detail_fragment_carousel.xml
@@ -19,7 +19,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:baselineAligned="false">
<!--
Container for the "About" page fragment on the contact card for a contact
diff --git a/res/layout/contact_detail_list_item.xml b/res/layout/contact_detail_list_item.xml
index 44f5a53..666b67c 100644
--- a/res/layout/contact_detail_list_item.xml
+++ b/res/layout/contact_detail_list_item.xml
@@ -82,15 +82,6 @@
</LinearLayout>
- <TextView
- android:id="@+id/footer"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:visibility="gone" />
-
</LinearLayout>
<View
diff --git a/res/layout/contact_detail_list_padding.xml b/res/layout/contact_detail_list_padding.xml
index 8095731..c5dbd06 100644
--- a/res/layout/contact_detail_list_padding.xml
+++ b/res/layout/contact_detail_list_padding.xml
@@ -23,6 +23,5 @@
<View
android:id="@+id/contact_detail_list_padding"
android:layout_width="match_parent"
- android:layout_height="@dimen/contact_browser_list_top_margin" />
+ android:layout_height="@dimen/list_header_extra_top_padding" />
</FrameLayout>
-
diff --git a/res/layout/contact_detail_tab_carousel.xml b/res/layout/contact_detail_tab_carousel.xml
index 28463a2..efd0164 100644
--- a/res/layout/contact_detail_tab_carousel.xml
+++ b/res/layout/contact_detail_tab_carousel.xml
@@ -23,26 +23,45 @@
android:fadingEdge="none">
<LinearLayout
- android:id="@+id/tab_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="horizontal">
+ android:orientation="vertical">
- <!-- "About" tab -->
- <include
- android:id="@+id/tab_about"
- layout="@layout/carousel_about_tab" />
+ <LinearLayout
+ android:id="@+id/tab_container"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:orientation="horizontal"
+ android:baselineAligned="false">
- <!-- Vertical divider -->
+ <!-- "About" tab -->
+ <include
+ android:id="@+id/tab_about"
+ layout="@layout/carousel_about_tab" />
+
+ <!-- Vertical divider -->
+ <View
+ android:layout_width="1dip"
+ android:layout_height="match_parent"
+ android:background="@android:color/white"/>
+
+ <!-- "Updates" tab -->
+ <include
+ android:id="@+id/tab_update"
+ layout="@layout/carousel_updates_tab" />
+
+ </LinearLayout>
+
+ <!--
+ Shadow below the carousel. The ContactDetailTabCarousel increases its height to
+ account for this shadow, and the class assumes the height of this shadow to be
+ @dimen/detail_contact_photo_shadow_height.
+ -->
<View
- android:layout_width="1dip"
- android:layout_height="match_parent"
- android:background="@android:color/white"/>
-
- <!-- "Updates" tab -->
- <include
- android:id="@+id/tab_update"
- layout="@layout/carousel_updates_tab" />
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/detail_contact_photo_shadow_height"
+ android:background="?android:attr/windowContentOverlay"/>
</LinearLayout>
diff --git a/res/layout/contact_list_filter_item.xml b/res/layout/contact_list_filter_item.xml
index b27cab8..7c09976 100644
--- a/res/layout/contact_list_filter_item.xml
+++ b/res/layout/contact_list_filter_item.xml
@@ -19,27 +19,38 @@
class="com.android.contacts.list.ContactListFilterView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="@dimen/contact_filter_item_min_height">
-
- <View
- android:id="@+id/indent"
- android:layout_width="32dip"
- android:layout_height="fill_parent" />
+ android:minHeight="@dimen/contact_filter_item_min_height"
+ android:gravity="center_vertical">
<ImageView
android:id="@+id/icon"
android:scaleType="fitCenter"
android:layout_width="@dimen/contact_filter_icon_size"
- android:layout_height="@dimen/contact_filter_icon_size"
- android:layout_gravity="center_vertical" />
+ android:layout_height="@dimen/contact_filter_icon_size"/>
- <TextView
- android:id="@+id/label"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginLeft="8dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:gravity="center_vertical"
- android:ellipsize="end" />
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical"
+ android:layout_marginLeft="8dip">
+
+ <TextView
+ android:id="@+id/accountType"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:singleLine="true"
+ android:ellipsize="end"/>
+
+ <TextView
+ android:id="@+id/accountUserName"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary"
+ android:singleLine="true"
+ android:ellipsize="end"/>
+ </LinearLayout>
</view>
diff --git a/res/layout/contact_tile_frequent_phone.xml b/res/layout/contact_tile_frequent_phone.xml
index aa2d9a8..5c7b7e2 100644
--- a/res/layout/contact_tile_frequent_phone.xml
+++ b/res/layout/contact_tile_frequent_phone.xml
@@ -18,7 +18,7 @@
<view
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contact_tile_frequent_phone"
- class="com.android.contacts.list.ContactTileDarkFrequentView"
+ class="com.android.contacts.list.ContactTilePhoneFrequentView"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"
android:nextFocusLeft="@+id/contact_tile_quick">
diff --git a/res/layout/contact_tile_starred.xml b/res/layout/contact_tile_starred.xml
index 4116157..91438e9 100644
--- a/res/layout/contact_tile_starred.xml
+++ b/res/layout/contact_tile_starred.xml
@@ -73,7 +73,7 @@
</LinearLayout>
- <View
+ <View
android:id="@+id/contact_tile_push_state"
android:layout_width="match_parent"
android:layout_height="match_parent"
diff --git a/res/layout/contacts_unavailable_fragment.xml b/res/layout/contacts_unavailable_fragment.xml
index 9f28a55..1abc020 100644
--- a/res/layout/contacts_unavailable_fragment.xml
+++ b/res/layout/contacts_unavailable_fragment.xml
@@ -62,13 +62,12 @@
android:layout_marginBottom="15dip"
android:text="@string/contacts_unavailable_add_account" />
- <!-- TODO: Use a string that says "Import" instead of "Import/export contacts"-->
<Button
android:id="@+id/import_contacts_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="15dip"
- android:text="@string/dialog_import_export" />
+ android:text="@string/contacts_unavailable_import_contacts" />
<Button
android:id="@+id/import_failure_uninstall_button"
diff --git a/res/layout/detail_header_contact_without_updates.xml b/res/layout/detail_header_contact_without_updates.xml
index 2de7711..7e5037e 100644
--- a/res/layout/detail_header_contact_without_updates.xml
+++ b/res/layout/detail_header_contact_without_updates.xml
@@ -18,17 +18,29 @@
This is a header entry in the contact details list for when the contact does not have social
updates, which means that the contact's photo will scroll with the list of details.
-->
-<view
+<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ex="http://schemas.android.com/apk/res/com.android.contacts"
- class="com.android.contacts.widget.ProportionalLayout"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- ex:ratio="0.5"
- ex:direction="widthToHeight">
- <ImageView
- android:id="@+id/photo"
- android:scaleType="centerCrop"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <!-- Contact photo -->
+ <view
+ class="com.android.contacts.widget.ProportionalLayout"
android:layout_width="match_parent"
- android:layout_height="match_parent" />
-</view>
\ No newline at end of file
+ android:layout_height="wrap_content"
+ ex:ratio="0.5"
+ ex:direction="widthToHeight">
+
+ <include layout="@layout/photo_selector_view" />
+
+ </view>
+
+ <!-- Shadow -->
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/detail_contact_photo_shadow_height"
+ android:background="?android:attr/windowContentOverlay"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
index 45f40f6..247bd5a 100644
--- a/res/layout/dialpad.xml
+++ b/res/layout/dialpad.xml
@@ -31,13 +31,16 @@
<TableRow
android:layout_height="0px"
android:layout_weight="1">
- <ImageButton android:id="@+id/one" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/one" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_1"
android:contentDescription="@string/description_image_button_one" />
- <ImageButton android:id="@+id/two" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/two" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_2"
android:contentDescription="@string/description_image_button_two" />
- <ImageButton android:id="@+id/three" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/three" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_3"
android:contentDescription="@string/description_image_button_three" />
</TableRow>
@@ -45,13 +48,16 @@
<TableRow
android:layout_height="0px"
android:layout_weight="1">
- <ImageButton android:id="@+id/four" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/four" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_4"
android:contentDescription="@string/description_image_button_four" />
- <ImageButton android:id="@+id/five" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/five" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_5"
android:contentDescription="@string/description_image_button_five" />
- <ImageButton android:id="@+id/six" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/six" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_6"
android:contentDescription="@string/description_image_button_six" />
</TableRow>
@@ -59,13 +65,16 @@
<TableRow
android:layout_height="0px"
android:layout_weight="1">
- <ImageButton android:id="@+id/seven" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/seven" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_7"
android:contentDescription="@string/description_image_button_seven" />
- <ImageButton android:id="@+id/eight" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/eight" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_8"
android:contentDescription="@string/description_image_button_eight" />
- <ImageButton android:id="@+id/nine" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/nine" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_9"
android:contentDescription="@string/description_image_button_nine" />
</TableRow>
@@ -73,13 +82,16 @@
<TableRow
android:layout_height="0px"
android:layout_weight="1">
- <ImageButton android:id="@+id/star" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/star" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_star"
android:contentDescription="@string/description_image_button_star" />
- <ImageButton android:id="@+id/zero" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/zero" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_0"
android:contentDescription="@string/description_image_button_zero" />
- <ImageButton android:id="@+id/pound" style="@style/DialtactsDialpadButtonStyle"
+ <com.android.contacts.dialpad.DialpadImageButton
+ android:id="@+id/pound" style="@style/DialtactsDialpadButtonStyle"
android:src="@drawable/dial_num_pound"
android:contentDescription="@string/description_image_button_pound" />
</TableRow>
diff --git a/res/layout/directory_header.xml b/res/layout/directory_header.xml
index a2adf48..8e845e0 100644
--- a/res/layout/directory_header.xml
+++ b/res/layout/directory_header.xml
@@ -15,23 +15,21 @@
-->
<!-- Layout used for list section separators. -->
-<RelativeLayout
+<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/DirectoryHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:gravity="center_vertical"
android:minHeight="@dimen/list_section_divider_min_height"
android:background="@drawable/list_section_divider_holo_custom"
- android:paddingTop="@dimen/contact_browser_list_top_margin"
+ android:layout_marginTop="@dimen/list_header_extra_top_padding"
android:paddingLeft="?attr/list_item_padding_left"
android:paddingRight="?attr/list_item_padding_right">
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_centerVertical="true"
android:layout_marginLeft="8dip"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/people_app_theme_color"
@@ -39,21 +37,9 @@
android:textStyle="bold"
android:textAllCaps="true" />
<TextView
- android:id="@+id/count"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_alignBaseline="@id/label"
- android:singleLine="true"
- android:textSize="12sp"
- android:textColor="@color/contact_count_text_color" />
- <TextView
android:id="@+id/display_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_toRightOf="@id/label"
- android:layout_toLeftOf="@id/count"
- android:layout_alignBaseline="@id/label"
android:layout_marginLeft="8dip"
android:layout_marginRight="8dip"
android:textAppearance="?android:attr/textAppearanceSmall"
@@ -61,4 +47,14 @@
android:singleLine="true"
android:textStyle="bold"
android:textAllCaps="true" />
-</RelativeLayout>
+ <TextView
+ android:id="@+id/count"
+ android:paddingTop="1dip"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:gravity="right"
+ android:singleLine="true"
+ android:textSize="12sp"
+ android:textColor="@color/contact_count_text_color" />
+</LinearLayout>
diff --git a/res/layout/group_browse_list_account_header.xml b/res/layout/group_browse_list_account_header.xml
index 709c276..78e0639 100644
--- a/res/layout/group_browse_list_account_header.xml
+++ b/res/layout/group_browse_list_account_header.xml
@@ -24,7 +24,7 @@
<View
android:id="@+id/header_extra_top_padding"
android:layout_width="match_parent"
- android:layout_height="@dimen/contact_browser_list_top_margin" />
+ android:layout_height="@dimen/list_header_extra_top_padding" />
<LinearLayout
android:layout_width="match_parent"
diff --git a/res/layout/join_contact_picker.xml b/res/layout/join_contact_picker.xml
index ea0deaf..ee30525 100644
--- a/res/layout/join_contact_picker.xml
+++ b/res/layout/join_contact_picker.xml
@@ -14,23 +14,13 @@
limitations under the License.
-->
-<view
- xmlns:android="http://schemas.android.com/apk/res/android"
+<view xmlns:android="http://schemas.android.com/apk/res/android"
class="com.android.contacts.widget.FullHeightLinearLayout"
style="@style/ContactPickerLayout"
android:orientation="vertical">
-
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:id="@+id/list_container" />
-
- <View
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginLeft="?attr/contact_browser_list_padding_left"
- android:layout_marginRight="?attr/contact_browser_list_padding_right"
- android:background="?android:attr/dividerHorizontal" />
</view>
diff --git a/res/layout/photo_selector_view.xml b/res/layout/photo_selector_view.xml
new file mode 100644
index 0000000..0006559
--- /dev/null
+++ b/res/layout/photo_selector_view.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ View for displaying photos that show a photo selector when clicked.
+-->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ImageView
+ android:id="@+id/photo"
+ android:scaleType="centerCrop"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+ <View
+ android:id="@+id/photo_touch_intercept_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="?android:attr/selectableItemBackground"
+ android:visibility="gone" />
+
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/photoselection_activity.xml b/res/layout/photoselection_activity.xml
new file mode 100644
index 0000000..75f729b
--- /dev/null
+++ b/res/layout/photoselection_activity.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:ex="http://schemas.android.com/apk/res/com.android.contacts"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <View
+ android:id="@+id/backdrop"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#000000" />
+ <view
+ android:id="@+id/photo"
+ class="com.android.contacts.detail.TransformableImageView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:scaleType="centerCrop" />
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/quickcontact_list_fragment.xml b/res/layout/quickcontact_list_fragment.xml
index 5ade104..e542f7a 100755
--- a/res/layout/quickcontact_list_fragment.xml
+++ b/res/layout/quickcontact_list_fragment.xml
@@ -14,28 +14,19 @@
limitations under the License.
-->
-<LinearLayout
+<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
- <!-- Line that looks like a list divider -->
- <View
+ <ListView
+ android:id="@+id/list"
android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="@color/quickcontact_list_divider" />
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <ListView
- android:id="@+id/list"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:divider="@drawable/quickcontact_list_item_divider"
- android:dividerHeight="1dip"
- android:background="@color/quickcontact_list_background"
- android:cacheColorHint="@null"
- android:layout_alignParentTop="true" />
- <include layout="@layout/quickcontact_list_fragment_bottom"/>
- </RelativeLayout>
-</LinearLayout>
+ android:layout_height="wrap_content"
+ android:divider="@drawable/quickcontact_list_item_divider"
+ android:dividerHeight="1dip"
+ android:background="@color/quickcontact_list_background"
+ android:cacheColorHint="@null"
+ android:layout_alignParentTop="true"
+ />
+ <include layout="@layout/quickcontact_list_fragment_bottom"/>
+</RelativeLayout>
diff --git a/res/layout/quickcontact_list_item.xml b/res/layout/quickcontact_list_item.xml
index ee3a89f..1b66ec3 100755
--- a/res/layout/quickcontact_list_item.xml
+++ b/res/layout/quickcontact_list_item.xml
@@ -27,13 +27,27 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:singleLine="true"
android:ellipsize="end" />
- <TextView
- android:id="@android:id/text2"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="@color/secondary_text_color"
- android:textAllCaps="true"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:orientation="horizontal">
+ <ImageView
+ android:id="@+id/presence_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="1dip"
+ android:layout_marginRight="4dip"
+ android:layout_gravity="center_vertical"
+ android:gravity="center"
+ android:scaleType="centerInside" />
+ <TextView
+ android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/secondary_text_color"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </LinearLayout>
</LinearLayout>
<include layout="@layout/quickcontact_list_item_base"/>
</LinearLayout>
diff --git a/res/layout/quickcontact_list_item_address.xml b/res/layout/quickcontact_list_item_address.xml
index 9773b10..cb99673 100755
--- a/res/layout/quickcontact_list_item_address.xml
+++ b/res/layout/quickcontact_list_item_address.xml
@@ -28,13 +28,27 @@
android:layout_height="wrap_content"
android:textColor="@color/primary_text_color"
android:textAppearance="?android:attr/textAppearanceMedium" />
- <TextView
- android:id="@android:id/text2"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="@color/secondary_text_color"
- android:textAllCaps="true"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:orientation="horizontal">
+ <ImageView
+ android:id="@+id/presence_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="1dip"
+ android:layout_marginRight="4dip"
+ android:layout_gravity="center_vertical"
+ android:gravity="center"
+ android:scaleType="centerInside" />
+ <TextView
+ android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/secondary_text_color"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </LinearLayout>
</LinearLayout>
<include layout="@layout/quickcontact_list_item_base"/>
</LinearLayout>
diff --git a/res/layout/raw_contact_editor_view.xml b/res/layout/raw_contact_editor_view.xml
index 5180557..1ea781e 100644
--- a/res/layout/raw_contact_editor_view.xml
+++ b/res/layout/raw_contact_editor_view.xml
@@ -77,7 +77,8 @@
android:id="@+id/sect_fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"/>
+ android:orientation="vertical"
+ android:layout_marginBottom="16dip"/>
<Button
android:id="@+id/button_add_field"
@@ -85,7 +86,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:layout_marginTop="16dip"
android:layout_marginBottom="32dip"/>
</LinearLayout>
diff --git a/res/layout/user_profile_header.xml b/res/layout/user_profile_header.xml
index 6867dea..67b64d5 100644
--- a/res/layout/user_profile_header.xml
+++ b/res/layout/user_profile_header.xml
@@ -17,49 +17,42 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/user_profile_header"
- android:orientation="vertical"
+ android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="?attr/list_item_header_height"
- android:paddingTop="@dimen/contact_browser_list_top_margin"
+ android:paddingTop="@dimen/list_header_extra_top_padding"
android:paddingLeft="?attr/list_item_padding_left"
- android:paddingRight="?attr/list_item_padding_right" >
+ android:paddingRight="?attr/list_item_padding_right"
+ android:background="@drawable/list_section_divider_holo_custom"
+ android:minHeight="?attr/list_item_header_height"
+ >
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ <TextView
+ android:id="@+id/profile_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:text="@string/user_profile_contacts_list_header"
+ android:textStyle="bold"
+ android:ellipsize="end"
+ android:layout_gravity="left|bottom"
+ android:layout_marginBottom="2dip"
+ android:layout_weight="1"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:paddingLeft="?attr/list_item_text_indent"
+ android:textColor="@color/people_app_theme_color" />
- <TextView
- android:id="@+id/profile_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:text="@string/user_profile_contacts_list_header"
- android:textStyle="bold"
- android:ellipsize="end"
- android:gravity="left|center_vertical"
- android:layout_weight="1"
- android:textAllCaps="true"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:paddingLeft="?attr/list_item_text_indent"
- android:textColor="@color/people_app_theme_color" />
-
- <TextView
- android:id="@+id/contacts_count"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"
- android:layout_gravity="right|center_vertical"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textSize="12sp"
- android:textColor="@color/contact_count_text_color" />
- </LinearLayout>
-
- <View
- android:background="@color/people_app_theme_color"
- android:layout_width="match_parent"
- android:layout_height="?attr/list_item_header_underline_height" />
+ <TextView
+ android:id="@+id/contacts_count"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:layout_gravity="right|bottom"
+ android:layout_marginBottom="2dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textSize="12sp"
+ android:textColor="@color/contact_count_text_color" />
</LinearLayout>
diff --git a/res/menu-sw580dp-w720dp/actions.xml b/res/menu-sw580dp-w720dp/people_options.xml
similarity index 88%
rename from res/menu-sw580dp-w720dp/actions.xml
rename to res/menu-sw580dp-w720dp/people_options.xml
index 8735d89..5f939cc 100644
--- a/res/menu-sw580dp-w720dp/actions.xml
+++ b/res/menu-sw580dp-w720dp/people_options.xml
@@ -34,25 +34,21 @@
<item
android:id="@+id/menu_contacts_filter"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:orderInCategory="1"
android:title="@string/menu_contacts_filter" />
<item
android:id="@+id/menu_import_export"
- android:icon="@drawable/ic_menu_import_export_holo_light"
android:orderInCategory="2"
android:title="@string/menu_import_export" />
<item
android:id="@+id/menu_accounts"
- android:icon="@drawable/ic_menu_accounts_holo_light"
android:orderInCategory="3"
android:title="@string/menu_accounts" />
<item
android:id="@+id/menu_settings"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:orderInCategory="4"
android:title="@string/menu_settings" />
</menu>
diff --git a/res/menu-sw580dp-w720dp/view_contact.xml b/res/menu-sw580dp-w720dp/view_contact.xml
index 734e6b2..c1f99a8 100644
--- a/res/menu-sw580dp-w720dp/view_contact.xml
+++ b/res/menu-sw580dp-w720dp/view_contact.xml
@@ -24,13 +24,11 @@
<item
android:id="@+id/menu_share"
- android:icon="@drawable/ic_menu_share_holo_light"
android:title="@string/menu_share"
android:alphabeticShortcut="s" />
<item
android:id="@+id/menu_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
android:title="@string/menu_deleteContact" />
</menu>
diff --git a/res/menu-sw580dp-w720dp/view_group.xml b/res/menu-sw580dp-w720dp/view_group.xml
index 1348d84..3836c0f 100644
--- a/res/menu-sw580dp-w720dp/view_group.xml
+++ b/res/menu-sw580dp-w720dp/view_group.xml
@@ -24,6 +24,5 @@
<item
android:id="@+id/menu_delete_group"
- android:icon="@drawable/ic_menu_trash_holo_light"
android:title="@string/menu_deleteGroup" />
</menu>
diff --git a/res/menu-sw580dp/actions.xml b/res/menu-sw580dp/people_options.xml
similarity index 89%
rename from res/menu-sw580dp/actions.xml
rename to res/menu-sw580dp/people_options.xml
index 35a9c0a..c8c114a 100644
--- a/res/menu-sw580dp/actions.xml
+++ b/res/menu-sw580dp/people_options.xml
@@ -37,25 +37,21 @@
-->
<item
android:id="@+id/menu_contacts_filter"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:orderInCategory="1"
android:title="@string/menu_contacts_filter" />
<item
android:id="@+id/menu_import_export"
- android:icon="@drawable/ic_menu_import_export_holo_light"
android:orderInCategory="2"
android:title="@string/menu_import_export" />
<item
android:id="@+id/menu_accounts"
- android:icon="@drawable/ic_menu_accounts_holo_light"
android:orderInCategory="3"
android:title="@string/menu_accounts" />
<item
android:id="@+id/menu_settings"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:orderInCategory="4"
android:title="@string/menu_settings" />
</menu>
diff --git a/res/menu-sw580dp/view_contact.xml b/res/menu-sw580dp/view_contact.xml
index 1279601..0f285db 100644
--- a/res/menu-sw580dp/view_contact.xml
+++ b/res/menu-sw580dp/view_contact.xml
@@ -23,13 +23,11 @@
<item
android:id="@+id/menu_share"
- android:icon="@drawable/ic_menu_share_holo_light"
android:title="@string/menu_share"
android:alphabeticShortcut="s" />
<item
android:id="@+id/menu_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
android:title="@string/menu_deleteContact" />
</menu>
diff --git a/res/menu-sw580dp/view_group.xml b/res/menu-sw580dp/view_group.xml
index cd52030..d01c167 100644
--- a/res/menu-sw580dp/view_group.xml
+++ b/res/menu-sw580dp/view_group.xml
@@ -23,6 +23,5 @@
<item
android:id="@+id/menu_delete_group"
- android:icon="@drawable/ic_menu_trash_holo_light"
android:title="@string/menu_deleteGroup" />
</menu>
diff --git a/res/menu/call_details_options.xml b/res/menu/call_details_options.xml
index ed0111b..63ce8f5 100644
--- a/res/menu/call_details_options.xml
+++ b/res/menu/call_details_options.xml
@@ -23,7 +23,6 @@
/>
<item
android:id="@+id/menu_remove_from_call_log"
- android:icon="@android:drawable/ic_menu_close_clear_cancel"
android:title="@string/recentCalls_removeFromRecentList"
android:onClick="onMenuRemoveFromCallLog"
/>
diff --git a/res/menu/call_log_options.xml b/res/menu/call_log_options.xml
index 3d0fb6a..c41f9da 100644
--- a/res/menu/call_log_options.xml
+++ b/res/menu/call_log_options.xml
@@ -29,7 +29,6 @@
<item
android:id="@+id/delete_all"
- android:icon="@android:drawable/ic_menu_close_clear_cancel"
android:title="@string/recentCalls_deleteAll"
android:showAsAction="withText"
android:orderInCategory="1" />
diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index 02b1f7f..6dda8fc 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -16,20 +16,17 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_add_contacts"
- android:icon="@android:drawable/ic_menu_add"
android:title="@string/recentCalls_addToContact"
android:showAsAction="withText"
android:orderInCategory="1" />
<item
android:id="@+id/menu_2s_pause"
- android:icon="@drawable/ic_menu_2sec_pause"
android:title="@string/add_2sec_pause"
android:showAsAction="withText"
android:orderInCategory="1" />
<item
android:id="@+id/menu_add_wait"
- android:icon="@drawable/ic_menu_wait"
android:title="@string/add_wait"
android:showAsAction="withText"
android:orderInCategory="1" />
@@ -37,7 +34,6 @@
<item
android:id="@+id/menu_call_settings_dialpad"
android:title="@string/call_settings"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:showAsAction="withText"
android:orderInCategory="1" />
</menu>
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index 54ca086..21161b1 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -16,7 +16,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/search_on_action_bar"
- android:title="@string/menu_all_contacts"
+ android:title="@string/menu_search"
android:icon="@drawable/ic_dial_action_search"
android:showAsAction="ifRoom" />
@@ -24,7 +24,6 @@
<item
android:id="@+id/menu_call_settings"
android:title="@string/call_settings"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:showAsAction="withText"
android:orderInCategory="2" />
@@ -35,6 +34,7 @@
<item
android:id="@+id/add_contact"
+ android:icon="@drawable/ic_add_contact_holo_dark"
android:title="@string/menu_newContact"
- android:showAsAction="withText" />
+ android:showAsAction="ifRoom" />
</menu>
diff --git a/res/menu/edit_contact.xml b/res/menu/edit_contact.xml
index 26b89df..93c19dc 100644
--- a/res/menu/edit_contact.xml
+++ b/res/menu/edit_contact.xml
@@ -22,12 +22,10 @@
<item
android:id="@+id/menu_split"
- android:icon="@drawable/ic_menu_split_holo_light"
android:title="@string/menu_splitAggregate" />
<item
android:id="@+id/menu_join"
- android:icon="@drawable/ic_menu_merge_holo_light"
android:title="@string/menu_joinAggregate" />
<item
diff --git a/res/menu/list.xml b/res/menu/list.xml
index 56d92f8..f4a8751 100644
--- a/res/menu/list.xml
+++ b/res/menu/list.xml
@@ -28,17 +28,14 @@
<item
android:id="@+id/menu_settings"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:title="@string/menu_settings" />
<item
android:id="@+id/menu_accounts"
- android:icon="@drawable/ic_menu_accounts_holo_light"
android:title="@string/menu_accounts" />
<item
android:id="@+id/menu_import_export"
- android:icon="@drawable/ic_menu_import_export_holo_light"
android:title="@string/menu_import_export" />
</menu>
diff --git a/res/menu/actions.xml b/res/menu/people_options.xml
similarity index 87%
rename from res/menu/actions.xml
rename to res/menu/people_options.xml
index 9067a46..0c82f99 100644
--- a/res/menu/actions.xml
+++ b/res/menu/people_options.xml
@@ -34,21 +34,17 @@
<item
android:id="@+id/menu_contacts_filter"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:title="@string/menu_contacts_filter" />
<item
android:id="@+id/menu_import_export"
- android:icon="@drawable/ic_menu_import_export_holo_light"
android:title="@string/menu_import_export" />
<item
android:id="@+id/menu_accounts"
- android:icon="@drawable/ic_menu_accounts_holo_light"
android:title="@string/menu_accounts" />
<item
android:id="@+id/menu_settings"
- android:icon="@drawable/ic_menu_settings_holo_light"
android:title="@string/menu_settings" />
</menu>
diff --git a/res/menu/phone_favorite_options.xml b/res/menu/phone_favorite_options.xml
new file mode 100644
index 0000000..ac67d6e
--- /dev/null
+++ b/res/menu/phone_favorite_options.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:id="@+id/menu_import_export"
+ android:title="@string/menu_import_export" />
+
+ <item
+ android:id="@+id/menu_accounts"
+ android:title="@string/menu_accounts" />
+</menu>
diff --git a/res/menu/view_contact.xml b/res/menu/view_contact.xml
index 2ae4806..6712cb6 100644
--- a/res/menu/view_contact.xml
+++ b/res/menu/view_contact.xml
@@ -17,24 +17,20 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_edit"
- android:icon="@drawable/ic_menu_compose_holo_dark"
android:title="@string/menu_editContact"
android:alphabeticShortcut="e" />
<item
android:id="@+id/menu_share"
- android:icon="@drawable/ic_menu_share_holo_light"
android:title="@string/menu_share"
android:alphabeticShortcut="s" />
<item
android:id="@+id/menu_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
android:title="@string/menu_deleteContact" />
<item
android:id="@+id/menu_set_ringtone"
- android:icon="@drawable/ic_menu_mark"
android:title="@string/menu_set_ring_tone" />
<item
diff --git a/res/menu/view_group.xml b/res/menu/view_group.xml
index cd52030..669f401 100644
--- a/res/menu/view_group.xml
+++ b/res/menu/view_group.xml
@@ -17,12 +17,10 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_edit_group"
- android:icon="@drawable/ic_menu_compose_holo_dark"
android:title="@string/menu_editGroup"
android:alphabeticShortcut="e" />
<item
android:id="@+id/menu_delete_group"
- android:icon="@drawable/ic_menu_trash_holo_light"
android:title="@string/menu_deleteGroup" />
</menu>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 428fed8..123421b 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Soek"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nuwe kontak"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Bekyk kontak"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Bel <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Voeg by gunstelinge"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Verwyder van gunstelinge"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Redigeer"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Voorgestelde kontakte"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakte"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakte saamgevoeg"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Vee kontak uit?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Stel luitoon op"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle oproepe na stempos"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Jy kan nie kontakte uit leesalleen-rekeninge uitvee nie, maar jy kan hulle wel in jou kontaklyste versteek."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Gereeld gekontak"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Gereeld gebel"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Voeg kontak by"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" by kontakte?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"een"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"twee"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Bekyk kontak"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Berging nie beskikbaar nie"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Geen SD-kaart nie"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Geen berging gevind nie."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Geen SD-kaart gevind nie."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Soek vir vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Voer in van SIM-kaart"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Voer in uit berging"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Voer uit na berging"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Voer alle vCard-lêers in"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Soek tans vir vCard-data in berging..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Soek tans vir vCard-data op SD-kaart..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Kon berging nie skandeer nie."</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Kon nie SD-kaart skandeer nie"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Die berging kon nie geskandeer word nie. (Rede: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Die SD-kaart kon nie geskandeer word nie. (Rede: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"T/A-fout"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Die vCard-opsteller het nie behoorlik begin nie."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kon nie \"<xliff:g id="FILE_NAME">%s</xliff:g>\" open nie: <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> kontakte"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Kanselleer vCard-invoer"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Kanselleer invoer van <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Kanselleer vCard-uitvoer"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kanselleer uitvoer van <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kon nie vCard invoer/uitvoer kanselleer nie"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Name van jou kontakte"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakte om te wys"</string>
<string name="menu_import_export" msgid="26217871113229507">"Voer in/uit"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Voer kontakte in/uit"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Voer kontakte in"</string>
<string name="menu_share" msgid="943789700636542260">"Deel"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Alle kontakte"</string>
<string name="share_via" msgid="563121028023030093">"Deel kontak met"</string>
<string name="share_error" msgid="948429331673358107">"Hierdie kontak kan nie gedeel word nie."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Naam"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"saamgevoeg uit <xliff:g id="COUNT">%0$d</xliff:g> bronne"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Ander"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Voeg kontakte saam"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Voeg die huidige kontak by die gekose kontak saam?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Redigeer gekose kontakte"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Wissel na redigering van die gekose kontak? Inligting wat jy tot dusver ingevoer het, sal gekopieer word."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopieer na My kontakte"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Voeg by My kontakte"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Laai tans…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Skep \'n nuwe kontak"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Meld aan by \'n rekening"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Voer kontakte van \'n lêer in"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Voer kontakte in"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Skep nuwe groep"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Skep nuwe groep]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Vee groep uit"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 groep"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groepe"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Stel verstek op"</string>
<string name="clear_default" msgid="7193185801596678067">"Vee verstek uit"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teks gekopieer"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Ontdoen wysigings"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Verwerp jou veranderings?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Stel my profiel op"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Hou plaaslik"</string>
<string name="add_account" msgid="8201790677994503186">"Voeg rekening by"</string>
<string name="add_new_account" msgid="5748627740680940264">"Voeg nuwe rekening by"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Oproep nie gestuur nie."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Stemboodskapnommer nie beskikbaar nie"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Oproep nie gestuur nie"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Om stemboodskapdiens op te stel, gaan na Kieslys > Instellings."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Om stemboodskapdiens te bel, skakel eers vliegtuigmodus af."</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index c338395..3967bd2 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"ደውል<xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"ወደ ተወዳጅ አክል"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"ከተወዳጆች አስወግድ"</string>
<string name="menu_editContact" msgid="9042415603857662633">"አርትዕ"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"አስተያየት የተሰጠባቸው እውቅያዎች"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ሁሉም እውቅያዎች"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"ዕውቂያዎች ተገናኝተዋል"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"ዕውቅያ ሰርዝ?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"የጥሪ ድምፅ አዘጋጅ"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ሁሉንም ጥሪዎች ወደ ድምፅ መልዕክት"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"ዕውቂያዎችን ከንባብ-ብቻ መለያዎች መሰረዝ አትችልም፤ ነገር ግን በዕውቂያ ዝርዝሮች ውስጥ መደበቅ ትችላለህ።"</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g>ደቂቃዎች <xliff:g id="SECONDS">%s</xliff:g> ሰከንዶች"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"በተደጋጋሚ የሚገናኙ"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"በተደጋጋሚ የተደወለ"</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="description_image_button_one" msgid="1740638037139856139">"አንድ"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"ሁለት"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"ሲቀነስ"</string>
<string name="description_plus_button" msgid="515164827856229880">"ተጨማሪ"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"ዕውቂያ ዕይ"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"ማከማቻ አልተገኘም"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"ምንምSD ካርድ የለም"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"ምንም ማከማቻ አልተገኘም፡፡"</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"ምንም SD ካርድ አልተገኘም፡፡"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCard ፍለጋ"</string>
<string name="import_from_sim" msgid="3859272228033941659">"ከSIM ካርድ አስመጣ"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"ከማከማቻ አስገባ"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"ወደማከማቻ ላክ"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"ሁሉም vCard ፋይሎችን አስገባ"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"በማከማቻ ውስጥ የvCard ውሂብ በመፈለግ ላይ"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"በSD ካርድ ላይ vCard ፍለጋ"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"ማከማቻን መቃኘት አልተቻለም"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD ካርድን መቃኘት አልተቻለም"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"ማከማቻው ሊቀረጽ አልተቻለም:: (ምክንያት: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD ካርዱ ሊቀረጽ አልተቻለም:: (ምክንያት: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ስህተት"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"የ vCard አቀናባሪው በትክክል አልጀመረም::"</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"vCard አስመጣ በመሰረዝ ላይ"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"የ<xliff:g id="FILENAME">%s</xliff:g>ወደ ውስጥ ማስገባት ይተው?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCard ላክበመሰረዝላይ"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"የ<xliff:g id="FILENAME">%s</xliff:g> ወደ ውጭ መላክ ይተው?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ማስመጣት/ወደ ውጪ መላክ መተው አልተቻለም"</string>
<string name="search_settings_description" msgid="2675223022992445813">"የዕውቂያዎችዎ ስሞች"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"ዕውቂያዎች አሳይ"</string>
<string name="menu_import_export" msgid="26217871113229507">"አስመጣ/ላክ"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"ዕውቂያዎች አስመጣ/ላክ"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"እውቅያዎችን ከውጭ አስመጣ"</string>
<string name="menu_share" msgid="943789700636542260">"መጋሪያ"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"ሁሉም እውቅያዎች"</string>
<string name="share_via" msgid="563121028023030093">"ዕውቂያበ በኩል አጋራ"</string>
<string name="share_error" msgid="948429331673358107">"ይህ ዕውቂያ መጋራት አይችልም።"</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"ስም"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"ከ<xliff:g id="COUNT">%0$d</xliff:g> ምንጮች የተዋሃደ"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"ሌላ"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"ዕውቂያዎችን አገናኝ"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"የአሁኑ ዕውቂያ ከተመረጠው ዕውቂያ ጋር ይገናኝ?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"የተመረጡ ዕውቂያዎችን አርትዕ"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"የተመረጠው ዕውቂያ ወደ አርትዕ ይቀየር? እስከ አሁን ያስገቡት መረጃ ይገለበጣል።"</string>
<string name="menu_copyContact" msgid="1573960845106822639">"ወደ ዕውቂያዎቼ ቅዳ"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"ወደ እኔ ዕውቂያዎች አክል"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"በመስቀል ላይ…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"አዲስ ዕውቂያ ፍጠር"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"ወደ መለያ ግባ"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"ከፋይል ዕውቂያዎች አስመጣ"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"እውቅያዎችን ከውጭ አስመጣ"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"አዲስ ቡድን ፍጠር"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[አዲስ ቡድን ፍጠር]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"ቡድን ሰርዝ"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 ቡድን"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g>ቡድኖች"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"ነባሪ አዘጋጅ"</string>
<string name="clear_default" msgid="7193185801596678067">"ነባሪ አጥራ"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"ፅሁፍ ገልብጧል"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"ለውጦች አስወግድ"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">" ለውጦችህ ይወገዱ?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"መገለጫዬን አዘጋጅ"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"በአካባቢው አቆይ"</string>
<string name="add_account" msgid="8201790677994503186">"መለያ አክል"</string>
<string name="add_new_account" msgid="5748627740680940264">"አዲስ መለያ አክል"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"ጥሪ አልተላከም።"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"የድምጽ መልዕክት ቁጥር አይገኝም::"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ጥሪ አልተላከም"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ድምጽ መልዕክትን ለማደራጀት ወደ ምናሌ > ቅንጅቶች ሂድ::"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"የድምጽ መልዕክት ጥሪ ለማድረግ፣ በመጀመሪያ የአውሮፕላን ሁነታን አጥፋ።"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 7e9db74..bad2d27 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"الاتصال بالرقم <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"إضافة إلى المفضلة"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"إزالة من المفضلة"</string>
<string name="menu_editContact" msgid="9042415603857662633">"تعديل"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"جهات الاتصال المقترحة"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"جميع جهات الاتصال"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"جهات الاتصال المنضمة"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"حذف جهة الاتصال؟"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"تعيين نغمة رنين"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"جميع المكالمات إلى البريد الصوتي"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"لا يمكنك حذف جهات الاتصال من حسابات للقراءة فقط، ولكن يمكنك إخفاؤها في قوائم جهات الاتصال."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"عدد الدقائق:<xliff:g id="MINUTES">%s</xliff:g>، عددالثواني: <xliff:g id="SECONDS">%s</xliff:g>"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"يتم الاتصال بهم بشكل متكرر"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"الأكثر اتصالاً"</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="description_image_button_one" msgid="1740638037139856139">"واحد"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"اثنان"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"علامة الطرح"</string>
<string name="description_plus_button" msgid="515164827856229880">"علامة زائد"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"عرض جهة الاتصال"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"وحدة التخزين غير متوفرة."</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"لا بطاقة SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"لم يتم العثور على وحدة تخزين."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"لم يتم العثور على بطاقة SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"البحث عن vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"استيراد من بطاقة SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"استيراد من وحدة التخزين"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"تصدير إلى وحدة التخزين"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"استيراد جميع ملفات vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"جارٍ البحث عن بيانات vCard في وحدة التخزين..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"جارٍ البحث عن بيانات vCard على بطاقة SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"تعذر فحص وحدة التخزين"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"تعذر فحص بطاقة SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"تعذر فحص وحدة التخزين. (السبب: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"تعذر فحص بطاقة SD. (السبب: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"خطأ I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"لم يبدأ مؤلف vCard بشكل صحيح."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"تعذر فتح \"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"إلغاء استيراد ملف vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"هل تريد إلغاء استيراد <xliff:g id="FILENAME">%s</xliff:g>؟"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"إلغاء تصدير ملف vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"هل تريد إلغاء تصدير <xliff:g id="FILENAME">%s</xliff:g>؟"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"تعذر إلغاء استيراد/تصدير vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"أسماء جهات الاتصال"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"جهات الاتصال التي يتم عرضها"</string>
<string name="menu_import_export" msgid="26217871113229507">"استيراد/تصدير"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"استيراد/تصدير جهات اتصال"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"استيراد جهات الاتصال"</string>
<string name="menu_share" msgid="943789700636542260">"مشاركة"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"جميع جهات الاتصال"</string>
<string name="share_via" msgid="563121028023030093">"مشاركة جهة الاتصال عبر"</string>
<string name="share_error" msgid="948429331673358107">"لا يمكن مشاركة جهة الاتصال هذه."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"الاسم"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"تم دمجها من <xliff:g id="COUNT">%0$d</xliff:g> من المصادر"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"غير ذلك"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"ضم جهات الاتصال"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"هل تريد ضم جهة الاتصال الحالية إلى جهة الاتصال المحددة؟"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"تعديل جهات الاتصال المحددة"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"هل تريد التبديل إلى تعديل جهة الاتصال المحددة؟ سيتم نسخ المعلومات التي أدخلتها حتى الآن."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"نسخ إلى جهات الاتصال الخاصة بي"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"إضافة إلى \"جهات الاتصال الخاصة بي\""</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"جارٍ التحميل…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"إنشاء جهة اتصال جديدة"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"تسجيل الدخول إلى حساب"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"استيراد جهات الاتصال من ملف"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"استيراد جهات الاتصال"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"إنشاء مجموعة جديدة"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[إنشاء مجموعة جديدة]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"حذف المجموعة"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"مجموعة واحدة"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> من المجموعات"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"تعيين كافتراضي"</string>
<string name="clear_default" msgid="7193185801596678067">"محو الإعدادات الافتراضية"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"تم نسخ النص"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"إلغاء التغييرات"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"هل تريد تجاهل التغييرات؟"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"إعداد الملف الشخصي"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"الاحتفاظ بها محليًا"</string>
<string name="add_account" msgid="8201790677994503186">"إضافة حساب"</string>
<string name="add_new_account" msgid="5748627740680940264">"إضافة حساب جديد"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"لم يتم إرسال المكالمة"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"رقم البريد الصوتي غير متاح"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"لم يتم إرسال المكالمة"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"لإعداد البريد الصوتي، انتقل إلى القائمة > الإعدادات."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"للاتصال بالبريد الصوتي، يجب أولاً إيقاف وضع الطائرة."</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 6441565..7d3c53c 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"Выклікаць <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Дадаць да любімых"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Выдаліць з Выбранага"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Рэдагаваць"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Прапанаваныя кантакты"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усе кантакты"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Кантакты аб\'яднаныя"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Выдаліць кантакт?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Устал. рынгтон"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Усе выклікі на гал. пошту"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Вы не можаце выдаляць кантакты з улiковых запiсаў толькі для чытання, але вы можаце хаваць іх у спісах кантактаў."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> хв. <xliff:g id="SECONDS">%s</xliff:g> с."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Частая сувязь"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Частыя званкi"</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="description_image_button_one" msgid="1740638037139856139">"адзін"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"два"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"мінус"</string>
<string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Прагледзець кантакт"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Назапашвальнік недаступны"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Няма SD-карты"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Назапашвальнiк не знойдзены."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"SD-карта не знойдзена"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Пошук файла vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Імпарт з SIM-карты"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Імпарт з назапашвальніка"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Экспарт на назапашвальнік"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Імпарт усіх файлаў vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Пошук дадзеных vCard на назапашвальніку..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Пошук дадзеных vCard на SD-карце..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Немагчыма сканаваць сховішча"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Немагчыма сканаваць SD-карту"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Не атрымалася праверыць назапашвальнiк. (Прычына: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Не атрымалася праверыць SD-карту. (Прычына: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Памылка ўводу/вываду"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Памылка запуску складальнiка файлаў vCard."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Немагчыма адкрыць файл \"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"Адмена імпарту vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Адмянiць iмпарт файла <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Адмена экспарту vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Адмянiць экспарт файла <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Немагчыма адмяніць імпарт/экспарт vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Імёны вашых кантактаў"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Паказаць кантакты"</string>
<string name="menu_import_export" msgid="26217871113229507">"Імпарт/экспарт"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Імпарт/экспарт кантактаў"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Імпартаваць кантакты"</string>
<string name="menu_share" msgid="943789700636542260">"Апублікаваць"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Усе кантакты"</string>
<string name="share_via" msgid="563121028023030093">"Апублікаваць кантакт з дапамогай"</string>
<string name="share_error" msgid="948429331673358107">"Нельга падзялiцца гэтым кантактам."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Імя"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"аб\'яднаныя з розных крыніц (<xliff:g id="COUNT">%0$d</xliff:g>)"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Іншае"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Аб\'яднаць кантакты"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Аб\'яднаць бягучы кантакт з выбраным кантактам?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Рэдагаваць выбраныя кантакты"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Пераключыцца ў рэжым рэдагавання выбранага кантакту? Інфармацыя, якую вы ўвялі да гэтага часу, будзе скапіявана."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Капіяваць у мае кантакты"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Дадаць да Маіх кантактаў"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Загрузка..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Стварыць новы кантакт"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Увайсці ва ўліковы запіс"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Імпартаваць кантакты з файла?"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Імпартаваць кантакты"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Стварыць новую групу"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Стварыць новую групу]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Выдаліць групу"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 група"</item>
<item quantity="other" msgid="1276758425904917367">"Груп: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Усталяваць па змаўчанні"</string>
<string name="clear_default" msgid="7193185801596678067">"Скінуць налады па змаўчанні"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Тэкст скапіяваны"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Скасаваць змены"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Адмяніць змены?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Наладзіць мой профіль"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Захоўваць лакальна"</string>
<string name="add_account" msgid="8201790677994503186">"Дадаць уліковы запіс"</string>
<string name="add_new_account" msgid="5748627740680940264">"Дадаць новы ўліковы запіс"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Выклік не зроблены"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Нумар галасавой пошты недаступны"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Выклік не зроблены"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Каб наладзіць галасавую пошту, націсніце \"Меню\" i перайдзiце ў налады."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Каб зрабiць выклік галасавой пошты, спачатку адключыце рэжым палёту."</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index ab14f83..42c71a8 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"Обаждане на <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Добавяне към предпочитани"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Премахване от любими"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Редактиране"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагани контакти"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Всички контакти"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Контактите са слети"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Да се изтрие ли контактът?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Мелодия: Задав."</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Всички обаждания до гл. поща"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Не можете да изтриете контакти от профили само за четене, но можете да ги скриете в списъците си с контакти."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често търсени"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Чести обаждания"</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="description_image_button_one" msgid="1740638037139856139">"едно"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"две"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"минус"</string>
<string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Преглед на контакта"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Няма хранилище"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Няма SD карта"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Не бе намерено хранилище."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Не бе намерена SD карта."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Търсене на vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Импортиране от SIM карта"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Импорт. от хранилището"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Експорт. в хранилището"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Импортиране на всички vCard файлове"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Търсят се данни за vCard в хранилището..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Търсят се данни за vCard в SD картата..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Хранилището не можа да бъде сканирано"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD картата не можа да бъде сканирана"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Хранилището не можа да бъде сканирано. (Причина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD картата не можа да бъде сканирана. (Причина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Създателят на vCard не се стартира правилно."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<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="cancel_import_confirmation_title" msgid="5578683596010294836">"Анулиране на импортирането на vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Да се анулира ли импортирането на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Анулиране на експортирането на vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Да се анулира ли експортирането на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Импорт./експорт. не можа да се анулира"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Имена на контактите ви"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за показване"</string>
<string name="menu_import_export" msgid="26217871113229507">"Импортиране/Експортиране"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Импортиране/Експортиране на контакти"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Импортиране на контактите"</string>
<string name="menu_share" msgid="943789700636542260">"Споделяне"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Всички контакти"</string>
<string name="share_via" msgid="563121028023030093">"Споделяне на контакт чрез"</string>
<string name="share_error" msgid="948429331673358107">"Този контакт не може да бъде споделен."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"обединено от <xliff:g id="COUNT">%0$d</xliff:g> източник/а"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Други"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Сливане на контакти"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Да се слее ли текущият контакт с избрания?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Редактиране на избраните контакти"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Да се превключи ли към редактиране на избрания контакт? Въведената досега информация ще бъде копирана."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Копиране в моите контакти"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Добавяне в „Моите контакти“"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Зарежда се…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Създаване на нов контакт"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Вход в профил"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Импортиране на контакти от файл"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Импортиране на контактите"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Създаване на нова група"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Създаване на нова група]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Изтриване на групата"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 група"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> групи"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Задаване като стандартна настройка"</string>
<string name="clear_default" msgid="7193185801596678067">"Изчистване на стандартната настройка"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текстът бе копиран"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Отхвърляне на промените"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Да се отхвърлят ли направените от вас промени?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Настройка на потребителския ми профил"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Съхраняване локално"</string>
<string name="add_account" msgid="8201790677994503186">"Добавяне на профил"</string>
<string name="add_new_account" msgid="5748627740680940264">"Добавяне на нов профил"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Обаждането не е извършено"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Номерът за гласова поща не е налице"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Обаждането не е извършено"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"За да настроите гласовата поща, отворете „Меню“ > „Настройки“."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"За да чуете гласовата си поща, първо изключете самолетния режим."</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 59127b0..3fff01d 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Cerca"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Contacte nou"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Visualitza el contacte"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Truca a <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Truca al <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Afegeix als preferits"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Elimina dels preferits"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Edita"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactes suggerits"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tots els contactes"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactes units"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Vols suprimir el contacte?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Est. to trucada"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Trucades a la bústia de veu"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"No pots suprimir cap contacte dels comptes de només lectura, però pots amagar-los a les llistes de contactes."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactats sovint"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Trucats sovint"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Addició d\'un contacte"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voleu afegir \"<xliff:g id="EMAIL">%s</xliff:g>\" als contactes?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"un"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dos"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"menys"</string>
<string name="description_plus_button" msgid="515164827856229880">"més"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Mostra el contacte"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Emmagatzematge no dispon."</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"No hi ha cap targeta SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"No s\'ha trobat emmagatzematge."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"No s\'ha trobat cap targeta SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"S\'està cercant la vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importa des de la targeta SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importa de l\'emmagatzematge"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exporta a emmagatzematge"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importa tots els fitxers vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"S\'estan cercant dades de vCard a l\'emmagatzematge..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"S\'estan cercant les dades de vCard a la targeta SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"No s\'ha pogut explorar l\'emmagatzematge"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"No s\'ha pogut explorar la targeta SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"No s\'ha pogut explorar l\'emmagatzematge. (Motiu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"No s\'ha pogut explorar la targeta SD. (Motiu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Error d\'E/S"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"No s\'ha iniciat correctament el creador de vCard."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No s\'ha pogut obrir \"<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> contactes"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Cancel·lació de la importació de la vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vols cancel·lar la importació de: <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Cancel·lació de l\'exportació de la vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vols cancel·lar l\'exportació de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"No es pot cancel·lar la imp./exp. vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Noms dels contactes"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contactes per mostrar"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importa/exporta"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importació/exportació de contactes"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importació de contactes"</string>
<string name="menu_share" msgid="943789700636542260">"Comparteix"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Tots els contactes"</string>
<string name="share_via" msgid="563121028023030093">"Comparteix el contacte mitjançant"</string>
<string name="share_error" msgid="948429331673358107">"No es pot compartir aquest contacte."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"combinat de <xliff:g id="COUNT">%0$d</xliff:g> fonts"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Altres"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Ajunta els contactes"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Vols ajuntar el contacte actual amb el contacte seleccionat?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Edita els contactes seleccionats"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vols canviar per editar el contacte seleccionat? Es copiarà la informació que hagis introduït fins ara."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copia a Els meus contactes"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Afegeix a Els meus contactes"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"S\'està carregant…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crea un contacte nou"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Inicia la sessió a un compte"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importa contactes d\'un fitxer"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importa contactes"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Creació d\'un grup nou"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Crea un grup nou]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Supressió d\'un grup"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"Un grup"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grups"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Predeterminat"</string>
<string name="clear_default" msgid="7193185801596678067">"Esborra els valors predeterminats"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copiat"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Descarta els canvis"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Vols descartar els canvis?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Configura el meu perfil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Conserva localment"</string>
<string name="add_account" msgid="8201790677994503186">"Afegeix un compte"</string>
<string name="add_new_account" msgid="5748627740680940264">"Afegeix un compte nou"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"No s\'ha enviat la trucada"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Número de la bústia de veu no disponible"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"No s\'ha enviat la trucada"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Per configurar la bústia de veu, vés a Menú > Configuració."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Per trucar al correu de veu, primer has de desactivar el mode d\'avió."</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 3846714..67ca859 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Hledat"</string>
<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_callNumber" msgid="997146291983360266">"Zavolat na číslo <xliff:g id="NUMBER">%s</xliff:g>"</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_editContact" msgid="9042415603857662633">"Upravit"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhované kontakty"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všechny kontakty"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakty byly spojeny"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Smazat kontakt?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nast. vyzvánění"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Všechny hovory do hlas. schr."</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Z účtů pouze pro čtení není možné kontakty mazat, můžete je však ve svých seznamech kontaktů skrýt."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Často používané kontakty"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Často volané"</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="description_image_button_one" msgid="1740638037139856139">"jedna"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dvě"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"mínus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Zobrazit kontakt"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Úložiště je nedostupné"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Žádná karta SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nebylo nalezeno žádné úložiště."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nebyla nalezena žádná karta SD"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Vyhledávání karty vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importovat z karty SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importovat z úložiště"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportovat do úložiště"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importovat všechny soubory vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Vyhledávání dat souboru vCard v úložišti..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Vyhledávání dat souboru vCard na kartě SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Úložiště se nepodařilo prohledat"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Kartu SD se nepodařilo prohledat"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Nepodařilo se naskenovat úložiště. (Důvod: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Nepodařilo se naskenovat kartu SD. (Důvod: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Chyba I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Editor souboru vCard nebyl správně spuštěn."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"Rušení importu souboru vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Zrušit import souboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Rušení exportu souboru vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Zrušit export souboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import/export vizitky vCard nelze zrušit"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Jména vašich kontaktů"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty k zobrazení"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importovat/Exportovat"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importovat nebo exportovat kontakty"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importovat kontakty"</string>
<string name="menu_share" msgid="943789700636542260">"Sdílet"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Všechny kontakty"</string>
<string name="share_via" msgid="563121028023030093">"Sdílet kontakt pomocí"</string>
<string name="share_error" msgid="948429331673358107">"Tento kontakt nelze sdílet."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Jméno"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"sloučeno ze <xliff:g id="COUNT">%0$d</xliff:g> zdrojů"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Ostatní"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Spojit kontakty"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Spojit aktuální kontakt s vybraným kontaktem?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Upravit vybrané kontakty"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Přepnout do režimu úpravy vybraného kontaktu? Doposud zadané informace budou zkopírovány."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Zkopírovat do kontaktů"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Přidat do skupiny Moje kontakty"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Načítá se..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Vytvořit nový kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Přihlásit se do účtu"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importovat kontakty ze souboru"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importovat kontakty"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Vytvořit novou skupinu"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Vytvořit novou skupinu]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Smazat skupinu"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 skupina"</item>
<item quantity="other" msgid="1276758425904917367">"Skupiny: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Výchozí nastavení"</string>
<string name="clear_default" msgid="7193185801596678067">"Vymazat výchozí nastavení"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text zkopírován"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Zrušit změny"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Zrušit změny?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Nastavit profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Zachovat jako místní"</string>
<string name="add_account" msgid="8201790677994503186">"Přidat účet"</string>
<string name="add_new_account" msgid="5748627740680940264">"Přidat nový účet"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Hovor nebyl odeslán"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Číslo hlasové schránky není dostupné"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Hovor nebyl odeslán"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Chcete-li nastavit hlasovou schránku, přejděte do části Menu > Nastavení."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Chcete-li volat hlasovou schránku, nejdříve vypněte režim V letadle."</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 85bdd00..bf2b568 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Søg"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Ny kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Vis kontakt"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Ring til <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Ring til <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Rediger"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Foreslåede kontakter"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Tilføjede kontakter"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Slet kontaktperson?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Indstil ringetone"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle opkald til telefonsvareren"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Du kan ikke slette kontaktpersoner fra skrivebeskyttede konti, men du kan skjule dem på listerne over dine kontaktpersoner."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Jævnligt kontaktet"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Ofte ringet til"</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 kontaktpersoner?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"et"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"to"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Vis kontaktperson"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Lager ikke tilgængeligt"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Der er intet SD-kort"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Intet lager blev fundet."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Ingen SD-kort fundet."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Søger efter vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importer fra SIM-kort"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importer fra lager"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Eksporter til lager"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importer alle VCard-filer"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Søger efter vCard-data på lager..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Søger efter vCard-data på SD-kortet..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Lagring kunne ikke scannes"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD-kortet kunne ikke scannes"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Lageret kunne ikke scannes. (Årsag: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD-kortet kunne ikke scannes. (Årsag: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fejl"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Oprettelsen af vCard startede ikke korrekt."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"Annullerer import af vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vil du annullere import af <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Annullerer eksport af vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vil du annullere eksport af <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import/eksport af vCard kunne ikke annulleres"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Navne på dine kontakter"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakter, der skal vises"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importer og eksporter"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Import/eksport kontakter"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importer kontaktpersoner"</string>
<string name="menu_share" msgid="943789700636542260">"Del"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Alle kontaktpersoner"</string>
<string name="share_via" msgid="563121028023030093">"Del kontakt via"</string>
<string name="share_error" msgid="948429331673358107">"Denne kontaktperson kan ikke deles."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Navn"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"flettet fra <xliff:g id="COUNT">%0$d</xliff:g> kilder"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Andre"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Saml kontaktpersoner"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Forbind den aktuelle kontaktperson med den valgte kontaktperson?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Rediger valgte kontaktpersoner"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vil du redigere den valgte kontaktperson? Dine indtastninger kopieres."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopier til Mine kontaktpersoner"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Føj til mine kontaktpersoner"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Indlæser…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Opret ny kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Log ind på en konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importer kontrakter fra en fil"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer kontaktpersoner"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Opret en ny gruppe"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Opret en ny gruppe]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Slet gruppe"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 gruppe"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupper"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Indstil standard"</string>
<string name="clear_default" msgid="7193185801596678067">"Ryd standarder"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Kopieret tekst"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Kasser ændringer"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Skal ændringerne slettes?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Opret min profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Gem lokalt"</string>
<string name="add_account" msgid="8201790677994503186">"Tilføj konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Tilføj ny konto"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Opkaldet blev ikke sendt"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Nummer til telefonsvarer utilgængeligt"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Opkaldet blev ikke sendt"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Hvis du vil konfigurere telefonsvareren, skal du gå til Menu > Indstillinger."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Hvis du vil ringe til telefonsvareren, skal du først slå Flytilstand fra."</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 704ccae..57a48bc 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -41,7 +41,7 @@
<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_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> wählen"</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_editContact" msgid="9042415603857662633">"Bearbeiten"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Vorgeschlagene Kontakte"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle Kontakte"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakte wurden verknüpft."</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Kontakt löschen?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Klingeltonwahl"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle Anrufe an Mailbox"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Sie können keine Kontakte aus schreibgeschützten Konten löschen. Sie können sie aber in Ihren Kontaktlisten ausblenden."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> Minuten, <xliff:g id="SECONDS">%s</xliff:g> Sekunden"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Häufig kontaktiert"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Häufig angerufen"</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="description_image_button_one" msgid="1740638037139856139">"eins"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"zwei"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Kontakt anzeigen"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Kein Speicher verfügbar"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Keine SD-Karte"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Kein Speicher gefunden"</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Keine SD-Karte gefunden"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCard wird gesucht."</string>
<string name="import_from_sim" msgid="3859272228033941659">"Von SIM-Karte importieren"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Aus Speicher importieren"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"In Speicher exportieren"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Alle vCard-Dateien importieren"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Suche nach vCard-Daten im Speicher..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Suche nach vCard-Daten auf der SD-Karte..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Scannen des Speichers nicht möglich"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Scannen der SD-Karte nicht möglich"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Der Speicher konnte nicht gelesen werden. (Grund: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Die SD-Karte konnte nicht gelesen werden. (Grund: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"E/A-Fehler"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Das Programm zum Erstellen der vCard wurde nicht richtig gestartet."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"vCard-Import wird abgebrochen."</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Import von <xliff:g id="FILENAME">%s</xliff:g> abbrechen?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCard-Export wird abgebrochen."</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Export von <xliff:g id="FILENAME">%s</xliff:g> abbrechen?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard-Import/-Export nicht abgebrochen"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Namen meiner Kontakte"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakte zum Anzeigen"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importieren/Exportieren"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Import/Export von Kontakten"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Kontakte importieren"</string>
<string name="menu_share" msgid="943789700636542260">"Teilen"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Alle Kontakte"</string>
<string name="share_via" msgid="563121028023030093">"Kontakt teilen über"</string>
<string name="share_error" msgid="948429331673358107">"Dieser Kontakt kann nicht geteilt werden."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"aus <xliff:g id="COUNT">%0$d</xliff:g> Quellen zusammengeführt"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Sonstige"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Kontakte zusammenführen"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Aktuellen Kontakt mit ausgewähltem Kontakt zusammenführen?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Ausgewählte Kontakte bearbeiten"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Zur Bearbeitung des ausgewählten Kontakts wechseln? Die bisher eingegebenen Informationen werden kopiert."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"In meine Kontakte kopieren"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Zu meinen Kontakten hinzufügen"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Wird geladen…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Neuen Kontakt erstellen"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"In einem Konto anmelden"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Kontakte aus einer Datei importieren"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kontakte importieren"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Neue Gruppe erstellen"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Neue Gruppe erstellen]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Gruppe löschen"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 Gruppe"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> Gruppen"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Als Standard festlegen"</string>
<string name="clear_default" msgid="7193185801596678067">"Als Standard löschen"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text kopiert"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Änderungen verwerfen"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Sollen die Änderungen verworfen werden?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Mein Profil einrichten"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Lokal speichern"</string>
<string name="add_account" msgid="8201790677994503186">"Konto hinzufügen"</string>
<string name="add_new_account" msgid="5748627740680940264">"Neues Konto hinzufügen"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Anruf nicht verbunden"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Mailbox-Nummer nicht verfügbar"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Anruf nicht verbunden"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Konfigurieren Sie Ihre Mailbox unter \"Menü\" > \"Einstellungen\"."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Deaktivieren Sie zunächst den Flugmodus, um die Mailbox anzurufen."</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 15b7b91..b6c3dda 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"Κλήση του αριθμού <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Προσθήκη στα αγαπημένα"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Κατάργηση από τα αγαπημένα"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Επεξεργασία"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Προτεινόμενες επαφές"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Όλες οι επαφές"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Οι επαφές συνδέθηκαν"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Διαγραφή επαφής;"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Ήχος κλήσης"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Κλήσεις στον τηλεφωνητή"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Δεν μπορείτε να διαγράψετε επαφές από λογαριασμούς οι οποίοι προορίζονται μόνο για ανάγνωση, αλλά μπορείτε να τις αποκρύψετε στις λίστες επαφών σας."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> λεπτά <xliff:g id="SECONDS">%s</xliff:g> δευτερόλεπτα"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Επαφές που έχετε συχνή επικοινωνία"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Συχνές κλήσεις"</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="description_image_button_one" msgid="1740638037139856139">"ένα"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"δύο"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"μείον"</string>
<string name="description_plus_button" msgid="515164827856229880">"συν"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Προβολή επαφής"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Μη διαθέσιμος χώρος αποθ."</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Δεν υπάρχει κάρτα SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Δεν βρέθηκε χώρος αποθήκευσης."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Δεν βρέθηκε κάρτα SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Αναζήτηση κάρτας vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Εισαγωγή από κάρτα SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Εισαγωγή από τον χώρο αποθ."</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Εξαγωγή στον χώρο αποθ."</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Εισαγωγή όλων των αρχείων vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Αναζήτηση δεδομένων vCard στον χώρο αποθήκευσης..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Αναζήτηση για δεδομένα vCard στην κάρτα SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Δεν ήταν δυνατή η σάρωση του χώρου αποθήκευσης"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Δεν ήταν δυνατή η σάρωση της κάρτας SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Δεν ήταν δυνατή η σάρωση του χώρου αποθήκευσης. (Αιτία: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Δεν ήταν δυνατή η σάρωση της κάρτας SD. (Αιτία: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Σφάλμα I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Η έναρξη της vCard δεν ήταν σωστή."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Δεν ήταν δυνατό το άνοιγμα του αρχείου \"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"Ακύρωση εισαγωγής της vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Να ακυρωθεί η εισαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g>;"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Ακύρωση εξαγωγής της vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Να ακυρωθεί η εξαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g>;"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Αδ.ακύρ.εισαγ./εξαγ.vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Ονόματα ων επαφών σας"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Επαφές για εμφάνιση"</string>
<string name="menu_import_export" msgid="26217871113229507">"Εισαγωγή/Εξαγωγή"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Εισαγωγή/Εξαγωγή επαφών"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Εισαγωγή επαφών"</string>
<string name="menu_share" msgid="943789700636542260">"Κοινή χρήση"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Όλες οι επαφές"</string>
<string name="share_via" msgid="563121028023030093">"Κοινή χρήση μέσω"</string>
<string name="share_error" msgid="948429331673358107">"Δεν είναι δυνατή η κοινή χρήση αυτής της επαφής."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Όνομα"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"συγχώνευση από <xliff:g id="COUNT">%0$d</xliff:g> προελεύσεις"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Άλλο"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Ένωση επαφών"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Να γίνει ένωση της τρέχουσας επαφής με την επιλεγμένη επαφή;"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Επεξεργασία επιλεγμένων επαφών"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Να γίνει μετάβαση σε επεξεργασία της επιλεγμένης επαφής; Θα γίνει αντιγραφή των στοιχείων που έχετε εισαγάγει μέχρι τώρα."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Αντιγραφή στις Επαφές μου"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Προσθήκη στις Επαφές μου"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Φόρτωση…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Δημιουργία νέας επαφής"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Σύνδεση σε έναν λογαριασμό"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Εισαγωγή επαφών από ένα αρχείο"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Εισαγωγή επαφών"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Δημιουργία νέας ομάδας"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Δημιουργία νέας ομάδας]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Διαγραφή ομάδας"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 ομάδα"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ομάδες"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Ορισμός ως προεπιλογή"</string>
<string name="clear_default" msgid="7193185801596678067">"Εκκαθάριση προεπιλεγμένων"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Το κείμενο αντιγράφηκε"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Απόρριψη αλλαγών"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Να απορριφθούν οι αλλαγές σας;"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Ρύθμιση του προφίλ μου"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Αποθήκευση τοπικά"</string>
<string name="add_account" msgid="8201790677994503186">"Προσθήκη λογαριασμού"</string>
<string name="add_new_account" msgid="5748627740680940264">"Προσθήκη νέου λογαριασμού"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Η κλήση δεν πραγματοποιήθηκε."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Μη διαθέσιμος αριθμός αυτόμ. τηλεφωνητή"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Η κλήση δεν πραγματοποιήθηκε"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Για τη r;yumish του αυτόματου τηλεφωνητή, μεταβείτε στο στοιχείο Μενού > Ρυθμίσεις."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Για κλήση αυτόματου τηλεφωνητή, πρώτα απενεργοποιήστε τη λειτουργία πτήσης."</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 72a67b3..ff97f51 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Search"</string>
<string name="menu_newContact" msgid="1209922412763274638">"New contact"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"View contact"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Call <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Add to favourites"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remove from favourites"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacts joined"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Delete contact?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Set ringtone"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"All calls to voicemail"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"You can\'t delete contacts from read-only accounts, but you can hide them in your contacts lists."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> mins <xliff:g id="SECONDS">%s</xliff:g> secs"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frequently contacted"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Frequently called"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Add contact"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Add \"<xliff:g id="EMAIL">%s</xliff:g>\" to contacts?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"one"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"two"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"View contact"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Storage unavailable"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"No SD card"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"No storage was found."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"No SD card was found."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Searching for vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Import from SIM card"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Import from storage"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Export to storage"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Import all vCard files"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Searching for vCard data in storage…"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Searching for vCard data on SD card"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Couldn\'t scan storage"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Couldn\'t scan SD card"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"The storage couldn\'t be scanned. (Reason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"The SD card couldn\'t be scanned. (Reason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O error"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"The vCard composer didn\'t start properly."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<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> of <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Cancelling vCard import"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancel import of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Cancelling vCard export"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancel export of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Couldn\'t cancel vCard import/export"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Names of your contacts"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts to display"</string>
<string name="menu_import_export" msgid="26217871113229507">"Import/export"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Import/export contacts"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Import contacts"</string>
<string name="menu_share" msgid="943789700636542260">"Share"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"All contacts"</string>
<string name="share_via" msgid="563121028023030093">"Share contact via"</string>
<string name="share_error" msgid="948429331673358107">"This contact can\'t be shared."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"merged from <xliff:g id="COUNT">%0$d</xliff:g> sources"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Other"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Join contacts"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Join the current contact with the selected contact?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Edit selected contacts"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Switch to editing the selected contact? Information that you\'ve entered so far will be copied."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copy to My Contacts"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Add to My Contacts"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Loading…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Create a new contact"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Sign in to an account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Import contacts from a file"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import contacts"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Create new group"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Create new group]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Delete group"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 group"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groups"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Set default"</string>
<string name="clear_default" msgid="7193185801596678067">"Clear default"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copied"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Discard changes"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Discard your changes?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Set up my profile"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Keep locally"</string>
<string name="add_account" msgid="8201790677994503186">"Add account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Add new account"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Call not sent."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Voicemail number unavailable"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Call not sent"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"To set up voicemail, go to Menu > Settings."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"To call voicemail, first turn off Airplane mode."</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index edb441d..35bee7f 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Buscar"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nuevo contacto"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Llamar al <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Editar"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Unión de contactos"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"¿Eliminar contacto?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Establecer tono"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Llamadas al buzón de voz"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"No puedes eliminar contactos de cuentas de solo lectura, pero puedes ocultarlos en tus listas de contactos."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> seg."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactado con frecuencia"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Llamados 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="description_image_button_one" msgid="1740638037139856139">"uno"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dos"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"menos"</string>
<string name="description_plus_button" msgid="515164827856229880">"más"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Ver contacto"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"No se dispone de espacio de almacenamiento."</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"No hay tarjeta SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"No se encontró almacenamiento."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"No se encontró una tarjeta SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Buscando vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar de la tarjeta SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importar desde el almacenamiento"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportar al almacenamiento"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos los archivos de vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Buscando datos de vCard en el almacenamiento..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Buscando datos de vCard en la tarjeta SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"No se pudo explorar el almacenamiento."</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"No se pudo explorar la tarjeta SD."</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"No se pudo examinar el almacenamiento. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")."</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"No se pudo examinar la tarjeta SD. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Error de E/S"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"El compositor de la vCard no se inició correctamente."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"Cancelación de importación de vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"¿Deseas cancelar la importación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Cancelación de exportación de vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"¿Deseas cancelar la exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"No se canceló la impor./expor. de vCard."</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos para mostrar"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importar/Exportar"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Imp./exp. contactos"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importar contactos"</string>
<string name="menu_share" msgid="943789700636542260">"Compartir"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Todos los contactos"</string>
<string name="share_via" msgid="563121028023030093">"Compartir un contacto a través de"</string>
<string name="share_error" msgid="948429331673358107">"No es posible compartir este contacto."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nombre"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"combinado a partir de fuentes <xliff:g id="COUNT">%0$d</xliff:g>"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Otro"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Agrupar contactos"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"¿Deseas agrupar el contacto actual con el contacto seleccionado?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Modificar contactos seleccionados"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"¿Optar por modificar contacto seleccionado? Se copiará la información que ingresaste hasta ahora."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copiar en Mis contactos"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Agregar a Mis contactos"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear un contacto nuevo"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Accede a una cuenta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importar contactos desde un archivo"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Crear grupo nuevo"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Crear grupo nuevo]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Eliminar grupo"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupo"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Establecer como predeterminado"</string>
<string name="clear_default" msgid="7193185801596678067">"Eliminar predeterminado"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Descartar cambios"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"¿Deseas descartar los cambios?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Configurar mi perfil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Guardar localmente"</string>
<string name="add_account" msgid="8201790677994503186">"Agregar una cuenta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Agregar una cuenta nueva"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"No se realizó la llamada."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Número de buzón de voz no disponible"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"No se realizó la llamada."</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Para configurar el buzón de voz, ve a a Menú > Configuración."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Para escuchar los mensajes de tu buzón de voz, desactiva primero el modo de avión."</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 0f06f92..5e0fd4d 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Buscar"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Contacto nuevo"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Llamar a <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Editar"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactos agrupados"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"¿Eliminar contacto?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Establecer tono"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Llamadas al buzón de voz"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"No puedes eliminar los contactos procedentes de las cuentas de solo lectura, pero puedes ocultarlos en las listas de contactos."</string>
@@ -186,7 +185,6 @@
<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="favoritesFrequentContacted" msgid="6184232487472425690">"Contactos frecuentes"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Más llamados"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Añadir contacto"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Quieres añadir \"<xliff:g id="EMAIL">%s</xliff:g>\" a Contactos?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"uno"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dos"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"menos"</string>
<string name="description_plus_button" msgid="515164827856229880">"más"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Ver contacto"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Almacenamiento no disponible"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Falta la tarjeta SD."</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"No hay ningún almacenamiento."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"No se ha detectado ninguna tarjeta SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Buscando vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar contactos desde la tarjeta SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importar de USB"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportar a almacenamiento"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos los archivos de vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Buscando datos de vCard en el almacenamiento..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Buscando datos de vCard en la tarjeta SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"No se ha podido analizar el almacenamiento."</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"No se ha podido analizar la tarjeta SD."</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"No se ha podido analizar el almacenamiento (motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")."</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"No se ha podido analizar la tarjeta SD (motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")."</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Error de E/S"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"El redactor de vCard no se ha iniciado correctamente."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"Cancelando importación de vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"¿Seguro que quieres cancelar la importación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Cancelando exportación de vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"¿Seguro que quieres cancelar la exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Error al cancelar la importación/exportación de vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos que mostrar"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importar/exportar"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importar/exportar contactos"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importar contactos"</string>
<string name="menu_share" msgid="943789700636542260">"Compartir"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Todos los contactos"</string>
<string name="share_via" msgid="563121028023030093">"Compartir contacto a través de"</string>
<string name="share_error" msgid="948429331673358107">"No se puede compartir este contacto."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nombre"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"fusionados desde <xliff:g id="COUNT">%0$d</xliff:g> fuentes"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Otro"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Agrupar contactos"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"¿Quieres agrupar el contacto actual con el contacto seleccionado?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Editar contactos seleccionados"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"¿Quieres editar el contacto seleccionado? Se copiará la información que hayas introducido hasta el momento."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copiar en mis contactos"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Añadir a Mis contactos"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear contacto nuevo"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Acceder a una cuenta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importar contactos de un archivo"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Crear grupo nuevo"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Crear grupo nuevo]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Eliminar grupo"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"Un grupo"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Establecer como predeterminado"</string>
<string name="clear_default" msgid="7193185801596678067">"Borrar predeterminado"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Descartar cambios"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"¿Seguro que quieres descartar los cambios?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Configurar mi perfil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Guardar localmente"</string>
<string name="add_account" msgid="8201790677994503186">"Añadir cuenta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Añadir una cuenta nueva"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Llamada no enviada"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Número del buzón de voz no disponible"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Llamada no enviada"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Para configurar el buzón de voz, toca la tecla de menú y, a continuación, toca Ajustes."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Para llamar al buzón de voz, debes desactivar el modo avión."</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 087fb7a..566d9a3 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Otsing"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Uus kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Kuva kontakt"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Helista kasutajale <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Helistage: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Lisa lemmikutesse"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eemalda lemmikutest"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Muuda"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Soovitatud kontaktid"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kõik kontaktid"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontaktid ühendatud"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Kustutada kontakt?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Määrake helin"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Kõik kõned kõneposti"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Te ei saa kontakte kirjutuskaitstud kontodest kustutada, kuid saate need oma kontaktide loendis peita."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sageli valitud kontaktid"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Sageli valitud üksus"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Lisa kontakt"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Kas lisada „<xliff:g id="EMAIL">%s</xliff:g>” kontaktidesse?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"üks"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"kaks"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"miinus"</string>
<string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Vaadake kontakti"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Mäluseade pole saadaval"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"SD-kaart puudub"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Mäluruumi ei leitud."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"SD-kaarti ei leitud."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCardi otsimine"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Impordi SIM-kaardilt"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Impordi mäluseadmest"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Ekspordi mäluseadmesse"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Impordi kõik vCardi failid"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Mäluruumist vCardi andmete otsimine ..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"SD-kaardilt vCardi andmete otsimine ..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Mäluseadme skaneering ebaõnnestus"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD-kaardi skaneering ebaõnnestus"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Mäluruumi ei saa kontrollida. (Põhjus: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD-kaarti ei saa kontrollida. (Põhjus: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O viga"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCardi helilooja ei käivitunud korralikult."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Faili „<xliff:g id="FILE_NAME">%s</xliff:g>” ei saa avada: <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> kontaktist"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"vCardi importimise tühistamine"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Kas tühistada faili <xliff:g id="FILENAME">%s</xliff:g> importimine?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCardi eksportimise tühistamine"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kas tühistada faili <xliff:g id="FILENAME">%s</xliff:g> eksportimine?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardi impordi/ekspordi tühist. ebaõnn."</string>
<string name="search_settings_description" msgid="2675223022992445813">"Teie kontaktide nimed"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kuvatavad kontaktisikud"</string>
<string name="menu_import_export" msgid="26217871113229507">"Import/eksport"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Kontaktide import/eksport"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Kontaktide importimine"</string>
<string name="menu_share" msgid="943789700636542260">"Jaga"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Kõik kontaktid"</string>
<string name="share_via" msgid="563121028023030093">"Kontakti jagamisvalikud"</string>
<string name="share_error" msgid="948429331673358107">"Seda kontakti ei saa jagada."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nimi"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"ühendati <xliff:g id="COUNT">%0$d</xliff:g> allikast"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Muu"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Kontaktide ühendamine"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Kas ühendada praegune kontakt valitud kontaktiga?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Valitud kontaktide muutmine"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Kas lülituda valitud kontakti muutmisse? Seni sisestatud andmed kopeeritakse."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopeeri valikusse Minu kontaktid"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Lisa lehele Minu kontaktid"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Laadimine ..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Loo uus kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Logi kontole sisse"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Impordi kontaktid failist"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Impordi kontaktid"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Uue grupi loomine"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Uue grupi loomine]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Grupi kustutamine"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupp"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> rühma"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Määra vaikeseadeks"</string>
<string name="clear_default" msgid="7193185801596678067">"Kustuta vaikeseaded"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst on kopeeritud"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Loobu muudatustest"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Kas loobute oma muudatustest?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Minu profiili seadistamine"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Hoia kohalikuna"</string>
<string name="add_account" msgid="8201790677994503186">"Lisa konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Lisa uus konto"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Kõnet ei tehtud"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Kõneposti number pole saadaval"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Kõnet ei tehtud"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Kõneposti seadistamiseks minge valikusse Menüü > Seaded."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Kõneposti kuulamiseks lülitage lennurežiim välja."</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 2bacc4e..8295c67 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"تماس با <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"افزودن به موارد دلخواه"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"حذف از موارد دلخواه"</string>
<string name="menu_editContact" msgid="9042415603857662633">"ویرایش"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مخاطبین پیشنهادی"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"همه مخاطبین"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"مخاطبین ملحق شده"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"مخاطب حذف شود؟"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"تنظیم آهنگ زنگ"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"همه تماسها به پست صوتی"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"شما نمیتوانید مخاطبین را از حسابهای فقط خواندنی حذف کنید اما میتوانید آنها را در لیستهای مخاطبین خود پنهان کنید."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه و <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"اغلب تماس گرفته شده"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"اغلب به نام"</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="description_image_button_one" msgid="1740638037139856139">"یک"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"دو"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"منها"</string>
<string name="description_plus_button" msgid="515164827856229880">"به اضافه"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"مشاهده مخاطب"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"حافظه در دسترس نیست"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"کارت SD موجود نیست"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"هیچ دستگاه ذخیرهای یافت نشد."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"کارت SD یافت نشد."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"جستجوی کارت ویزیت"</string>
<string name="import_from_sim" msgid="3859272228033941659">"وارد کردن از سیم کارت"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"وارد کردن از حافظه"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"صادر کردن به حافظه"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"وارد کردن همه فایل های کارت ویزیت"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"جستجوی داده کارت ویزیت در دستگاه ذخیره..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"درحال جستجوی دادههای کارت ویزیت در کارت SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"اسکن کردن محل ذخیره ممکن نیست"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"اسکن کارت SD ممکن نیست"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"دستگاه ذخیره نمیتواند بررسی شود. (علت: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"کارت SD نمیتواند بررسی شود. (علت: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"خطای ورودی/خروجی"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"سازنده فایل کارت ویزیت به درستی اجرا نشد."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"لغو وارد کردن کارت ویزیت"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"وارد کردن <xliff:g id="FILENAME">%s</xliff:g> لغو شود؟"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"لغو صادر کردن کارت ویزیت"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"صادر کردن <xliff:g id="FILENAME">%s</xliff:g> لغو شود؟"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"نمیتوان وارد کردن/ صادر کردن کارت ویزیت را لغو کرد"</string>
<string name="search_settings_description" msgid="2675223022992445813">"نام های مخاطبین شما"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"مخاطبین جهت نمایش"</string>
<string name="menu_import_export" msgid="26217871113229507">"وارد کردن/صادر کردن"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"وارد کردن/صادر کردن مخاطبین"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"وارد کردن مخاطبین"</string>
<string name="menu_share" msgid="943789700636542260">"اشتراک گذاری"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"همه مخاطبین"</string>
<string name="share_via" msgid="563121028023030093">"اشتراک گذاری مخاطب از طریق"</string>
<string name="share_error" msgid="948429331673358107">"این مخاطب قابل اشتراکگذاری نیست."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"نام"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"ادغام شده از منابع <xliff:g id="COUNT">%0$d</xliff:g>"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"سایر موارد"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"پیوستن به مخاطبین"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"پیوستن به مخاطب فعلی با مخاطب انتخابی؟"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"ویرایش محتویات انتخابی"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"به ویرایش مخاطب انتخابی می روید؟ اطلاعاتی که تا حال وارد کرده اید کپی خواهد شد."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"کپی در مخاطبین من"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"افزودن به مخاطبین من"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"درحال بارگیری..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ایجاد مخاطب جدید"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"وارد شدن به یک حساب"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"وارد کردن مخاطبین از یک فایل"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"وارد کردن مخاطبین"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"ایجاد گروه جدید"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[ایجاد گروه جدید]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"حذف گروه"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 گروه"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> گروه"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"تنظیم پیش فرض"</string>
<string name="clear_default" msgid="7193185801596678067">"پاک کردن پیش فرضها"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"متن کپی شده"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"صرفنظر از تغییرات"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"از تغییرات شما صرفنظر شود؟"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"راهاندازی نمایه من"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"ذخیره بصورت محلی"</string>
<string name="add_account" msgid="8201790677994503186">"افزودن حساب"</string>
<string name="add_new_account" msgid="5748627740680940264">"اافزودن حساب جدید"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"تماس ارسال نشد"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"شماره پست صوتی در دسترس نیست"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"تماس ارسال نشد"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"برای راهاندازی پست صوتی به منو > تنظیمات بروید."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"برای تماس با پست صوتی، ابتدا حالت هواپیما را غیرفعال کنید."</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 33db52f..e451f9b 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Haku"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Uusi yhteystieto"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Näytä yhteystieto"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Soita: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Soita <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Lisää suosikkeihin"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Poista suosikeista"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Muokkaa"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ehdotetut yhteystiedot"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kaikki yhteystiedot"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Yhteystiedot yhdistetty"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Poista yhteystieto?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Aseta soittoääni"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Kaikki puhelut vastaajaan"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Et voi poistaa yhteystietoja vain luku -tilassa olevista tileistä. Voit kuitenkin piilottaa yhteystietoja yhteystietoluetteloissasi."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Usein käytetyt"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Soitettu usein"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Lisää yhteystieto"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Lisätäänkö <xliff:g id="EMAIL">%s</xliff:g> yhteystietoihin?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"yksi"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"kaksi"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"miinus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Näytä yhteystieto"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Tallennustila ei käytettävissä"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Ei SD-korttia"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Tallennustilaa ei löydy."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"SD-korttia ei löydy."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Etsitään vCardia"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Tuo SIM-kortilta"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Tuo tallennustilasta"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Vie tallennustilaan"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Tuo kaikki vCard-tiedostot"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Etsitään vCard-tietoja tallennustilasta..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Etsitään vCard-tietoja SD-kortilta..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Tallennustilan luku epäonnistui."</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD-korttia ei voi lukea."</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Tallennustilan luku epäonnistui. (Syy: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD-korttia ei voi lukea. (Syy: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-virhe"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard-luonti ei käynnistynyt oikein."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tiedostoa \"<xliff:g id="FILE_NAME">%s</xliff:g>\" ei voi avata: <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> yhteystietoa"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Peruutetaan vCardin tuontia"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Peruuta kohteen <xliff:g id="FILENAME">%s</xliff:g> tuonti?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Peruutetaan vCardin vientiä"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Peruuta kohteen <xliff:g id="FILENAME">%s</xliff:g> vienti?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardin tuonnin/viennin peruutus epäonn."</string>
<string name="search_settings_description" msgid="2675223022992445813">"Yhteystietojen nimet"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Näytettävät yhteystiedot"</string>
<string name="menu_import_export" msgid="26217871113229507">"Tuo/Vie"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Tuo/Vie yhteystietoja"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Tuo yhteystietoja"</string>
<string name="menu_share" msgid="943789700636542260">"Jaa"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Kaikki kontaktit"</string>
<string name="share_via" msgid="563121028023030093">"Jaa yhteystieto"</string>
<string name="share_error" msgid="948429331673358107">"Tätä yhteystietoa ei voi jakaa."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nimi"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"yhdistetty <xliff:g id="COUNT">%0$d</xliff:g> lähteestä"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Muu"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Yhdistä yhteystiedot"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Yhdistetäänkö nykyiset yhteystiedot valittujen yhteystietojen kanssa?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Muokkaa valittuja yhteystietoja"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Haluatko muokata valittuja yhteystietoja? Antamasi tiedot kopioidaan."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopioi yhteystietoihini"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Lisää kontakteihin"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Ladataan..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Luo uusi yhteystieto"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Kirjaudu tiliin"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Tuo yhteystietoja tiedostosta"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Tuo yhteystietoja"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Luo uusi ryhmä"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Luo uusi ryhmä]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Poista ryhmä"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 ryhmä"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> ryhmää"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Aseta oletukseksi"</string>
<string name="clear_default" msgid="7193185801596678067">"Poista oletus"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teksti kopioitu"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Hylkää muutokset"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Hylätäänkö muutokset?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Luo profiili"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Säilytä paikallisena"</string>
<string name="add_account" msgid="8201790677994503186">"Lisää tili"</string>
<string name="add_new_account" msgid="5748627740680940264">"Lisää uusi tili"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Puhelua ei soitettu."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Vastaajan numero ei saatavilla"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Puhelua ei soitettu"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Määritä puhelinvastaajan asetukset kohdassa Valikko > Asetukset."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Poista lentokonetila käytöstä ennen vastaajaan soittamista."</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 98ce13e..ff02563 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Rechercher"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nouveau contact"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Afficher le contact"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Appeler <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Appeler le <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Modifier"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts suggérés"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tous les contacts"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacts joints"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Supprimer contact ?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Régler sonnerie"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tous appels vers messag. voc."</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Impossible de supprimer les contacts des comptes en lecture seule. Vous pouvez les masquer dans la liste des contacts."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> mn <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contacts fréquents"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Appels fréquents"</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="description_image_button_one" msgid="1740638037139856139">"un"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"deux"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"moins"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Afficher le contact"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Mémoire non disponible"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Aucune carte SD trouvée"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Aucune mémoire stock. trouvée."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Aucune carte SD détectée."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Recherche des données VCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importer à partir de la carte SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importer depuis mémoire"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exporter vers la mémoire"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importer tous les fichiers vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Recherche de données vCard dans la mémoire de stockage…"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Recherche de données vCard sur la carte SD…"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Impossible d\'analyser la mémoire de stockage"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Impossible d\'analyser la carte SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Impossible d\'explorer la mémoire de stockage pour la raison suivante : <xliff:g id="FAIL_REASON">%s</xliff:g>."</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Impossible d\'explorer la carte SD pour la raison suivante : <xliff:g id="FAIL_REASON">%s</xliff:g>."</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Erreur d\'E/S."</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Le système de composition vCard n\'a pas démarré correctement."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Impossible d\'ouvrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\" pour la raison suivante : <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="cancel_import_confirmation_title" msgid="5578683596010294836">"Annulation importation fichier vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Annuler l\'importation de \"<xliff:g id="FILENAME">%s</xliff:g>\" ?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Annulation exportation fichier vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annuler l\'exportation de \"<xliff:g id="FILENAME">%s</xliff:g>\" ?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Impossible annuler import./export. vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts à afficher"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importer/Exporter"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Import/Export contacts"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importer des contacts"</string>
<string name="menu_share" msgid="943789700636542260">"Partager"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Tous les contacts"</string>
<string name="share_via" msgid="563121028023030093">"Partager contact via"</string>
<string name="share_error" msgid="948429331673358107">"Impossible de partager ce contact."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"1 contact fusionné à partir de <xliff:g id="COUNT">%0$d</xliff:g> sources"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Autre"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Joindre les contacts"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Associer ce contact au contact sélectionné ?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Modifier les contacts sélectionnés"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Modifier le contact sélectionné ? Les informations saisies jusqu\'ici seront copiées."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copier dans \"Mes contacts\""</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Ajouter à \"Mes contacts\""</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Chargement…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Créer un contact"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Se connecter à un compte"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importer les contacts d\'un fichier"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer des contacts"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Créer un groupe"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Créer un groupe]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Supprimer le groupe"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"Un groupe"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groupes"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Définir par défaut"</string>
<string name="clear_default" msgid="7193185801596678067">"Effacer les valeurs par défaut"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texte copié"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Supprimer les modifications"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Annuler les modifications ?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g> "</string>
<string name="profile_display_name" msgid="4127389543625918771">"Configurer mon profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Enregistrer localement"</string>
<string name="add_account" msgid="8201790677994503186">"Ajouter un compte"</string>
<string name="add_new_account" msgid="5748627740680940264">"Ajouter un compte"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Appel non effectué"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Messagerie vocale indisponible"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Appel non effectué."</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Pour configurer la messagerie vocale, accédez à Menu > Paramètres."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Veuillez désactiver le mode Avion avant d\'appeler la messagerie vocale."</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 5690338..c5d97c6 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> पर कॉल करें"</string>
<string name="menu_addStar" msgid="2908478235715404876">"पसंदीदा में जोड़ें"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"पसंदीदा से निकालें"</string>
<string name="menu_editContact" msgid="9042415603857662633">"संपादित करें"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाए गए संपर्क"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सभी संपर्क"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"संपर्क जुड़ गए"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"संपर्क हटाएं?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"रिंगटोन सेट करें"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ध्वनिमेल से सभी कॉल"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"आप केवल-पढ़ने के लिए खातों से संपर्क नहीं हटा सकते, लेकिन आप उन्हें अपनी संपर्क सूचियों में छुपा सकते हैं."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> मिनट <xliff:g id="SECONDS">%s</xliff:g> सेकंड"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"बार-बार संपर्क किया गया"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"बार-बार कॉल किया गया"</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="description_image_button_one" msgid="1740638037139856139">"एक"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"दो"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"निकालें"</string>
<string name="description_plus_button" msgid="515164827856229880">"जोड़ें"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"संपर्क देखें"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"संग्रहण अनुपलब्ध"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"कोई SD कार्ड नहीं"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"कोई संग्रहण नहीं मिला."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"कोई SD कार्ड नहीं मिला."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCard खोज रहा है"</string>
<string name="import_from_sim" msgid="3859272228033941659">"सिम कार्ड से आयात करें"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"संग्रहण से आयात करें"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"संग्रहण में निर्यात करें"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"सभी vCard फ़ाइलें आयात करें"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"संग्रहण में vCard डेटा खोज रहा है..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"SD कार्ड पर vCard डेटा खोज रहा है…"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"संग्रहण स्कैन नहीं हो सका"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD कार्ड स्कैन नहीं हो सका"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"संग्रहण स्कैन नहीं किया जा सका. (कारण: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD कार्ड स्कैन नहीं किया जा सका. (कारण: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O त्रुटि"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard कंपोज़र ठीक से शुरू नहीं हुआ."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<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="TOTAL_NUMBER">%s</xliff:g> में से <xliff:g id="CURRENT_NUMBER">%s</xliff:g> संपर्क"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"vCard आयात रद्द कर रहा है"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> का आयात रद्द करें?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCard निर्यात रद्द किया जा रहा है"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> का निर्यात रद्द करें?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard आयात/निर्यात रद्द नहीं हो सका"</string>
<string name="search_settings_description" msgid="2675223022992445813">"आपके संपर्कों के नाम"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"प्रदर्शन के लिए संपर्क"</string>
<string name="menu_import_export" msgid="26217871113229507">"आयात करें/निर्यात करें"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"संपर्क आयात/निर्यात करें"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"संपर्क आयात करें"</string>
<string name="menu_share" msgid="943789700636542260">"शेयर करें"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"सभी संपर्क"</string>
<string name="share_via" msgid="563121028023030093">"इसके द्वारा संपर्क शेयर करें"</string>
<string name="share_error" msgid="948429331673358107">"यह संपर्क साझा नहीं किया जा सकता."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"नाम"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> स्रोतों से मर्ज किया गया"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"अन्य"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"संपर्क जोड़ें"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"वर्तमान संपर्क को चयनित संपर्क से जोड़ें?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"चयनित संपर्कों को संपादित करें"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित संपर्क के संपादन पर जाएं? आपके द्वारा अभी तक दर्ज की गई जानकारी की प्रतिलिपि बनाई जाएगी."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"मेरे संपर्क में प्रतिलिपि बनाएं"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"मेरे संपर्क में जोड़ें"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"लोड हो रहा है..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"एक नया संपर्क बनाएं"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"किसी खाते में साइन इन करें"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"फ़ाइल से संपर्क आयात करें"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"संपर्क आयात करें"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"नया समूह बनाएं"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[नया समूह बनाएं]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"समूह हटाएं"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 समूह"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> समूह"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"डिफ़ॉल्ट सेट करें"</string>
<string name="clear_default" msgid="7193185801596678067">"डिफ़ॉल्ट साफ़ करें"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"पाठ की प्रतिलिपि बनाई गई"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"परिवर्तन छोड़ें"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"आपके परिवर्तन छोड़ें?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"मेरी प्रोफ़ाइल सेट करें"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"स्थानीय रखें"</string>
<string name="add_account" msgid="8201790677994503186">"खाता जोड़ें"</string>
<string name="add_new_account" msgid="5748627740680940264">"नया खाता जोड़ें"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"कॉल नहीं भेजा गया"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"ध्वनिमेल नंबर अनुपलब्ध"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"कॉल नहीं भेजा गया"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ध्वनिमेल सेट करने के लिए, मेनू > सेटिंग पर जाएं."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"ध्वनिमेल कॉल करने के लिए, पहले हवाई जहाज़ मोड बंद करें."</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index da85680..56f7630 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Pretraži"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Novi kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Prikaži kontakt"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Nazovi <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Nazovite <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Dodaj u favorite"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Ukloni iz favorita"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakti su pridruženi"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Izbrisati kontakt?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Postavi zvuk zvona"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Svi pozivi na govornu poštu"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Ne možete izbrisati kontakte s računa samo za čitanje, ali možete ih sakriti na svojim popisima kontakata."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> minuta <xliff:g id="SECONDS">%s</xliff:g> sekundi"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Često kontaktirani"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Često nazivani"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Dodaj kontakt"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Dodati \"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktima?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"jedan"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dva"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Prikaži kontakt"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Prostor za pohranu nedostupan"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nema SD kartice"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nije pronađena nijedna pohrana."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nije pronađena SD kartica."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Traženje kartice vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Uvezi sa SIM kartice"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Uvoz iz pohrane"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Izvoz u pohranu"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Uvezi sve vCard datoteke"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Traženje vCard podataka u pohrani..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Pretraživanje vCard podataka na SD kartici..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Skeniranje pohrane nije uspjelo"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Skeniranje SD kartice nije uspjelo"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Pohrana se ne može skenirati. (Razlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD kartica ne može se skenirati. (Razlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O pogreška"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Sastavljač za vCard nije se ispravno pokrenuo."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteku \"<xliff:g id="FILE_NAME">%s</xliff:g>\" nije moguće otvoriti radi: <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> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakata"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Otkazivanje uvoza kartice vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Otkazati uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Otkazivanje izvoza kartice vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Otkazati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Uvoz/izvoz kartice vCard nije otkazan"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nazivi vaših kontakata"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakti za prikaz"</string>
<string name="menu_import_export" msgid="26217871113229507">"Uvoz/izvoz"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Uvoz/izvoz kontakata"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Uvezi kontakte"</string>
<string name="menu_share" msgid="943789700636542260">"Podijeli"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Svi kontakti"</string>
<string name="share_via" msgid="563121028023030093">"Dijeli kontakt putem"</string>
<string name="share_error" msgid="948429331673358107">"Ovaj kontakt nije moguće dijeliti."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"spojen s <xliff:g id="COUNT">%0$d</xliff:g> izvora"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Drugo"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Pridruživanje kontakata"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Pridružiti trenutačni kontakt odabranom kontaktu?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Uredi odabrane kontakte"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prebaciti se na uređivanje odabranog kontakta? Informacije koje ste unijeli dosad kopirat će se."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj u Moje kontakte"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj u Moje kontakte"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Učitavanje..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Izradi novi kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Prijavi se na račun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Uvezi kontakte iz datoteke"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvezi kontakte"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Izrada nove grupe"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Izradi novu grupu]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Izbriši grupu"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupa"</item>
<item quantity="other" msgid="1276758425904917367">"Br. grupa: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Postavi zadano"</string>
<string name="clear_default" msgid="7193185801596678067">"Izbriši zadano"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst kopiran"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Odbaci promjene"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Odbaciti promjene?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Postavi moj profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Zadrži lokalno"</string>
<string name="add_account" msgid="8201790677994503186">"Dodaj račun"</string>
<string name="add_new_account" msgid="5748627740680940264">"Dodaj novi račun"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Poziv nije poslan"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Broj govorne pošte nedostupan je"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Poziv nije poslan"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Da biste postavili govornu poštu, idite na Izbornik > Postavke."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Da biste nazvali govornu poštu, najprije isključite način rada u zrakoplovu."</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 0f99b0f..e0dbe1f 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Keresés"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Új névjegy"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Névjegy megtekintése"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"<xliff:g id="NAME">%s</xliff:g> hívása"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Hívás: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Hozzáadás a kedvencekhez"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eltávolítás a kedvencek közül"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Szerkesztés"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Javasolt névjegyek"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Összes névjegy"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"A névjegyek összekapcsolása megtörtént"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Törli a névjegyet?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Csengőhang"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Minden hívás a hangpostára"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Írásvédett fiókból nem törölhet névjegyet, de saját címtárában elrejtheti azokat."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> perc <xliff:g id="SECONDS">%s</xliff:g> másodperc"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Gyakran keresett"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Gyakran hívott"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Névjegy hozzáadása"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Hozzáadja a(z) \"<xliff:g id="EMAIL">%s</xliff:g>\"címet a Címtárhoz?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"egy"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"kettő"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"mínusz"</string>
<string name="description_plus_button" msgid="515164827856229880">"plusz"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Névjegy megtekintése"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"A tárhely nem érhető el"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Hiányzó SD-kártya"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nem található tárhely."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nem található SD-kártya."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCard keresése"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importálás a SIM-kártyáról"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importálás a tárhelyről"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportálás a tárhelyre"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Az összes vCard fájl importálása"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"vCard-adatok keresése a tárhelyen..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"vCard-adatok keresése az SD-kártyán..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Nem sikerült beolvasni a tárolót"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Nem lehet beolvasni az SD-kártyát"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"A tárhelyet nem lehet beolvasni. (Indok: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Az SD-kártyát nem lehet beolvasni. (Ok: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O hiba"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"A vCard-készítő nem megfelelően indult el."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"A(z) \"<xliff:g id="FILE_NAME">%s</xliff:g>\" fájl nem nyitható meg: <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> névjegy"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"vCard importálásának megszakítása"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Megszakítja <xliff:g id="FILENAME">%s</xliff:g> importálását?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCard exportálásának megszakítása"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Megszakítja <xliff:g id="FILENAME">%s</xliff:g> exportálását?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard imp./exp. megszakítása sikertelen"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Ismerősök nevei"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Megjelenítendő névjegyek"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importálás/exportálás"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Névjegyek importálása/exportálása"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Névjegyek importálása"</string>
<string name="menu_share" msgid="943789700636542260">"Megosztás"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Összes névjegy"</string>
<string name="share_via" msgid="563121028023030093">"Névjegy megosztása a következőn:"</string>
<string name="share_error" msgid="948429331673358107">"Ez a névjegy nem osztható meg."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Név"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"egyesítve <xliff:g id="COUNT">%0$d</xliff:g> forrásból"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Egyéb"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Névjegyek összekapcsolása"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Összekapcsolja a jelenlegi névjegyet a kiválasztott névjeggyel?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"A kiválasztott névjegyek szerkesztése"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"A kiválasztott névjegy szerkesztésére vált? Az eddig beírt információk át lesznek másolva."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Másolás a saját névjegyeim közé"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Hozzáadás a Címtárhoz"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Betöltés..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Új névjegy létrehozása"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Jelentkezzen be fiókjába"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Névjegyek importálása fájlból"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Névjegyek importálása"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Új csoport létrehozása"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Új csoport létrehozása]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Csoport törlése"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 csoport"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> csoport"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Beállítás alapértelmezettként"</string>
<string name="clear_default" msgid="7193185801596678067">"Alapértelmezés törlése"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Másolt szöveg"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Módosítások elvetése"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Elveti a módosításokat?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Saját profil beállítása"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Tárolás helyben"</string>
<string name="add_account" msgid="8201790677994503186">"Fiók hozzáadása"</string>
<string name="add_new_account" msgid="5748627740680940264">"Új fiók hozzáadása"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"A hívás nem indítható."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"A hangpostaszám nem érhető el"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"A hívás nem indítható."</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"A hangposta beállításához válassza a Menü > Beállítások pontot."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Hangposta hívásához kapcsolja ki a Repülőgép üzemmódot."</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 6d3f29c..e1526d3 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Telusuri"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Kenalan baru"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Lihat kenalan"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Panggil <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Tambahkan ke favorit"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Hapus dari favorit"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kenalan yang disarankan"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kenalan"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kenalan telah bergabung"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Hapus data kenalan?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Setel nada dering"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Semua panggilan ke kotak pesan"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Anda tidak dapat menghapus data kenalan dari akun hanya-baca, namun Anda dapat menyembunyikannya dalam daftar data kenalan Anda."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> menit <xliff:g id="SECONDS">%s</xliff:g> detik"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Paling sering dihubungi"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Paling sering dipanggil"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Tambahkan kenalan"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambahkan \"<xliff:g id="EMAIL">%s</xliff:g>\" ke kenalan?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"satu"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dua"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Lihat kenalan"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Penyimpanan tidak tersedia"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Tidak ada kartu SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Tidak ditemukan penyimpanan."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Tidak ditemukan kartu SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Menelusuri vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Impor dari kartu SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Impor dari penyimpanan"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Ekspor ke penyimpanan"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Impor semua berkas vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Menelusuri data vCard dalam penyimpanan..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Menelusuri data vCard pada kartu SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Tidak dapat memindai penyimpanan"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Tidak dapat memindai kartu SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Penyimpanan tidak dapat dipindai. (Alasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Kartu SD tidak dapat dipindai. (Alasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Galat I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Penyusun vCard tidak memulai dengan semestinya."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<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> dari <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kenalan"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Membatalkan impor vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Batalkan impor <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Membatalkan ekspor vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Batalkan ekspor <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Tidak dpt membatalkan impor/ekspor vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nama kenalan Anda"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kenalan untuk ditampilkan"</string>
<string name="menu_import_export" msgid="26217871113229507">"Impor/ekspor"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Impor/ekspor data kenalan"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Impor kenalan"</string>
<string name="menu_share" msgid="943789700636542260">"Bagikan"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Semua kenalan"</string>
<string name="share_via" msgid="563121028023030093">"Bagikan kenalan melalui"</string>
<string name="share_error" msgid="948429331673358107">"Data kenalan ini tidak dapat dibagi."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nama"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"digabungkan dari <xliff:g id="COUNT">%0$d</xliff:g> sumber"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Lainnya"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Gabungkan kenalan"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Gabungkan kenalan ini dengan kenalan yang dipilih?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Edit kenalan yang dipilih"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Beralih ke mengedit kenalan yang dipilih? Informasi yang telah Anda masukkan sejauh ini akan disalin."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Salin ke Data Kenalan Saya"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Tambahkan ke Kenalan Saya"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Memuat..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Buat kenalan baru"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Masuk ke akun."</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Mengimpor data kenalan dari berkas"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Impor kenalan"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Buat grup baru"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Buat grup baru]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Hapus grup"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grup"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grup"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Setel sebagai bawaan"</string>
<string name="clear_default" msgid="7193185801596678067">"Hapus bawaan"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teks disalin"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Singkirkan perubahan"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Buang perubahan Anda?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Siapkan profil saya"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Simpan secara lokal"</string>
<string name="add_account" msgid="8201790677994503186">"Tambahkan akun"</string>
<string name="add_new_account" msgid="5748627740680940264">"Tambahkan akun baru"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Panggilan tidak terkirim"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Nomor pesan suara tidak tersedia"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Panggilan tidak terkirim"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Untuk menyiapkan kotak pesan, buka Menu > Setelan."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Untuk memanggil pesan suara, pertama-tama matikan mode Pesawat."</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 32b8522..404eb95 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Cerca"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nuovo contatto"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Visualizza contatto"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Chiama <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Chiama <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Modifica"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatti suggeriti"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tutti i contatti"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contatti uniti"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Eliminare contatto?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Imposta suoneria"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tutte le chiamate a segreteria"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Non puoi eliminare contatti da account di sola lettura, ma puoi nasconderli nei tuoi elenchi di contatti."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contattati spesso"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Numeri più chiamati"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Aggiungi contatto"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Aggiungi \"<xliff:g id="EMAIL">%s</xliff:g>\" ai contatti?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"uno"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"due"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"meno"</string>
<string name="description_plus_button" msgid="515164827856229880">"più"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Visualizza contatto"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Archivio non disponibile"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nessuna scheda SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nessun archivio trovato."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nessuna scheda SD trovata."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Ricerca vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importa da scheda SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importa da archivio"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Esporta in archivio"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importa tutti i file vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Ricerca di dati vCard nell\'archivio..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Ricerca dati vCard su scheda SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Scansione archivio non riuscita"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Scansione scheda SD non riuscita"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Scansione dell\'archivio non riuscita. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Scansione della scheda SD non riuscita. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Errore I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Il compositore di vCard non si è avviato correttamente."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Apertura di \"<xliff:g id="FILE_NAME">%s</xliff:g>\" non riuscita: <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="cancel_import_confirmation_title" msgid="5578683596010294836">"Annullamento importazione vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Annullare l\'importazione di <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Annullamento esportazione vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annullare l\'esportazione di <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Annullam. import./esport. vCard non riuscito"</string>
<string name="search_settings_description" msgid="2675223022992445813">"I nomi dei tuoi contatti"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contatti da visualizzare"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importa/esporta"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importa/esporta contatti"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importa contatti"</string>
<string name="menu_share" msgid="943789700636542260">"Condividi"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Tutti i contatti"</string>
<string name="share_via" msgid="563121028023030093">"Condividi contatto tramite"</string>
<string name="share_error" msgid="948429331673358107">"Questo contatto non può essere condiviso."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"uniti da <xliff:g id="COUNT">%0$d</xliff:g> origini"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Altro"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Unisci contatti"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Unire il contatto corrente al contatto selezionato?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Modifica i contatti selezionati"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Passare alla modifica del contatto selezionato? Le informazioni inserite finora verranno copiate."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copia nei miei contatti"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Aggiungi ai contatti personali"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Caricamento..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crea nuovo contatto"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Accedi a un account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importa contatti da file"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importa contatti"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Crea nuovo gruppo"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Crea nuovo gruppo]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Elimina gruppo"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 gruppo"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> gruppi"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Imposta come predefinito"</string>
<string name="clear_default" msgid="7193185801596678067">"Cancella impostazione predefinita"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Testo copiato"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Ignora modifiche"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Annullare le modifiche?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g> "</string>
<string name="profile_display_name" msgid="4127389543625918771">"Imposta il mio profilo"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Memorizza in locale"</string>
<string name="add_account" msgid="8201790677994503186">"Aggiungi account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Aggiungi nuovo account"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Chiamata non inviata"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Numero segreteria non disponibile"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Chiamata non inviata"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Per configurare la segreteria, seleziona Menu > Impostazioni."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Per chiamare la segreteria, disattiva la modalità aereo."</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 6403596..12c5cc9 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"התקשר אל <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"הוסף למועדפים"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"הסר מהמועדפים"</string>
<string name="menu_editContact" msgid="9042415603857662633">"ערוך"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"אנשי קשר מוצעים"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"כל אנשי הקשר"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"אנשי קשר צורפו"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"למחוק את איש הקשר?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"הגדר רינגטון"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"כל השיחות לתא הקולי"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"לא ניתן למחוק אנשי קשר מחשבונות לקריאה בלבד, אך ניתן להסתיר אותם ברשימות אנשי הקשר."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> דקות <xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"בקשר לעתים קרובות"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"התקשרות לעתים קרובות"</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="description_image_button_one" msgid="1740638037139856139">"אחד"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"שתיים"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"חיסור"</string>
<string name="description_plus_button" msgid="515164827856229880">"חיבור"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"הצג איש קשר"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"אמצעי אחסון אינו זמין"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"אין כרטיס SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"לא נמצאו התקני אחסון."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"לא נמצא כרטיס SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"מחפש vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"ייבא מכרטיס SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"ייבא מאמצעי אחסון"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"ייצא לאמצעי אחסון"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"ייבא את כל קובצי vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"מחפש נתוני vCard באמצעי האחסון..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"מחפש נתוני vCard בכרטיס ה-SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"לא ניתן לסרוק אחסון"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"לא ניתן לסרוק כרטיס SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"לא ניתן לסרוק את אמצעי האחסון. (סיבה: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"לא ניתן לסרוק את כרטיס ה-SD. (סיבה: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"שגיאת קלט/פלט"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"יישום היצירה של ה-vCard לא הופעל כהלכה."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"לא ניתן לפתוח את \"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"מבטל יבוא של vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"לבטל את הייבוא של <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"מבטל יצוא של vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"לבטל את הייצוא של <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"לא ניתן לבטל ייבוא/ייצוא של vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"השמות של אנשי הקשר"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"אנשי קשר להצגה"</string>
<string name="menu_import_export" msgid="26217871113229507">"ייבוא/ייצוא"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"יבא/יצא אנשי קשר"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"יבוא אנשי קשר"</string>
<string name="menu_share" msgid="943789700636542260">"שתף"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"כל אנשי הקשר"</string>
<string name="share_via" msgid="563121028023030093">"שתף איש קשר באמצעות"</string>
<string name="share_error" msgid="948429331673358107">"לא ניתן לשתף איש קשר זה."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"שם"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"מוזגו מ-<xliff:g id="COUNT">%0$d</xliff:g> מקורות"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"אחר"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"צרף אנשי קשר"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"לצרף את איש הקשר הנוכחי לאיש הקשר שנבחר?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"ערוך את אנשי הקשר שנבחרו"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"לעבור לעריכה של איש הקשר שנבחר? המידע שהזנת עד עכשיו יועתק."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"העתק אל \'אנשי הקשר שלי\'"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"הוסף ל\'אנשי הקשר שלי\'"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"טוען..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"צור איש קשר חדש"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"היכנס לחשבון"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"ייבא אנשי קשר מקובץ"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"יבא אנשי קשר"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"צור קבוצה חדשה"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[צור קבוצה חדשה]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"מחק את הקבוצה"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"קבוצה אחת"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> קבוצות"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"קבע כברירת מחדל"</string>
<string name="clear_default" msgid="7193185801596678067">"נקה ברירת מחדל"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"טקסט שהועתק"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"מחק שינויים"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"למחוק את השינויים שביצעת?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"הגדר את הפרופיל שלי"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"שמור באופן מקומי"</string>
<string name="add_account" msgid="8201790677994503186">"הוסף חשבון"</string>
<string name="add_new_account" msgid="5748627740680940264">"הוסף חשבון חדש"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"השיחה לא נשלחה."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"המספר של הדואר הקולי אינו זמין"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"השיחה לא נשלחה."</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' > \'הגדרות\'."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"כדי להתקשר לדואר קולי, ראשית כבה את מצב הטיסה."</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index a96f32c..186f415 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>に発信"</string>
<string name="menu_addStar" msgid="2908478235715404876">"お気に入りに追加"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"お気に入りから削除"</string>
<string name="menu_editContact" msgid="9042415603857662633">"編集"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"連絡先候補"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"すべての連絡先"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"連絡先を結合しました"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"連絡先を削除しますか?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"着信音を設定"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"すべての通話をボイスメールへ"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"読み取り専用アカウントの連絡先は削除できません。ただし、連絡先リストで非表示にすることができます。"</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g>分<xliff:g id="SECONDS">%s</xliff:g>秒"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"よく使う連絡先"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"よく使う連絡先"</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="description_image_button_one" msgid="1740638037139856139">"1"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"2"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"マイナス"</string>
<string name="description_plus_button" msgid="515164827856229880">"プラス"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"連絡先を表示"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"ストレージ使用不可"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"SDカードがありません"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"ストレージはありませんでした。"</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"SDカードが見つかりませんでした。"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCardを検索中"</string>
<string name="import_from_sim" msgid="3859272228033941659">"SIMカードからインポート"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"ストレージからインポート"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"ストレージにエクスポート"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"すべてのvCardファイルをインポート"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"ストレージ内でvCardデータを検索しています..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"SDカードでvCardデータを検索しています..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"ストレージをスキャンできませんでした"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SDカードをスキャンできませんでした"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"ストレージをスキャンできませんでした(理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」)。"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SDカードをスキャンできませんでした(理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」)。"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"送受信エラー"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCardコンポーザーが正しく起動しませんでした。"</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"「<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="cancel_import_confirmation_title" msgid="5578683596010294836">"vCardインポートのキャンセル"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g>のインポートをキャンセルしますか?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCardエクスポートのキャンセル"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g>のエクスポートをキャンセルしますか?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardインポート/エクスポート取り消し不可"</string>
<string name="search_settings_description" msgid="2675223022992445813">"連絡先の名前"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"表示する連絡先"</string>
<string name="menu_import_export" msgid="26217871113229507">"インポート/エクスポート"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"連絡先のインポート/エクスポート"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"連絡先のインポート"</string>
<string name="menu_share" msgid="943789700636542260">"共有"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"すべての連絡先"</string>
<string name="share_via" msgid="563121028023030093">"連絡先の共有ツール"</string>
<string name="share_error" msgid="948429331673358107">"この連絡先は共有できません。"</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"名前"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g>件の連絡先が結合されました"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"その他"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"連絡先の統合"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"現在の連絡先を選択した連絡先に統合しますか?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"選択した連絡先の編集"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"選択した連絡先の編集に切り替えますか?これまでに入力した情報はコピーされます。"</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Myコンタクトにコピー"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Myコンタクトに追加"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"読み込んでいます..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"新しい連絡先を作成"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"アカウントにログイン"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"ファイルから連絡先をインポート"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"連絡先をインポート"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"新しいグループの作成"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[新しいグループを作成]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"グループの削除"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1グループ"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g>グループ"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"デフォルトに設定"</string>
<string name="clear_default" msgid="7193185801596678067">"デフォルトを解除"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"テキストをコピーしました"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"変更を破棄"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"変更を破棄しますか?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"プロフィールを設定"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"ローカルに保存"</string>
<string name="add_account" msgid="8201790677994503186">"アカウントを追加"</string>
<string name="add_new_account" msgid="5748627740680940264">"新しいアカウントを追加"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"発信できません"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"ボイスメールの番号を利用できません"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"発信できません"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ボイスメールをセットアップするには、MENUキー>[設定]をタップします。"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"機内モードをOFFにしてからボイスメールを呼び出してください。"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index c0fd67d..61baf4f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>에 전화"</string>
<string name="menu_addStar" msgid="2908478235715404876">"즐겨찾기에 추가"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"즐겨찾기에서 삭제"</string>
<string name="menu_editContact" msgid="9042415603857662633">"수정"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"추천 연락처"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"모든 연락처"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"연락처 결합됨"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"연락처를 삭제하시겠습니까?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"벨소리 설정"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"음성사서함 자동 연결"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"연락처를 읽기 전용 계정에서 삭제할 수는 없지만 주소록에서 숨길 수는 있습니다."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"자주 연락하는 사람들의 연락처"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"자주 통화한 목록"</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="description_image_button_one" msgid="1740638037139856139">"1"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"2"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"빼기"</string>
<string name="description_plus_button" msgid="515164827856229880">"더하기"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"연락처 보기"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"저장장치 없음"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"SD 카드 없음"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"저장공간을 찾을 수 없습니다."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"SD 카드가 없습니다."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCard 검색"</string>
<string name="import_from_sim" msgid="3859272228033941659">"SIM 카드에서 가져오기"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"저장소에서 가져오기"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"저장소로 내보내기"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"모든 vCard 파일 가져오기"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"저장장치에서 vCard 데이터 검색 중..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"SD 카드의 vCard 데이터 검색 중..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"저장소를 검색하지 못했습니다."</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD 카드를 검색하지 못했습니다."</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"저장소를 검색할 수 없습니다(이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')."</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD 카드를 검색할 수 없습니다(이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')."</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 오류"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard 작성기가 제대로 시작되지 않았습니다."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\'<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="cancel_import_confirmation_title" msgid="5578683596010294836">"vCard 가져오기 취소 중"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> 가져오기를 취소하시겠습니까?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCard 내보내기 취소 중"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> 내보내기를 취소하시겠습니까?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard 가져오기/내보내기를 취소하지 못했습니다."</string>
<string name="search_settings_description" msgid="2675223022992445813">"연락처 명단"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"표시할 연락처"</string>
<string name="menu_import_export" msgid="26217871113229507">"가져오기/내보내기"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"주소록 가져오기/내보내기"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"주소록 가져오기"</string>
<string name="menu_share" msgid="943789700636542260">"공유"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"모든 연락처"</string>
<string name="share_via" msgid="563121028023030093">"연락처 공유에 사용할 애플리케이션:"</string>
<string name="share_error" msgid="948429331673358107">"연락처를 공유할 수 없습니다."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"이름"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g>개 출처에서 병합했습니다."</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"기타"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"연락처 통합"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"이 연락처와 선택한 연락처를 통합하시겠습니까?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"선택한 연락처 수정"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"선택한 연락처를 수정하시겠습니까? 지금까지 입력하신 정보는 복사됩니다."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"내 주소록에 복사"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"내 주소록에 추가"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"로드 중…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"새 연락처 만들기"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"계정에 로그인"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"파일에서 주소록 가져오기"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"주소록 가져오기"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"새 그룹 만들기"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[새 그룹 만들기]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"그룹 삭제"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"그룹 1개"</item>
<item quantity="other" msgid="1276758425904917367">"그룹 <xliff:g id="COUNT">%0$d</xliff:g>개"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"기본으로 설정"</string>
<string name="clear_default" msgid="7193185801596678067">"기본 설정 지우기"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"텍스트 복사됨"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"변경사항 취소"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"변경사항을 삭제하시겠습니까?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g> "</string>
<string name="profile_display_name" msgid="4127389543625918771">"내 프로필 설정"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"오프라인 보관"</string>
<string name="add_account" msgid="8201790677994503186">"계정 추가"</string>
<string name="add_new_account" msgid="5748627740680940264">"새 계정 추가"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"전화를 걸 수 없음"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"음성사서함 번호를 사용할 수 없음"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"전화를 걸 수 없음"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"음성사서함을 설정하려면 메뉴 > 설정으로 이동하세요."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"음성사서함에 메시지를 남기려면 먼저 비행기 모드를 해제하세요."</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 0145168..edf8426 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Ieškoti"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Naujas adresatas"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Žiūrėti adresatą"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Skambinti <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Skambinti <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Pridėti prie adresyno"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Pašalinti iš adresyno"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Redaguoti"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Siūlomi adresatai"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visi adresatai"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Sujungti adresatai"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Ištrinti kontaktą?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nustat. sk. toną"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Visi skamb. į balso paštą"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Negalite ištrinti kontaktų iš tik skaitomų paskyrų, bet galite paslėpti juos savo kontaktų sąrašuose."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Dažnai susisiekiama"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Dažniausiai skambinta"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Pridėti adresatą"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Pridėti „<xliff:g id="EMAIL">%s</xliff:g>“ prie adresatų?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"vienas"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"du"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plius"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Peržiūrėti kontaktą"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Saugykla neprieinama"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nėra SD kortelės"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nerasta jokių atmintinių."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nerasta jokių SD kortelių."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Ieškoma „vCard“ kortelės"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importuoti iš SIM kortelės"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importuoti iš saugyklos"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Eksportuoti į saugyklą"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importuoti visus „VCard“ kortelės failus"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Ieškoma el. vizitinės kortelės duomenų saugykloje..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"SD kortelėje ieškoma el. vizitinės kortelės duomenų..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Nepavyko nuskaityti atminties"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Nepavyko nuskaityti SD kortelės"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Atmintinės negalima žvalgyti. (Priežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD kortelės negalima žvalgyti. (Priežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Įvesties / išvesties klaida"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"El. vizitinių kortelių rengyklė nebuvo tinkamai paleista."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nepavyko atidaryti „<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> iš <xliff:g id="TOTAL_NUMBER">%s</xliff:g> adresatų"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Atšaukiamas el. vizitinės kortelės importavimas"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Atšaukti <xliff:g id="FILENAME">%s</xliff:g> importavimą?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Atšaukiamas el. vizitinės kortelės eksportavimas"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Atšaukti <xliff:g id="FILENAME">%s</xliff:g> eksportavimą?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nepavyko atš. „vCard“ imp. / eksp."</string>
<string name="search_settings_description" msgid="2675223022992445813">"Adresatų vardai"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Pateiktini kontaktai"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importuoti / eksportuoti"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Import. / eksport. kont."</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importuoti kontaktus"</string>
<string name="menu_share" msgid="943789700636542260">"Bendrinti"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Visi kontaktai"</string>
<string name="share_via" msgid="563121028023030093">"Bendrinti adresatą naudojant"</string>
<string name="share_error" msgid="948429331673358107">"Šio kontakto negalima bendrinti."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Pavadinimas"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"sujungta iš <xliff:g id="COUNT">%0$d</xliff:g> šaltinių (-io)"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Kita"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Sujungti kontaktus"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Sujungti dabartinį kontaktą su pasirinktu?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Redaguoti pasirinktus kontaktus"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Perjungti į pasirinkto kontakto redagavimą? Iki šiol įvesta informacija bus nukopijuota."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopijuoti į „Mano kontaktus“"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Pridėti prie „Mano kontaktų“"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Įkeliama..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Sukurti naują kontaktą"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Prisijunkite prie paskyros"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importuoti kontaktus iš failo"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importuoti kontaktus"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Sukurti naują grupę"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Sukurti naują grupę]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Ištrinti grupę"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupė"</item>
<item quantity="other" msgid="1276758425904917367">"Grupių: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Nustatyti numatytuosius nustatymus"</string>
<string name="clear_default" msgid="7193185801596678067">"Išvalyti numatytuosius nustatymus"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekstas nukopijuotas"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Atmesti pakeitimus"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Atmesti pakeitimus?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Nustatyti mano profilį"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Išsaug. kaip vietinį"</string>
<string name="add_account" msgid="8201790677994503186">"Pridėkite paskyrą"</string>
<string name="add_new_account" msgid="5748627740680940264">"Pridėkite naują paskyrą"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Skambutis neišsiųstas"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Balso pašto numeris nepasiekiamas"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Skambutis neišsiųstas"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Jei norite nustatyti balso paštą, eikite į „Meniu“ > „Nustatymai“."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Jei norite skambinti į balso paštą, išjunkite lėktuvo režimą."</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 50172d8..902fcc7 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Meklēt"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Jauna kontaktpersona"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Skatīt kontaktpersonu"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Zvanīt: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Zvaniet: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Pievienot izlasei"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Noņemt no izlases"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Rediģēt"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ieteiktās kontaktpersonas"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visas kontaktpersonas"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontaktpersonas ir apvienotas."</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Vai dzēst kontaktp.?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Iest. zv. sign."</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Visi zvani uz balss pastu"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Jūs nevarat dzēst kontaktpersonas no tikai lasāmiem kontiem, taču varat tās slēpt kontaktpersonu sarakstos."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Bieža saziņa"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Bieži zvanīti"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Pievienot kontaktpersonu"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Vai pievienot “<xliff:g id="EMAIL">%s</xliff:g>” kontaktpersonām?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"viens"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"divi"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"mīnuss"</string>
<string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Skatīt kontaktpersonu"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"USB atmiņa nav pieejama"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nav SD kartes"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Netika atrasta atmiņa."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Netika atrasta SD karte."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCard faila meklēšana"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importēt no SIM kartes"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importēt no USB atmiņas"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Eksportēt uz USB atmiņu"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importēt visus vCard failus"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Notiek vCard datu meklēšana atmiņā..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Notiek vCard datu meklēšana SD kartē..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Nevarēja skenēt atmiņu."</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Nevarēja skenēt SD karti."</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Atmiņu nevarēja skenēt. (Iemesls: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD karti nevarēja skenēt. (Iemesls: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Ievades/izvades kļūda."</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Netika pareizi startēts vCard veidotājs."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nevarēja atvērt failu <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> no <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktpersonas(-ām)"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"vCard importēšanas atcelšana"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vai atcelt faila <xliff:g id="FILENAME">%s</xliff:g> importēšanu?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCard eksportēšanas atcelšana"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vai atcelt faila <xliff:g id="FILENAME">%s</xliff:g> eksportēšanu?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nevarēja atcelt vCard f. import./eksp."</string>
<string name="search_settings_description" msgid="2675223022992445813">"Kontaktpersonu vārdi"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Attēlojamās kontaktpersonas"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importēt/eksportēt"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"K. pers. imports/eksports"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Kontaktpersonu importēšana"</string>
<string name="menu_share" msgid="943789700636542260">"Kopīgot"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Visas kontaktpersonas"</string>
<string name="share_via" msgid="563121028023030093">"Kopīgot kontaktpersonu, izmantojot"</string>
<string name="share_error" msgid="948429331673358107">"Šo kontaktpersonu nevar kopīgot."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Vārds"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"sapludināts no <xliff:g id="COUNT">%0$d</xliff:g> avotiem"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Cits"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Kontaktpersonu savienošana"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Vai savienot pašreizējo saturu ar atlasīto kontaktpersonu?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Atlasīto kontaktpersonu rediģēšana"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vai pāriet uz atlasītās kontaktpersonas rediģēšanu? Līdz šim ievadītā informācija tiks kopēta."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopēt uz manām kontaktpersonām"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Pievienot mapē Manas kontaktpersonas"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Notiek ielāde..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Izveidot jaunu kontaktpersonu"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Pierakstīties kontā"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importēt kontaktpersonas no faila"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importēt kontaktpersonas"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Jaunas grupas izveide"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Izveidot jaunu grupu]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Grupas dzēšana"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupa"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupas"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Iestatīt kā noklusējumu"</string>
<string name="clear_default" msgid="7193185801596678067">"Notīrīt noklusējuma iestatījumus"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teksts ir nokopēts"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Atmest izmaiņas"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Vai atmest veiktās izmaiņas?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g><xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Iestatīt savu profilu"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Saglabāt vietēji"</string>
<string name="add_account" msgid="8201790677994503186">"Pievienot kontu"</string>
<string name="add_new_account" msgid="5748627740680940264">"Pievienot jaunu kontu"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Nenosūtīts zvans"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Nepieejams balss pasta numurs"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Nenosūtīts zvans"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Lai iestatītu balss pastu, atveriet sadaļu Izvēlne > Iestatījumi."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Lai piezvanītu balss pastam, vispirms izslēdziet lidojuma režīmu."</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 2a6190f..425bbac 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Cari"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Kenalan baru"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Papar kenalan"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Panggil <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Tambah ke kegemaran"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Alih keluar daripada kegemaran"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kenalan cadangan"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kenalan"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kenalan digabungkan"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Padamkan kenalan?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Ttpkn nd dering"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Semua panggilan ke mel suara"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Anda tidak boleh memadamkan kenalan daripada akaun baca sahaja, tetapi anda boleh menyembunyikan mereka dalam senarai kenalan anda."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> saat"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Kerap dihubungi"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Kerap dipanggil"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Tambah kenalan"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambah \"<xliff:g id="EMAIL">%s</xliff:g>\" kepada kenalan?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"satu"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dua"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"tolak"</string>
<string name="description_plus_button" msgid="515164827856229880">"tambah"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Lihat kenalan"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Storan tidak tersedia"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Tiada kad SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Tiada storan ditemui."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Tiada kad SD ditemui."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Mencari vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Import daripada kad SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Import dari storan"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Eksport ke storan"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Import semua fail vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Mencari data vCard pada storan..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Mencari data vCard pada kad SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Tidak dapat mengimbas storan"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Tidak dapat mengimbas kad SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Storan tidak boleh diimbas. (Alasan: \" <xliff:g id="FAIL_REASON">%s</xliff:g> \")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Kad SD tidak boleh diimbas. (Alasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Ralat I/O"</string>
@@ -275,9 +268,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Komposer vCard tidak bermula dengan betul."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<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> daripada <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kenalan"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Membatalkan mengimport vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Batalkan pengimportan <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Membatalkan mengeksport vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Batalkan pengeksportan <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Tidak dapat membatalkan import/eksport vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nama kenalan anda"</string>
@@ -293,8 +284,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kenalan untuk dipaparkan"</string>
<string name="menu_import_export" msgid="26217871113229507">"Import/eksport"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Import/Eksport kenalan"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Import kenalan"</string>
<string name="menu_share" msgid="943789700636542260">"Kongsi"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Semua kenalan"</string>
<string name="share_via" msgid="563121028023030093">"Kongsi gambar melalui"</string>
<string name="share_error" msgid="948429331673358107">"Kenalan ini tidak boleh dikongsi."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nama"</string>
@@ -443,9 +434,7 @@
<item quantity="other" msgid="425683718017380845">"digabungkan daripada <xliff:g id="COUNT">%0$d</xliff:g> sumber"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Lain-lain"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Gabungkan kenalan"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Gabungkan kenalan semasa dengan kenalan pilihan?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Edit kenalan pilihan"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Bertukar kepada mengedit kenalan pilihan? Maklumat yang anda masukkan setakat ini akan disalin."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Salin ke Kenalan Saya"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Tambahkan pada Kenalan Saya"</string>
@@ -477,10 +466,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Memuatkan…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Buat kenalan baru"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Log masuk ke akaun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Import kenalan dari fail"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import kenalan"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Buat kumpulan baru"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Buat kumpulan baru]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Padam kumpulan"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 kumpulan"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> kumpulan"</item>
@@ -499,7 +487,6 @@
<string name="set_default" msgid="4417505153468300351">"Tetapkan lalai"</string>
<string name="clear_default" msgid="7193185801596678067">"Kosongkan lalai"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teks disalin"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Buang perubahan"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Buang perubahan anda?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Sediakan profil saya"</string>
@@ -563,7 +550,7 @@
<string name="keep_local" msgid="1258761699192993322">"Simpan setempat"</string>
<string name="add_account" msgid="8201790677994503186">"Tambah akaun"</string>
<string name="add_new_account" msgid="5748627740680940264">"Tambah akaun baharu"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Panggilan tidak dihantar"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Nombor mel suara tidak tersedia"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Panggilan tidak dihantar"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Untuuk menyediakan mel suara, pergi ke Menu > Tetapan."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Untuk membuat panggilan ke mel suara, mula-mula matikan mod Pesawat."</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 37e4946..77c41bd 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Søk"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Ny kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Se på kontakt"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Rediger"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Forslag"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontaktene er forent"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Slette kontakten?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Angi ringetone"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle samtaler til talepost"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Du kan ikke slette kontakter fra skrivebeskyttede kontoer, men du kan skjule dem i kontaktlisten."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Ofte kontaktet"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Ofte oppringt"</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="description_image_button_one" msgid="1740638037139856139">"en"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"to"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minusknapp"</string>
<string name="description_plus_button" msgid="515164827856229880">"plussknapp"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Se kontakt"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Lagring utilgjengelig"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Mangler minnekort"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Finner ikke lagringsplass."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Finner ikke SD-kort."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Leter etter VCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importér fra SIM-kort"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importér fra lagring"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Eksportér til lagring"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importer alle vCard-filer"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Søker etter vCard-data i lagringsenheten …"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Søker etter vCard-data på SD-kortet …"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Kunne ikke skanne lagring"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Kunne ikke skanne SD-kort"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Lagringsenheten kunne ikke skannes. (Grunn: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD-kortet kan ikke skannes. (Grunn: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Inn-/ut-feil"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard-oppretteren startet ikke som den skulle."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kan 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="cancel_import_confirmation_title" msgid="5578683596010294836">"Avbryt import av vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vil du avbryte importen av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Avbryt eksport av vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vil du avbryte eksporten av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kunne ikke kansellere imp./eksp. av vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Navn på kontakter"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakter i visning"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importér/eksportér"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Imp./eksp. kontakter"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importer kontakter"</string>
<string name="menu_share" msgid="943789700636542260">"Del"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Alle kontakter"</string>
<string name="share_via" msgid="563121028023030093">"Del kontakt via"</string>
<string name="share_error" msgid="948429331673358107">"Denne kontakten kan ikke deles."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Navn"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"sammenslått fra <xliff:g id="COUNT">%0$d</xliff:g> kilder"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Andre"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Slå sammen kontakter"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Slå sammen gjeldende kontakt med valgt kontakt?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Rediger valgte kontakter"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Bytt til redigering av gjeldende kontakt? Informasjonen du har lagt til så langt blir kopiert."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopiér til mine kontakter"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Legg til i Mine kontakter"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Laster inn …"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Opprett en ny kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Logg deg på en konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importer kontakter fra en fil"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer kontakter"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Opprett ny gruppe"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Opprett ny gruppe]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Slett gruppe"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"Én gruppe"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupper"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Angi som standard"</string>
<string name="clear_default" msgid="7193185801596678067">"Fjern som standard"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst kopiert"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Forkast endringer"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Vil du forkaste endringene?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Konfigurer profilen min"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Behold lokalt"</string>
<string name="add_account" msgid="8201790677994503186">"Legg til konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Legg til ny konto"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Anrop ikke foretatt"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Talepostkassenummer utilgjengelig"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Anrop ikke utført"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Du konfigurerer talepost ved å gå til Meny &gt Innstillinger"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Du må slå av flymodus før du kan sjekke talepostkassen."</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b4a7617..a21171a 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Zoeken"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nieuw contact"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Contact weergeven"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"<xliff:g id="NAME">%s</xliff:g> bellen"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Toevoegen aan favorieten"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Uit favorieten verwijderen"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Bewerken"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mogelijke contacten"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle contacten"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacten zijn samengevoegd"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Contact verwijderen?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Beltoon instellen"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle oproepen naar voicemail"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"U kunt contacten niet verwijderen uit alleen-lezen-accounts, maar u kunt ze verbergen in uw contactenlijst."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Regelmatig contact"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Vaak gebeld"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Contact toevoegen"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" toe aan contactpersonen?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"één"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"twee"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"min"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Contact weergeven"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Opslag niet beschikbaar"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Geen SD-kaart"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Er is geen opslag gevonden."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Geen SD-kaart gevonden."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Zoeken naar vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importeren van SIM-kaart"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importeren uit opslag"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exporteren naar opslag"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Alle vCard-bestanden importeren"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Zoeken naar vCard-gegevens in opslag..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Zoeken naar vCard-gegevens op SD-kaart..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Kan opslag niet scannen"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Kan SD-kaart niet scannen"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"De opslag kan niet worden gescand. (Reden: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"De SD-kaart kan niet worden gescand. (Reden: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fout"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"De vCard-editor is niet correct gestart."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"Importeren van vCard annuleren"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Import van <xliff:g id="FILENAME">%s</xliff:g> annuleren?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Exporteren van vCard annuleren"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Export van <xliff:g id="FILENAME">%s</xliff:g> annuleren?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kan vCard-import/export niet annuleren"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Namen van uw contacten"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Zichtbare contacten"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importeren/exporteren"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Contacten importeren/exporteren"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Contacten importeren"</string>
<string name="menu_share" msgid="943789700636542260">"Delen"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Alle contacten"</string>
<string name="share_via" msgid="563121028023030093">"Contact delen via"</string>
<string name="share_error" msgid="948429331673358107">"Dit contact kan niet worden gedeeld."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Naam"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"samengevoegd uit <xliff:g id="COUNT">%0$d</xliff:g> bronnen"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Overig"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Contacten samenvoegen"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Wilt u het huidige contact samenvoegen met het geselecteerde contact?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Geselecteerde contacten bewerken"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Wilt u overschakelen naar het bewerken van het geselecteerde contact? Gegevens die u tot nu toe heeft ingevoerd, worden gekopieerd."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopiëren naar mijn contacten"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Toevoegen aan Mijn contacten"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Laden..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Een nieuw contact maken"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Aanmelden bij een account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Contacten importeren uit een bestand"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Contacten importeren"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Nieuwe groep maken"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Nieuwe groep maken]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Groep verwijderen"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 groep"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> groepen"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Standaard instellen"</string>
<string name="clear_default" msgid="7193185801596678067">"Standaardwaarden wissen"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst gekopieerd"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Wijzigingen annuleren"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Uw wijzigingen annuleren?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Mijn profiel instellen"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Lokaal opslaan"</string>
<string name="add_account" msgid="8201790677994503186">"Account toevoegen"</string>
<string name="add_new_account" msgid="5748627740680940264">"Nieuw account toevoegen"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Oproep niet verzonden"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Voicemailnummer niet beschikbaar"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Oproep niet uitgevoerd"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Voor het instellen van voicemail, gaat u naar \'Menu\' > \'Instellingen\'."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Als u uw voicemail wilt bellen, moet u eerst de Vliegmodus uitschakelen."</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index de6c6bd..4d6da26 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Szukaj"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nowy kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Wyświetl kontakt"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Zadzwoń do: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Zadzwoń: <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Edytuj"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Sugerowane kontakty"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Wszystkie kontakty"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakty zostały połączone"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Usunąć kontakt?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Ustaw dzwonek"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Łącz na pocztę głosową"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Nie możesz usunąć kontaktów z kont tylko do odczytu, ale możesz ukryć je na swoich listach kontaktów."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Częste kontakty"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Częste połączenia"</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="description_image_button_one" msgid="1740638037139856139">"jeden"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dwa"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Wyświetl kontakt"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Nośnik nie jest dostępny"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Brak karty SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nie znaleziono nośnika."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nie znaleziono karty SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Wyszukiwanie danych vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importuj z karty SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importuj z nośnika"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Eksportuj na nośnik"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importuj wszystkie pliki vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Wyszukiwanie danych vCard na nośniku…"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Wyszukiwanie danych vCard na karcie SD…"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Nie można przeskanować pamięci"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Nie można przeskanować karty SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Nie można przejrzeć nośnika. (Przyczyna: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Nie można przejrzeć karty SD. (Przyczyna: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Błąd wejścia/wyjścia"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Obiekt tworzenia danych vCard nie został uruchomiony poprawnie."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"Anulowanie importowania pliku vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Anulować import: <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Anulowanie eksportowania pliku vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Anulować eksport: <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nie można anulować importu/eksportu vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Imiona i nazwiska oraz nazwy w Twoich kontaktach"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty do wyświetlenia"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importuj/eksportuj"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importuj/eksportuj kontakty"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importuj kontakty"</string>
<string name="menu_share" msgid="943789700636542260">"Udostępnij"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Wszystkie kontakty"</string>
<string name="share_via" msgid="563121028023030093">"Udostępnij kontakt przez"</string>
<string name="share_error" msgid="948429331673358107">"Tego kontaktu nie można udostępniać."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nazwa"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"scalono z <xliff:g id="COUNT">%0$d</xliff:g> źródeł"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Inne"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Połącz kontakty"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Czy połączyć bieżący kontakt z wybranym?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Edytuj wybrane kontakty"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Czy chcesz edytować wybrany kontakt? Wprowadzone dotąd informacje zostaną skopiowane."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopiuj do moich kontaktów"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj do moich kontaktów"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Wczytywanie…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Utwórz nowy kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Zaloguj się na konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Zaimportuj kontakty z pliku"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importuj kontakty"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Utwórz nową grupę"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Utwórz nową grupę]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Usuń grupę"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupa"</item>
<item quantity="other" msgid="1276758425904917367">"Grupy: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Ustaw jako wartość domyślną"</string>
<string name="clear_default" msgid="7193185801596678067">"Wyczyść wartość domyślną"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst skopiowany"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Odrzuć zmiany"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Odrzucić zmiany?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Konfiguruj profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Przechowuj lokalnie"</string>
<string name="add_account" msgid="8201790677994503186">"Dodaj konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Dodaj nowe konto"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Połączenie nie zostało zrealizowane"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Numer poczty głosowej niedostępny"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Połączenie nie zostało zrealizowane"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Aby skonfigurować pocztę głosową, przejdź do Menu > Ustawienia."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Aby połączyć się z pocztą głosową, najpierw wyłącz tryb samolotowy."</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 72be05f..87d3a7e 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -41,7 +41,7 @@
<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">"Ligar a <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Telefonar para <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Editar"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contactos associados"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Eliminar contacto?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir toque"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas chm. para corr. de voz"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Não pode eliminar contactos de contas só de leitura, mas pode ocultá-los nas suas listas de contactos."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> seg"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactos frequentes"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Números de marcação frequente"</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="description_image_button_one" msgid="1740638037139856139">"um"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dois"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"menos"</string>
<string name="description_plus_button" msgid="515164827856229880">"mais"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Ver contacto"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Armazen. indisponível"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nenhum cartão SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nenhum armazen. encontrado."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Não foi encontrado nenhum cartão SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"A procurar vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar do cartão SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importar do armazenamento"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportar para o armazen."</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos os ficheiros VCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"A pesquisar dados de vCard no armazenamento..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"A pesquisar dados de vCard no cartão SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Não foi possível analisar o armazenamento"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Não foi possível analisar o cartão SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Não foi possível analisar o armazenamento. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Não foi possível analisar o cartão SD. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Erro de E/S"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"O compositor vCard não iniciou corretamente."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"A cancelar importação do vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancelar a importação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"A cancelar exportação do vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar a exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Imposs. cancel. import./export. do vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nomes dos contactos"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos a apresentar"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importar/exportar"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importar/export. contactos"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importar contactos"</string>
<string name="menu_share" msgid="943789700636542260">"Partilhar"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Todos os contactos"</string>
<string name="share_via" msgid="563121028023030093">"Partilhar contacto através de"</string>
<string name="share_error" msgid="948429331673358107">"Não é possível partilhar este contacto."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"intercalado a partir de <xliff:g id="COUNT">%0$d</xliff:g> origens"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Outro"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Associar contactos"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Associar o contacto actual ao contacto selecionado?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Editar contactos seleccionados"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Alternar para edição do contacto selecionado? A informação introduzida até agora vai ser copiada."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copiar para Os Meus Contactos"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar aos Meus Contactos"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"A carregar…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar novo contacto"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Iniciar sessão numa conta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importar contactos de um ficheiro"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Criar novo grupo"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Criar novo grupo]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Eliminar grupo"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupo"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Definir a predefinição"</string>
<string name="clear_default" msgid="7193185801596678067">"Limpar predefinição"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Rejeitar alterações"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Rejeitar as suas alterações?"</string>
<string name="call_type_and_date" msgid="1766269584078149149"></string>
<string name="profile_display_name" msgid="4127389543625918771">"Configurar o meu perfil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Manter localmente"</string>
<string name="add_account" msgid="8201790677994503186">"Adicionar conta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Adicionar nova conta"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Chamada não efetuada"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Número do correio de voz indisponível"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Chamada não efetuada"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Para configurar o correio de voz, aceda a Menu > Definições."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Para efetuar uma chamada para o correio de voz, desative primeiro o Modo de avião."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 4457755..3b6fa98 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Pesquisa"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Novo 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_callNumber" msgid="997146291983360266">"Ligar para <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Editar"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contatos"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contatos unificados"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Excluir contato?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir toque"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas as cham. p/ correio voz"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Não é possível excluir os contatos das contas somente leitura, mas você pode ocultá-los nas suas listas de contatos."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Chamados frequentemente"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Frequentemente chamado"</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="description_image_button_one" msgid="1740638037139856139">"um"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dois"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"menos"</string>
<string name="description_plus_button" msgid="515164827856229880">"mais"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Visualizar contato"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Armazenamento não disponível"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nenhum cartão SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nenhum armazenamento foi encontrado."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nenhum cartão SD foi encontrado."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Pesquisando vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar do cartão SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importar do armazenamento"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportar para o armazenamento"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importar todos os arquivos do vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Procurando dados do vCard no armazenamento..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Procurando dados do vCard no cartão SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Não foi possível verificar o armazenamento"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Não foi possível verificar o cartão SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Não foi possível verificar o armazenamento. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Não foi possível ler o cartão SD. (Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Erro E/S"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"O criador do vCard não iniciou corretamente."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"Cancelando a importação do vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancelar importação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Cancelando a exportação do vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Não foi poss. canc. imp./export. vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Contatos para exibição"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importar/exportar"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importar/Exportar contatos"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importar contatos"</string>
<string name="menu_share" msgid="943789700636542260">"Compartilhar"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Todos os contatos"</string>
<string name="share_via" msgid="563121028023030093">"Compartilhar contato via"</string>
<string name="share_error" msgid="948429331673358107">"Este contato não pode ser compartilhado."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"mesclado a partir de <xliff:g id="COUNT">%0$d</xliff:g> origens"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Outros"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Unir contatos"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Unir o contato atual ao contato selecionado?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Editar contatos selecionados"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Alternar para a edição do contato selecionado? As informações inseridas até agora serão copiadas."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copiar para Meus contatos"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar a Meus contatos"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Carregando…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar um novo contato"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Faça login em uma conta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importar contatos de um arquivo"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contatos"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Criar um novo grupo"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Criar um novo grupo]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Excluir grupo"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"Um grupo"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupos"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Definir padrão"</string>
<string name="clear_default" msgid="7193185801596678067">"Limpar padrão"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Descartar alterações"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Descartar as alterações?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g> "</string>
<string name="profile_display_name" msgid="4127389543625918771">"Configurar meu perfil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Manter localmente"</string>
<string name="add_account" msgid="8201790677994503186">"Adicionar conta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Adicionar nova conta"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Chamada não realizada"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Número de correio de voz indisponível"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Chamada não realizada"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Para configurar o correio de voz, vá para Menu > Configurações."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Para chamar o correio de voz, primeiro desative o modo avião."</string>
</resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index c68d667..c0c7f27 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -47,7 +47,8 @@
<string name="menu_search" msgid="9147752853603483719">"Tschertgar"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nov contact"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Mussar il contact"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Telefonar a(d) <xliff:g id="NAME">%s</xliff:g>"</string>
+ <!-- no translation found for menu_callNumber (997146291983360266) -->
+ <skip />
<string name="menu_addStar" msgid="2908478235715404876">"Agiuntar als favurits"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Allontanar dals favurits"</string>
<!-- no translation found for menu_editContact (9042415603857662633) -->
@@ -77,8 +78,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts proponids"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tut ils contacts"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Contacts unids"</string>
- <!-- no translation found for deleteConfirmation_title (1418215926447642260) -->
- <skip />
<!-- no translation found for menu_set_ring_tone (8728345772068064946) -->
<skip />
<!-- no translation found for menu_redirect_calls_to_vm (4181789196416396656) -->
@@ -245,7 +244,6 @@
<skip />
<!-- no translation found for favoritesFrequentCalled (6128306889600696124) -->
<skip />
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Agiuntar in contact"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Agiuntar «<xliff:g id="EMAIL">%s</xliff:g>» als contacts?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"in"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dus"</string>
@@ -271,14 +269,10 @@
<!-- no translation found for description_view_contact_detail (9133251213656414807) -->
<!-- no translation found for description_view_contact_detail (2795575601596468581) -->
<skip />
- <!-- no translation found for no_sdcard_title (8543619259870877473) -->
- <skip />
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Nagina carta SD"</string>
<!-- no translation found for no_sdcard_message (5242558018442357189) -->
<skip />
<!-- no translation found for no_sdcard_message (3357810406684913482) -->
<skip />
- <string name="searching_vcard_title" msgid="4970508055399376813">"Tschertgar datas vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importar da la carta SIM"</string>
<!-- no translation found for import_from_sdcard (8668347930577565175) -->
<skip />
@@ -292,10 +286,6 @@
<skip />
<!-- no translation found for searching_vcard_message (3962269894118092049) -->
<skip />
- <!-- no translation found for scanning_sdcard_failed_title (4944932641334764942) -->
- <skip />
- <!-- no translation found for scanning_sdcard_failed_title (6664940444476572612) -->
- <skip />
<!-- no translation found for scanning_sdcard_failed_message (7221682312959229201) -->
<skip />
<!-- no translation found for scanning_sdcard_failed_message (189023067829510792) -->
@@ -387,12 +377,8 @@
<!-- no translation found for fail_reason_could_not_open_file (2067725459821997463) -->
<skip />
<string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> da <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
- <!-- no translation found for cancel_import_confirmation_title (5578683596010294836) -->
- <skip />
<!-- no translation found for cancel_import_confirmation_message (3929951040347726757) -->
<skip />
- <!-- no translation found for cancel_export_confirmation_title (6516467140276768528) -->
- <skip />
<!-- no translation found for cancel_export_confirmation_message (1995462401949262638) -->
<skip />
<!-- no translation found for cancel_vcard_import_or_export_failed (6139900383366166706) -->
@@ -416,9 +402,9 @@
<skip />
<!-- no translation found for dialog_import_export (4360648034889921624) -->
<skip />
- <string name="menu_share" msgid="943789700636542260">"Cundivider"</string>
- <!-- no translation found for menu_all_contacts (5101735431586050711) -->
+ <!-- no translation found for dialog_import (2431698729761448759) -->
<skip />
+ <string name="menu_share" msgid="943789700636542260">"Cundivider"</string>
<string name="share_via" msgid="563121028023030093">"Cundivider in contact sur"</string>
<!-- no translation found for share_error (948429331673358107) -->
<skip />
@@ -602,12 +588,8 @@
<item quantity="other" msgid="425683718017380845">"1 contact fusiunà ord <xliff:g id="COUNT">%0$d</xliff:g> funtaunas"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Auter"</string>
- <!-- no translation found for aggregation_suggestion_join_dialog_title (5276699501316246253) -->
- <skip />
<!-- no translation found for aggregation_suggestion_join_dialog_message (3842757977671434836) -->
<skip />
- <!-- no translation found for aggregation_suggestion_edit_dialog_title (1064042382692091314) -->
- <skip />
<!-- no translation found for aggregation_suggestion_edit_dialog_message (6549585283910518095) -->
<skip />
<!-- no translation found for menu_copyContact (1573960845106822639) -->
@@ -671,14 +653,12 @@
<skip />
<!-- no translation found for contacts_unavailable_add_account (7911101713860139754) -->
<skip />
- <!-- no translation found for contacts_unavailable_import_contacts (4456440183590517471) -->
+ <!-- no translation found for contacts_unavailable_import_contacts (4957393255392437529) -->
<skip />
<!-- no translation found for create_group_dialog_title (6874527142828424475) -->
<skip />
<!-- no translation found for create_group_item_label (5218022006186243310) -->
<skip />
- <!-- no translation found for delete_group_dialog_title (7368429698398624427) -->
- <skip />
<!-- no translation found for num_groups_in_account:one (2944819210288517794) -->
<!-- no translation found for num_groups_in_account:other (1276758425904917367) -->
<!-- no translation found for delete_group_dialog_message (7586856514337560529) -->
@@ -697,8 +677,6 @@
<skip />
<!-- no translation found for toast_text_copied (5143776250008541719) -->
<skip />
- <!-- no translation found for cancel_confirmation_dialog_title (3950463632415908534) -->
- <skip />
<!-- no translation found for cancel_confirmation_dialog_message (5885724679874403115) -->
<skip />
<!-- no translation found for call_type_and_date (1766269584078149149) -->
@@ -820,11 +798,11 @@
<skip />
<!-- no translation found for add_new_account (5748627740680940264) -->
<skip />
- <!-- no translation found for dialog_phone_call_prohibited_title (2111395432187079579) -->
- <!-- no translation found for dialog_phone_call_prohibited_title (4313552620858880999) -->
- <skip />
- <!-- no translation found for dialog_voicemail_not_ready_title (7258109862329777060) -->
+ <!-- no translation found for dialog_phone_call_prohibited_message (6554711866586660441) -->
+ <!-- no translation found for dialog_phone_call_prohibited_message (4313552620858880999) -->
<skip />
<!-- no translation found for dialog_voicemail_not_ready_message (4384716252789515378) -->
<skip />
+ <!-- no translation found for dialog_voicemail_airplane_mode_message (530922773669546093) -->
+ <skip />
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 0133be3..aea4083 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Căutaţi"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Persoană nouă în agendă"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Vizualizaţi persoana din agendă"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Apelaţi <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Apelaţi <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Adăugaţi la lista de favorite"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eliminaţi din lista de favorite"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Editaţi"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Persoane din agendă sugerate"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Toate persoanele din agendă"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Persoanele din agendă au fost unite"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Ştergeţi contactul?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Setaţi ton apel"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Toate apel. către mesag. voc."</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Nu puteţi şterge persoane din agendă, din conturi cu permisiuni doar de citire, însă puteţi să le ascundeţi în lista dvs. de persoane din agendă."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frecvent contactate"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Frecvent apelate"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Adăugaţi o persoană în agendă"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adăugaţi „<xliff:g id="EMAIL">%s</xliff:g>” la persoanele din agendă?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"unu"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"doi"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Afişaţi persoana din agendă"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Stocare indisponibilă"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Niciun card SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Nu s-a găsit o stocare."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nu s-a găsit un card SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Se caută date în format vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importaţi de pe cardul SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importaţi din stocare"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportaţi în stocare"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importaţi toate fişierele vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Se caută date vCard în spaţiul de stocare..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Se caută date vCard pe cardul SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Nu s-a putut scana stocarea"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Nu s-a putut scana cardul SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Stocarea nu s-a putut scana. (Motivul: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Cardul SD nu a putut fi scanat. (Motivul: „<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Eroare I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Compozitorul vCard nu a pornit în mod corespunzător."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nu s-a putut deschide fişierul „<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> din <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (de) persoane din agendă"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Se anulează importul vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Anulaţi importul fişierului <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Se anulează exportul vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Anulaţi exportul fişierului <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Anulare import/export vCard nereuşită"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Numele persoanelor din agenda dvs."</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Persoane de contact de afişat"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importaţi/exportaţi"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Import/export contacte"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importaţi Agenda"</string>
<string name="menu_share" msgid="943789700636542260">"Distribuiţi"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Toată agenda"</string>
<string name="share_via" msgid="563121028023030093">"Distribuiţi persoana din agendă prin"</string>
<string name="share_error" msgid="948429331673358107">"Această persoană de contact nu poate fi distribuită."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Nume"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"au fost îmbinate din <xliff:g id="COUNT">%0$d</xliff:g> surse"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Altul"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Asociaţi intrările din Agendă"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Asociaţi intrarea curentă din agendă cu intrarea selectată?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Editaţi persoanele din agendă selectate"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Comutaţi la funcţia de editare a persoanei din agendă selectate? Informaţiile introduse până acum vor fi copiate."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Copiaţi în Agendă"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Adăugaţi în Agendă"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Se încarcă..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Creaţi o intrare nouă în Agendă"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Conectaţi-vă la un cont"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importaţi agenda din fişier"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importaţi Agenda"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Creaţi un grup nou"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Creaţi un grup nou]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Ştergeţi grupul"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grup"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> (de) grupuri"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Setaţi ca prestabilit"</string>
<string name="clear_default" msgid="7193185801596678067">"Ştergeţi datele prestabilite"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copiat"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Renunţaţi la modificări"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Renunţaţi la modificări?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Configuraţi profilul"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Păstraţi local"</string>
<string name="add_account" msgid="8201790677994503186">"Adăugaţi un cont"</string>
<string name="add_new_account" msgid="5748627740680940264">"Adăugaţi un cont nou"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Apelul nu a fost trimis"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Număr de mesagerie vocală indisponibil"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Apelul nu a fost trimis"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Pentru a configura mesageria vocală, accesaţi Meniu > Setări."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Pentru a apela mesageria vocală, mai întâi dezactivaţi modul Avion."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 82e5d07..f4edaaf 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"Позвонить: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Добавить в избранное"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Удалить из избранных"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Изменить"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагаемые контакты"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Все контакты"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Контакты объединены"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Удаление контакта"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Задать рингтон"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Только голос. почта"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Невозможно удалить контакты из аккаунта, доступного только для чтения, однако их можно скрыть в списках контактов."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g>:<xliff:g id="SECONDS">%s</xliff:g>"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Часто набираемые"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Часто вызываемые"</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="description_image_button_one" msgid="1740638037139856139">"один"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"два"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"минус"</string>
<string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Данные контакта"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Накопитель недоступен"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Нет SD-карты"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Хранилище не найдено."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"SD-карта не обнаружена."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Поиск vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Импортировать с SIM-карты"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Импорт из накопителя"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Экспорт на накопитель"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Импорт всех файлов VCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Поиск данных vCard на накопителе..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Поиск данных vCard на SD-карте..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Накопитель не просканирован"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD-карта не просканирована"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Не удалось просканировать накопитель. Причина: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Не удалось просканировать SD-карту. Причина: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Ошибка ввода-вывода"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Сбой при запуске редактора vCard."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не удалось открыть файл \"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"Отмена импорта vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Отменить импорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\"?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Отмена экспорта vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Отменить экспорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\"?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не удалось отменить импорт/экспорт vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Имена контактов"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Фильтр контактов"</string>
<string name="menu_import_export" msgid="26217871113229507">"Импорт/экспорт"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Импорт/экспорт контактов"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Импорт контактов"</string>
<string name="menu_share" msgid="943789700636542260">"Отправить"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Все контакты"</string>
<string name="share_via" msgid="563121028023030093">"Способ отправки"</string>
<string name="share_error" msgid="948429331673358107">"Не удалось передать данные."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Имя"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"объединено из нескольких источников (<xliff:g id="COUNT">%0$d</xliff:g>)"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Другое"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Объединить контакты"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Объединить текущий контакт с выбранным контактом?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Редактировать выбранные контакты"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Переключиться на редактирование выбранного контакта? Введенная информация будет скопирована."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Копировать в \"Мои контакты\""</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Добавить в группу \"Мои контакты\""</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Загрузка..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Создать новый контакт"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Войдите в аккаунт"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Импорт контактов из файла"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Импортировать контакты"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Создание новой группы"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Создать новую группу]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Удаление группы"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 группа"</item>
<item quantity="other" msgid="1276758425904917367">"Групп: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Установить по умолчанию"</string>
<string name="clear_default" msgid="7193185801596678067">"Удалить настройки по умолчанию"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текст скопирован"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Отмена изменений"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Отменить изменения?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Настроить профиль"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Сохранить локально"</string>
<string name="add_account" msgid="8201790677994503186">"Добавить аккаунт"</string>
<string name="add_new_account" msgid="5748627740680940264">"Добавить аккаунт"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Вызов не осуществляется"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Номер недоступен"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Вызов невозможен"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Чтобы настроить голосовую почту, выберите \"Меню > Настройки\"."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Сначала отключите режим полета."</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 831be68..360868a 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Hľadať"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nový kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Zobraziť kontakt"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Zavolať kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Volať <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Pridať medzi obľúbené položky"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Odstrániť z obľúbených"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Upraviť"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhnuté kontakty"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všetky kontakty"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kontakty boli spojené"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Odstrániť kontakt?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastaviť zvonenie"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Všetky hovory do hl. schránky"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Z účtov, ktoré sú iba na čítanie, nie je možné odstrániť kontakty. Tieto kontakty však môžete v zozname kontaktov skryť."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Najčastejšie používané kontakty"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Najčastejšie volané kontakty"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Pridať kontakt"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Chcete pridať „<xliff:g id="EMAIL">%s</xliff:g>“ medzi kontakty?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"jedna"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dva"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"mínus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Zobraziť kontakt"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Uklad. pr. je nedostupný"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Žiadna karta SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Ukladací priestor sa nenašiel."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Nenašla sa žiadna karta SD."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Vyhľadávanie karty vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importovať z karty SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Import z ukl. priestoru"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Export do uklad. priest."</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importovať všetky súbory vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Prebieha hľadanie údajov vizitky vCard v ukladacom priestore..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Prebieha hľadanie údajov vizitky vCard na karte SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Nepodarilo sa prehľadať ukladací priestor"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Nepodarilo sa prehľadať kartu SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Ukladací priestor sa nepodarilo prehľadať. (Dôvod: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Kartu SD sa nepodarilo prehľadať. (Dôvod: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Chyba I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Nástroj na tvorbu vizitiek vCard sa nespustil správne."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Súbor „<xliff:g id="FILE_NAME">%s</xliff:g>“ sa nepodarilo otvoriť: <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> kontaktov"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Prebieha rušenie importu vizitky vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Zrušiť importovanie súboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Prebieha rušenie exportu vizitky vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Zrušiť exportovanie súboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Importovanie/exportovanie karty vizitky vCard zlyhalo"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Mená vašich kontaktov"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty na zobrazenie"</string>
<string name="menu_import_export" msgid="26217871113229507">"Import a export"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importovať alebo exportovať kontakty"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Import kontaktov"</string>
<string name="menu_share" msgid="943789700636542260">"Zdieľať"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Všetky kontakty"</string>
<string name="share_via" msgid="563121028023030093">"Zdieľať kontakt pomocou"</string>
<string name="share_error" msgid="948429331673358107">"Tento kontakt nie je možné zdieľať."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Meno"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"zlúčené z <xliff:g id="COUNT">%0$d</xliff:g> zdrojov"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Iné"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Spojiť kontakty"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Spojiť aktuálny kontakt s vybraným kontaktom?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Upraviť vybrané kontakty"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prepnúť do režimu úpravy vybraného kontaktu? Doposiaľ zadané informácie budú skopírované."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Skopírovať do priečinka Moje kontakty"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Pridať medzi moje kontakty"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Načítava sa…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Vytvoriť nový kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Prihlásiť sa do účtu"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importovať kontakty zo súboru"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importovať kontakty"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Vytvoriť novú skupinu"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Vytvoriť novú skupinu]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Odstrániť skupinu"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"Počet skupín: 1"</item>
<item quantity="other" msgid="1276758425904917367">"Počet skupín: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Nastaviť ako predvolené"</string>
<string name="clear_default" msgid="7193185801596678067">"Vymazať predvolené nastavenia"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text bol skopírovaný"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Zahodiť zmeny"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Zahodiť zmeny?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Nastaviť môj profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Zachovať miestne"</string>
<string name="add_account" msgid="8201790677994503186">"Pridať účet"</string>
<string name="add_new_account" msgid="5748627740680940264">"Pridať nový účet"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Hovor nebol spojený"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Číslo hlasovej schránky je nedostupné"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Hovor nebol spojený"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Ak chcete nastaviť hlasovú schránku, prejdite na položku Menu > Nastavenia."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Ak chcete volať hlasovú schránku, najprv vypnite režim V lietadle."</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 7c988e3..8251bbd 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Iskanje"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nov stik"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Ogled stika"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Pokliči <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Pokliči <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Dodaj k priljubljenim"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Odstrani iz priljubljenih"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predlagani stiki"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Vsi stiki"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Stiki pridruženi"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Želite izbris. stik?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastavi zvonj."</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Vsi klici na odzivnik"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Iz računov samo za branje stikov ni mogoče izbrisati, lahko pa jih skrijete na seznamih stikov."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min, <xliff:g id="SECONDS">%s</xliff:g> s"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Pogosti stiki"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Pogosto klicani"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Dodaj stik"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Želite »<xliff:g id="EMAIL">%s</xliff:g>« dodati stikom?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"ena"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dva"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Ogled stika"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Pomnilnik ni na voljo"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Ni kartice SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Shrambe ni bilo mogoče najti."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Kartice SD ni mogoče najti"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Iskanje vizitke vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Uvozi s kartice SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Uvoz iz pomnilnika"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Izvoz v pomnilnik"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Uvozi vse datoteke vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Iskanje podatkov vCard v pomnilniku ..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Iskanje podatkov vCard na kartici SD ..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Pomnilnika ni bilo mogoče pregledati"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Kartice SD ni bilo mogoče pregledati"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Shrambe ni bilo mogoče pregledati. (Razlog: »<xliff:g id="FAIL_REASON">%s</xliff:g>«)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Kartice SD ni bilo mogoče pregledati. (Razlog: »<xliff:g id="FAIL_REASON">%s</xliff:g>«)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Napaka I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Urejevalnik za vCard se ni pravilno zagnal."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteke »<xliff:g id="FILE_NAME">%s</xliff:g>« ni bilo mogoče odpreti: <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> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> stikov"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Preklic uvoza kart. vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Želite preklicati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Preklic izvoza kart. vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Želite preklicati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Uvoza/izvoza vCard ni mogoče preklicati"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Imena stikov"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Stiki, ki naj bodo prikazani"</string>
<string name="menu_import_export" msgid="26217871113229507">"Uvoz/izvoz"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Uvoz/izvoz stikov"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Uvoz stikov"</string>
<string name="menu_share" msgid="943789700636542260">"Skupna raba"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Vsi stiki"</string>
<string name="share_via" msgid="563121028023030093">"Deli stik z drugimi prek"</string>
<string name="share_error" msgid="948429331673358107">"Tega stika ni mogoče dati v skupno rabo."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"spojeno iz <xliff:g id="COUNT">%0$d</xliff:g> virov"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Drugo"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Združevanje stikov"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Želite združiti stik z izbranim stikom?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Uredi izbrane stike"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Želite urejati izbrani stik? Podatki, ki ste jih doslej vnesli, bodo kopirani."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj v moje stike"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj v skupino »Moji stiki«"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Nalaganje …"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Ustvarjanje novega stika"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Prijava v račun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Uvoz stikov iz datoteke"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvozi stike"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Ustvarjanje nove skupine"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Ustvarjanje nove skupine]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Izbris skupine"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 skupina"</item>
<item quantity="other" msgid="1276758425904917367">"Št. skupin: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Nastavi za privzeto"</string>
<string name="clear_default" msgid="7193185801596678067">"Počisti privzeto"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Besedilo kopirano"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Zavrzi spremembe"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Ali želite zavreči spremembe?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Nastavi moj profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Ohrani lokalno"</string>
<string name="add_account" msgid="8201790677994503186">"Dodaj račun"</string>
<string name="add_new_account" msgid="5748627740680940264">"Dodaj nov račun"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Klic ni uspel"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Številka odzivnika ni na voljo"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Klic ni uspel"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Če želite nastaviti odzivnik, odprite Meni > Nastavitve."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Če želite poklicati odzivnik, najprej izklopite način za letalo."</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5b85e52..a8bdd39 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"Позови <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Додај у омиљене контакте"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Уклони из омиљених контаката"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Измени"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предложени контакти"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сви контакти"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Придружени контакти"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Желите ли да избришете контакт?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Подеси мелодију звона"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Сви позиви у говорну пошту"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Контакте у оквиру налога који су само за читање не можете да избришете, али можете да их сакријете на листи контаката."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често контактирани"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Често позивани"</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="description_image_button_one" msgid="1740638037139856139">"један"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"два"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"минус"</string>
<string name="description_plus_button" msgid="515164827856229880">"плус"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Прикажи контакт"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Меморија је недоступна"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Нема SD картице"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Није пронађена меморија."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Није пронађена ниједна SD картица."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Претрага дигиталне визиткарте"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Увези са SIM картице"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Увези из меморије"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Извези у меморију"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Увези све датотеке дигиталних визиткарата"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Тражење података о vCard датотеци у меморији..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"У току је претрага података о vCard датотекама на SD картици..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Није било могуће скенирати складиште"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Није било могуће скенирати SD картицу"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Није било могуће скенирати меморију. (Разлог: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Није било могуће скенирати SD картицу. (Разлог: „<xliff:g id="FAIL_REASON">%s</xliff:g>“)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Програм за израду vCard датотека се није исправно покренуо."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Није било могуће отворити датотеку „<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="cancel_import_confirmation_title" msgid="5578683596010294836">"Отказивање увоза датотеке"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Желите ли да откажете увоз датотеке <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Отказивање извоза vCard датотеке"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Желите ли да откажете извоз датотеке <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Није могуће отказати vCard увоз/извоз"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Имена контаката"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за приказ"</string>
<string name="menu_import_export" msgid="26217871113229507">"Увоз/извоз"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Увоз/извоз контаката"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Увоз контаката"</string>
<string name="menu_share" msgid="943789700636542260">"Дели"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Сви контакти"</string>
<string name="share_via" msgid="563121028023030093">"Дели контакт преко"</string>
<string name="share_error" msgid="948429331673358107">"Овај контакт не може да се дели."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"обједињено од <xliff:g id="COUNT">%0$d</xliff:g> извора"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Други"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Придружи контакте"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Желите ли да тренутни контакт придружите изабраном контакту?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Измена изабраних контаката"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Желите ли да пребаците на уређивање изабраног контакта? Биће копиране информације које сте унели до сада."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Копирај у моје контакте"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Додај у Моје контакте"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Учитавање…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Направи нови контакт"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Пријавите се на налог"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Увези контакте из датотеке"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Увези контакте"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Прављење нове групе"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Направи нову групу]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Избриши групу"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 група"</item>
<item quantity="other" msgid="1276758425904917367">"Група: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Постави на подразумевано"</string>
<string name="clear_default" msgid="7193185801596678067">"Обриши подразумевану вредност"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текст је копиран"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Одбацивање промена"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Желите ли да одбаците промене?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Подеси мој профил"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Задржи локално"</string>
<string name="add_account" msgid="8201790677994503186">"Додај налог"</string>
<string name="add_new_account" msgid="5748627740680940264">"Додај нови налог"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Позив није послат"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Број говорне поште није доступан"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Позив није послат"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Да бисте подесили говорну пошту, идите у Мени > Подешавања."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Да бисте позвали говорну пошту, прво искључите режим авионa."</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 09f3ead..275afea 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Sök"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Ny kontakt"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Visa kontakt"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Redigera"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Föreslagna kontakter"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alla kontakter"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Deltagande kontakter"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Ta bort kontakt?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Ställ in ringsignal"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alla samtal till röstbrevlådan"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Du kan inte ta bort kontakter från skrivskyddade konton, men du kan dölja dem i kontaktlistorna."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> minuter <xliff:g id="SECONDS">%s</xliff:g> sekunder"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Ofta kontaktade"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Ringer ofta"</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="description_image_button_one" msgid="1740638037139856139">"ett"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"två"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Visa kontakt"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Lagring otillgänglig"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Inget SD-kort"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Ingen lagringsenhet hittades."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Inget SD-kort hittades."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Söker efter vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Importera från SIM-kort"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Importera från lagring"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Exportera till lagring"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Importera alla vCard-filer"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Sökning efter vCard-data på lagringsenheten pågår ..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Söker efter vCard-data på SD-kort ..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Det gick inte att söka igenom lagringsenheten"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Det gick inte att söka igenom SD-kortet"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Det gick inte att skanna lagringsenheten. (Orsak: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Det gick inte att skanna SD-kortet. (Orsak: <xliff:g id="FAIL_REASON">%s</xliff:g>)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fel"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard-kompositören initierades inte korrekt."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"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="cancel_import_confirmation_title" msgid="5578683596010294836">"Avbryter vCard-import"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vill du avbryta importen av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Avbryter vCard-export"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vill du avbryta exporten av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Det gick inte att avbryta importen/exporten av vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Dina kontakters namn"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakter som ska visas"</string>
<string name="menu_import_export" msgid="26217871113229507">"Importera/exportera"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Importera/exportera kontakter"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Importera kontakter"</string>
<string name="menu_share" msgid="943789700636542260">"Dela"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Alla kontakter"</string>
<string name="share_via" msgid="563121028023030093">"Dela kontakt via"</string>
<string name="share_error" msgid="948429331673358107">"Den här kontakten kan inte delas."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Namn"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"kombinerade från <xliff:g id="COUNT">%0$d</xliff:g> källor"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Övrigt"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Kombinera kontakter"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Vill du kombinera kontakten med den markerade kontakten?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Redigera valda kontakter"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vill du fortsätta att redigera den markerade kontakten? Information som du har angett hittills kommer att kopieras."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopiera till mina kontakter"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Lägg till i mina kontakter"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Läser in …"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Skapa en ny kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Logga in på ett konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Importera kontakter från en fil"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importera kontakter"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Skapa ny grupp"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Skapa ny grupp]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Radera grupp"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grupp"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grupper"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Ange standard"</string>
<string name="clear_default" msgid="7193185801596678067">"Rensa standardinställningar"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texten har kopierats"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Ignorera ändringar"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Vill du ta bort ändringarna?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Skapa min profil"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Spara lokalt"</string>
<string name="add_account" msgid="8201790677994503186">"Lägg till ett konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Lägg till ett nytt konto"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Samtalet gick inte att koppla fram"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Röstbrevlådenumret är inte tillgängligt"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Samtalet gick inte att koppla fram"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Välj Meny > Inställningar om du vill konfigurera röstbrevlådan."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Om du vill ringa röstbrevlådan måste du först inaktivera flygplansläget."</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 8a34f62..3493770 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Tafuta"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Anwani mpya"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Tazama anwani"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Piga simu <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Piga simu <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Ongeza kwa vipendwa"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Ondoa kutoka kwa vipendwa vyako"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Hariri"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Anwani zilizopendekezwa"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Anwani zote"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Anwani zimeunganishwa"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Futa mwasiliani?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Weka mlio wa simu"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Simu zote kwa barua ya sauti"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Huwezi kufuta anwani kutoka kwa akaunti ya kusoma-tu, lakini unaweza kuzificha katika orodha zako za anwani."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"Dakika <xliff:g id="MINUTES">%s</xliff:g> sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Unaowasiliana nao zaidi"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Zinazopigwa mara kwa mara"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Ongeza anwani"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ongeza \"<xliff:g id="EMAIL">%s</xliff:g>\" kwa anwani?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"moja"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"mbili"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"kutoa"</string>
<string name="description_plus_button" msgid="515164827856229880">"jumlisha"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Angalia anwani"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Hifadhi haipatikani"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Hakuna kadi ya SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Hakuna hifadhi iliyopatikana."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Hakuna kadi ya SD iliyopatikana."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Inatafuta vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Ingiza kutoka kwa SIM kadi"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Leta kutoka kwa hifadhi"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Hamisha kwa hifadhi"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Ingiza faili zote za vKadi"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Inatafuta data ya vCard katika hifadhi..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Inatafuta data ya vKadi kwenye kadi ya SD"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Haikuweza kusafisha hifadhi"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Haikuweza kusafisha kadi ya SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Hifadhi haiku tambazwa. (Sababu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Kadi ya SD haikutambazwa.(Sababu: \" <xliff:g id="FAIL_REASON">%s</xliff:g> \")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Hitilafu ya I/O"</string>
@@ -275,9 +268,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Kitunzi cha vCard hakikuanza vizuri."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Haikuweza kufungua \"{<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> ya anwani <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Inaghairi uletaji vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Ghairi kuletwa kwa <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Inaghairi uhamishaji wa vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Ghairi kuhamishwa kwa <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Haikuweza kughairiwa kuleta/kuhamisha vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Majina ya anwani zako"</string>
@@ -293,8 +284,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Anwani za kuonyesha"</string>
<string name="menu_import_export" msgid="26217871113229507">"Leta/hamisha"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Leta/Hamisha wawasiliani"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Ingiza wasiliani"</string>
<string name="menu_share" msgid="943789700636542260">"Shiriki"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Wahusika wote"</string>
<string name="share_via" msgid="563121028023030093">"Shiriki anwani kupitia"</string>
<string name="share_error" msgid="948429331673358107">"Mwasiliani huyu hawezi kushirikishwa."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Jina"</string>
@@ -443,9 +434,7 @@
<item quantity="other" msgid="425683718017380845">"Zimeunganishwa kutoka kwa nyenzo <xliff:g id="COUNT">%0$d</xliff:g>"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Nyingineyo"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Unganisha anwani"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Unganisha anwani ya sasa na anwani iliyochaguliwa?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Hariri majina yaliyochaguliwa"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Badilisha kwa hariri anwani iliyochaguliwa? Maelezo uliyoyaingiza hadi sasa yatanakiliwa."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Nakili kwa Anwani Zangu"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Ongeza kwa Anwani Zangu"</string>
@@ -477,10 +466,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Inapakia…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Unda akaunti mpya"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Ingia katika akaunti"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Leta anwani kutoka kwa faili"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ingiza wasiliani"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Unda kikundi kipya"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Unda kikundi kipya]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Futa kikundi"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"Kikundi 1"</item>
<item quantity="other" msgid="1276758425904917367">"Vikundi <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -499,7 +487,6 @@
<string name="set_default" msgid="4417505153468300351">"Weka chaguo-msingi"</string>
<string name="clear_default" msgid="7193185801596678067">"Ondoa chaguo-msingi"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Maandishi yamenakiliwa"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Tupa mabadiliko"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Tupa mabadiliko yako?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"Kishika nafasi <xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Sanidi maelezo yangu mafupi"</string>
@@ -563,7 +550,7 @@
<string name="keep_local" msgid="1258761699192993322">"Weka karibu"</string>
<string name="add_account" msgid="8201790677994503186">"Ongeza akaunti"</string>
<string name="add_new_account" msgid="5748627740680940264">"Ongeza akaunti mpya"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Simu haijatumwa."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Nambari ya barua ya sauti haipatikani"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Simu haijatumwa"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Ili kusanidi ujumbe wa sauti, nenda kwa Menyu > Mipangilio."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Kupigia simu ujumbe wa sauti, kwanza lemaza hali ya ndege."</string>
</resources>
diff --git a/res/values-sw580dp/dimens.xml b/res/values-sw580dp/dimens.xml
index 3d3cb17..264565f 100644
--- a/res/values-sw580dp/dimens.xml
+++ b/res/values-sw580dp/dimens.xml
@@ -38,7 +38,7 @@
<dimen name="contact_browser_list_header_left_margin">@dimen/list_visible_scrollbar_padding</dimen>
<dimen name="contact_browser_list_header_right_margin">24dip</dimen>
<dimen name="list_visible_scrollbar_padding">48dip</dimen>
- <dimen name="account_filter_header_top_padding">@dimen/contact_browser_list_top_margin</dimen>
+ <dimen name="list_header_extra_top_padding">@dimen/contact_browser_list_top_margin</dimen>
<!-- Because the "join" screen has the vertical scroll bar on right,
we cannot use @dimen/contact_browser_list_header_left_margin as is. -->
diff --git a/res/values-sw580dp/styles.xml b/res/values-sw580dp/styles.xml
index bf5b137..2326d5f 100644
--- a/res/values-sw580dp/styles.xml
+++ b/res/values-sw580dp/styles.xml
@@ -95,6 +95,8 @@
<style name="JoinContactActivityTheme" parent="ContactPickerTheme" >
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
+ <!-- In the contact picker screen we're using adjustResize but we don't want it here. -->
+ <item name="android:windowSoftInputMode">adjustUnspecified</item>
</style>
<style name="ContactListFilterTheme" parent="@android:Theme.Holo.Light.Dialog">
@@ -113,7 +115,7 @@
<style name="DirectoryHeader" parent="PeopleTheme">
<item name="android:paddingTop">0dip</item>
- <item name="android:paddingBottom">0dip</item>
+
<item name="android:background">@android:color/transparent</item>
</style>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index bc46708..fc47008 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"โทร <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"เพิ่มในรายการโปรด"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"ลบจากรายการโปรด"</string>
<string name="menu_editContact" msgid="9042415603857662633">"แก้ไข"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"รายชื่อที่แนะนำ"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"รายชื่อในสมุดโทรศัพท์ทั้งหมด"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"รายชื่อที่รวมกัน"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"ลบรายชื่อหรือไม่"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"ตั้งเสียงเรียกเข้า"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"โอนทุกสายไปยังข้อความเสียง"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"คุณไม่สามารถลบรายชื่อติดต่อจากบัญชีแบบอ่านอย่างเดียวได้ แต่ซ่อนไว้ในรายการรายชื่อได้"</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> นาที <xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"ที่ติดต่อบ่อยครั้ง"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"มีการติดต่อบ่อย"</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="description_image_button_one" msgid="1740638037139856139">"หนึ่ง"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"สอง"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"ดูรายชื่อติดต่อ"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"ไม่มีที่เก็บข้อมูล"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"ไม่มีการ์ด SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"ไม่พบที่จัดเก็บข้อมูล"</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"ไม่พบการ์ด SD"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"กำลังค้นหา vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"นำเข้าจากซิมการ์ด"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"นำเข้าจากที่เก็บข้อมูล"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"ส่งออกไปยังที่เก็บข้อมูล"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"นำเข้าไฟล์ vCard ทั้งหมด"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"กำลังค้นหาข้อมูล vCard ในที่จัดเก็บข้อมูล..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"กำลังค้นหาข้อมูล vCard บนการ์ด SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"ไม่สามารถสแกนที่เก็บข้อมูล"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"ไม่สามารถสแกนการ์ด SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"ไม่สามารถสแกนที่จัดเก็บข้อมูล (สาเหตุ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"ไม่สามารถสแกนการ์ด SD (สาเหตุ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"ข้อผิดพลาด I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"โปรแกรมเขียนข้อความ vCard เริ่มการทำงานไม่ถูกต้อง"</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"ไม่สามารถเปิด \"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"การยกเลิกการนำเข้า vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"ยกเลิกการนำเข้า <xliff:g id="FILENAME">%s</xliff:g> หรือไม่"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"การยกเลิกการส่งออก vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"ยกเลิกการส่งออก <xliff:g id="FILENAME">%s</xliff:g> หรือไม่"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"ไม่สามารถยกเลิกการนำเข้า/ส่งออก vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"ชื่อของรายชื่อในสมุดโทรศัพท์ของคุณ"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"รายชื่อติดต่อที่จะแสดง"</string>
<string name="menu_import_export" msgid="26217871113229507">"นำเข้า/ส่งออก"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"นำเข้า/ส่งออกผู้ติดต่อ"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"นำเข้าสมุดโทรศัพท์"</string>
<string name="menu_share" msgid="943789700636542260">"ใช้ร่วมกัน"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"รายชื่อทั้งหมด"</string>
<string name="share_via" msgid="563121028023030093">"ใช้สมุดโทรศัพท์ร่วมกันทาง"</string>
<string name="share_error" msgid="948429331673358107">"ไม่สามารถแบ่งปันรายชื่อติดต่อนี้ได้"</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"ชื่อ"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"รวมจากแหล่งที่มา <xliff:g id="COUNT">%0$d</xliff:g> แหล่ง"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"อื่นๆ"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"รวมรายชื่อติดต่อ"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"รวมรายชื่อติดต่อปัจจุบันกับรายชื่อติดต่อที่เลือกหรือไม่"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"แก้ไขรายชื่อติดต่อที่เลือก"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"เปลี่ยนไปแก้ไขรายชื่อติดต่อที่เลือกหรือไม่ ข้อมูลที่คุณป้อนไว้จนถึงขณะนี้จะถูกคัดลอก"</string>
<string name="menu_copyContact" msgid="1573960845106822639">"คัดลอกไปยังสมุดโทรศัพท์ของฉัน"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"เพิ่มในสมุดโทรศัพท์ของฉัน"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"กำลังโหลด..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"สร้างที่อยู่ติดต่อใหม่"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"ลงชื่อเข้าใช้บัญชี"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"นำเข้าที่อยู่ติดต่อจากไฟล์"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"นำเข้าสมุดโทรศัพท์"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"สร้างกลุ่มใหม่"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[สร้างกลุ่มใหม่]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"ลบกลุ่ม"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 กลุ่ม"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> กลุ่ม"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"ตั้งเป็นค่าเริ่มต้น"</string>
<string name="clear_default" msgid="7193185801596678067">"ล้างจากค่าเริ่มต้น"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"คัดลอกข้อความแล้ว"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"ยกเลิกการเปลี่ยนแปลง"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"ยกเลิกการเปลี่ยนแปลงหรือไม่"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"ตั้งค่าโปรไฟล์ของฉัน"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"จัดเก็บในตัวเครื่อง"</string>
<string name="add_account" msgid="8201790677994503186">"เพิ่มบัญชี"</string>
<string name="add_new_account" msgid="5748627740680940264">"เพิ่มบัญชีใหม่"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"ไม่สามารถโทรออก"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"หมายเลขข้อความเสียงไม่พร้อมใช้งาน"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ไม่สามารถโทรออก"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"หากต้องการตั้งค่าข้อความเสียง ให้ไปที่เมนู > การตั้งค่า"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"หากต้องการฟังข้อความเสียง ให้ปิดโหมดใช้งานบนเครื่องบินก่อน"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 9518b61..26bde05 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Paghahanap"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Bagong contact"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Tingnan ang contact"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Tawagan si <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Tumawag sa <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Idagdag sa mga paborito"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Alisin mula sa mga paborito"</string>
<string name="menu_editContact" msgid="9042415603857662633">"I-edit"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mga iminumungkahing contact"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Lahat ng mga contact"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Mga pinagsamang contact"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Tanggalin ang contact?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Itakda ang ringtone"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Lahat ng tawag sa voicemail"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Hindi ka makakapagtanggal ng mga contact mula sa mga read-only na account, ngunit maitatago mo ang mga ito sa iyong mga listahan ng mga contact."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> (na) min <xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Madalas na kino-contact"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Madalas na tinatawagan"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Magdagdag ng contact"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Idagdag ang \"<xliff:g id="EMAIL">%s</xliff:g>\" sa mga contact?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"isa"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"dalawa"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"minus"</string>
<string name="description_plus_button" msgid="515164827856229880">"plus"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Tingnan ang contact"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Hindi available ang imbakan"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Walang SD card"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Walang natagpuang storage."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Walang natagpuang SD card."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Paghahanap ng vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"I-import mula sa SIM card"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"I-import mula sa imbakan"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"I-export sa imbakan"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"I-import ang lahat ng mga vCard file"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Naghahanap ng data ng vCard sa storage…"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Naghahanap ng data ng vCard data sa SD card…"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Hindi ma-scan ang storage"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Hindi ma-scan ang SD card"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Hindi ma-scan ang storage. (Dahilan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Hindi ma-scan ang SD card. (Dahilan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O na error"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Hindi nagsimula nang tama ang composer ng vCard."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Hindi mabuksan ang \"<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> ng <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (na) contact"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Pagkansela ng pag-import ng vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Kanselahin ang pag-import ng <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Pagkansela ng pag-export ng vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kanselahin ang pag-export ng <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Di makansela pag-import/pag-export vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Mga pangalan ng iyong mga contact"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Mga contact na ipapakita"</string>
<string name="menu_import_export" msgid="26217871113229507">"Mag-import/mag-export"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Mag-import/mag-export ng mga contact"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Mag-import ng mga contact"</string>
<string name="menu_share" msgid="943789700636542260">"Ibahagi"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Lahat ng contact"</string>
<string name="share_via" msgid="563121028023030093">"Ibahagi ang contact sa pamamagitan ng"</string>
<string name="share_error" msgid="948429331673358107">"Hindi maibabahagi ang contact na ito."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Pangalan"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"pinagsama mula sa <xliff:g id="COUNT">%0$d</xliff:g> (na) pinagmumulan"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Iba pa"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Sumali sa mga contact"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Isama ang kasalukuyang contact sa piniling contact?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"I-edit ang napiling mga contact"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Lumipat sa pag-edit ng napiling contact? Kokopyahin ang impormasyong ipinasok mo sa ngayon."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopyahin sa Aking Mga Contact"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Idagdag sa Aking Mga Contact"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Naglo-load…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Lumikha ng bagong contact"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Mag-sign in sa isang account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Pag-import ng mga contact mula sa isang file"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Mag-import ng mga contact"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Lumikha ng bagong pangkat"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Lumikha ng bagong pangkat]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Tanggalin ang pangkat"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 pangkat"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> (na) pangkat"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Itakda ang default"</string>
<string name="clear_default" msgid="7193185801596678067">"I-clear ang default"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Kinopya ang teksto"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Itapon ang mga pagbabago"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Itapon ang iyong mga pagbabago?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"I-set up ang aking profile"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Panatilihing lokal"</string>
<string name="add_account" msgid="8201790677994503186">"Magdagdag ng account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Magdagdag ng bagong account"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Hindi naipadala ang tawag"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Hindi available ang numero ng voicemail"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Hindi naipadala ang tawag"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Upang mag-set up ng voicemail, pumunta sa Menu > Mga Setting."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Upang tumawag sa voicemail, i-off muna ang Airplane mode."</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 92285fd..cfde701 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -41,7 +41,7 @@
<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">"Ara: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Çağrı yap: <xliff:g id="NUMBER">%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_editContact" msgid="9042415603857662633">"Düzenle"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Önerilen kişiler"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tüm kişiler"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Kişiler birleştirildi"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Kişi silinsin mi?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Zil sesi ayarla"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Sesli mesaja gelen tüm çağrlr"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Kişileri salt okunur hesaplardan silemezsiniz, ancak bu kişileri kişiler listenizde gizleyebilirsiniz."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> dak <xliff:g id="SECONDS">%s</xliff:g> sn"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sık iletişim kurulanlar"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Sık arananlar"</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="description_image_button_one" msgid="1740638037139856139">"bir"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"iki"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"eksi"</string>
<string name="description_plus_button" msgid="515164827856229880">"artı"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Kişiyi görüntüle"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Depolama birimi yok"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"SD kart yok"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Depolama birimi bulunamadı."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"SD kart bulunamadı."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"vCard aranıyor"</string>
<string name="import_from_sim" msgid="3859272228033941659">"SIM karttan içe aktar"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Depl biriminden içe aktar"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Depolama birimine aktar"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Tüm vCard dosyalarını içe aktar"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Depolama birimindeki vCard verileri aranıyor..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"SD kartta vCard verileri aranıyor..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Depolama birimi taranamadı"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"SD kart taranamadı"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Depolama biriminiz taranamadı. (Nedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"SD kart taranamadı. (Nedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"G/Ç Hatası"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard oluşturucu düzgün başlamadı."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" açılamadı: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
<string name="exporting_contact_list_progress" msgid="560522409559101193">"Toplam <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kişiden <xliff:g id="CURRENT_NUMBER">%s</xliff:g> kişi"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"vCard içe aktarmayı iptal etme"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> dosyasının içe aktarılması iptal edilsin mi?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"vCard dışa aktarmayı iptal etme"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> dosyasının dışa aktarılması iptal edilsin mi?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"İçe/dışa aktrma işlmi iptl edilemedi"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Kişilerinizin adları"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Görüntülenecek kişiler"</string>
<string name="menu_import_export" msgid="26217871113229507">"İçe/Dışa Aktar"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Kişileri içe/dışa aktar"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Kişileri içe aktar"</string>
<string name="menu_share" msgid="943789700636542260">"Paylaş"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Tüm kişiler"</string>
<string name="share_via" msgid="563121028023030093">"Şunu kullanarak kişi paylaş:"</string>
<string name="share_error" msgid="948429331673358107">"Bu kişi paylaşılamıyor."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Ad"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"<xliff:g id="COUNT">%0$d</xliff:g> kaynaktan birleştirildi"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Diğer"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Kişileri birleştir"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Mevcut kişi, seçili kişiyle birleştirilsin mi?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Seçili kişileri düzenle"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Seçili kişiyi düzenlemeye geçilsin mi? Şimdiye kadar girdiğiniz bilgiler kopyalanacak."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kişilerime kopyala"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Kişilerime ekle"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Yükleniyor..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Yeni kişi oluştur"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Bir hesapta oturum açın"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Bir dosyadaki kişileri içe aktar"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kişileri içe aktar"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Yeni grup oluştur"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Yeni grup oluştur]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Grubu sil"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 grup"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> grup"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Varsayılan olarak ayarla"</string>
<string name="clear_default" msgid="7193185801596678067">"Varsayılanları temizle"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Metin kopyalandı"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Değişiklikleri sil"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Değişiklikleriniz silinsin mi?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Profilimi ayarla"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Yerel olarak sakla"</string>
<string name="add_account" msgid="8201790677994503186">"Hesap ekle"</string>
<string name="add_new_account" msgid="5748627740680940264">"Yeni hesap ekle"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Çağrı yapılamadı"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Sesli mesaj numarası kullanılamıyor"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Çağrı yapılamadı"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Sesli mesajı yapılandırmak için Menü > Ayarlar\'a gidin."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Sesli mesaja çağrı yapmak için öncelikle Uçak modunu kapatın."</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index dbc26fa..956fb41 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"Телефонувати <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Додати до вибраного"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Видалити з вибраного"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Редагувати"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Пропоновані контакти"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усі контакти"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Контакти об\'єднано"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Видалити контакт?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Установ.мелодію"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Усі виклики на голосову пошту"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Неможливо видалити контакти з облікових записів \"лише для читання\", але можна сховати їх у списках контактів."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> хв. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Часті контакти"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Часті виклики"</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="description_image_button_one" msgid="1740638037139856139">"один"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"два"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"мінус"</string>
<string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Переглянути контакт"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Пам’ять недоступна"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Нема карти SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Пам’ять не знайдено."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Карту SD не знайдено."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Пошук даних vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Імортув. з SIM-карти"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Імпорт із пам’яті"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Експорт у пам’ять"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Імпортув. всі файли vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Пошук даних vCard у пам’яті..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Пошук даних vCard на карті SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Не вдалося просканувати пам’ять"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Не вдалося просканувати карту SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Не вдалося сканувати пам’ять. (Причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Не вдалося сканувати карту SD. (Причина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Помилка вводу/виводу"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Майстер vCard не запущено належним чином."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не вдалося відкрити файл \"<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="cancel_import_confirmation_title" msgid="5578683596010294836">"Скасування імпорту vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Скасувати імпорт файлу <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Скасування експорту vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Скасувати експорт файлу <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не вдалося скасув. імпорт/експорт vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Імена ваших контактів"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти для показу"</string>
<string name="menu_import_export" msgid="26217871113229507">"Імпорт або експорт"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Імпорт/експорт контактів"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Імпорт контактів"</string>
<string name="menu_share" msgid="943789700636542260">"Надісл."</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Усі контакти"</string>
<string name="share_via" msgid="563121028023030093">"Надісл. контакт через"</string>
<string name="share_error" msgid="948429331673358107">"Цей контакт неможливо надіслати."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Ім\'я"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"об\'єднано з джерел: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Інші"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Об\'єднати контакти"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Об\'єднати поточний контакт із вибраним контактом?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Редагувати вибрані контакти"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Перейти до редагування вибраного контакта? Введену досі інформацію буде скопійовано."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Копіювати в мої контакти"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Додати до групи \"Мої контакти\""</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Завантаження..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Створити новий контакт"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Увійти в обліковий запис"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Імпортувати контакти з файлу"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Імпортувати контакти"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Створити нову групу"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Створити нову групу]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Видалити групу"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 група"</item>
<item quantity="other" msgid="1276758425904917367">"Груп: <xliff:g id="COUNT">%0$d</xliff:g>"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Установити за умовчанням"</string>
<string name="clear_default" msgid="7193185801596678067">"Очистити налаштування за умовчанням"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текст скопійовано"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Відхилити зміни"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Відхилити зміни?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Налаштувати профіль"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Зберегти локально"</string>
<string name="add_account" msgid="8201790677994503186">"Додати обліковий запис"</string>
<string name="add_new_account" msgid="5748627740680940264">"Додати новий обліковий запис"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Виклик не здійснено"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Номер голосової пошти не доступний"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Виклик не здійснено"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Щоб налаштувати голосову пошту, перейдіть у Меню > Налаштування."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Щоб перевірити голосову пошту, спочатку вимкніть режим польоту."</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 74da6cd..7be25f1 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Tìm kiếm"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Liên hệ mới"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Xem liên hệ"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Gọi <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Gọi <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Thêm vào mục ưa thích"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Xóa khỏi mục ưa thích"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Chỉnh sửa"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Liên hệ được đề xuất"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tất cả liên hệ"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Danh bạ đã được kết hợp"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Xóa địa chỉ liên hệ?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Đặt nhạc chuông"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Các cuộc gọi tới thư thoại"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Bạn không thể xóa địa chỉ liên hệ từ tài khoản chỉ đọc, nhưng bạn có thể ẩn chúng trong danh sách địa chỉ liên hệ của mình."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> phút <xliff:g id="SECONDS">%s</xliff:g> giây"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Thường xuyên được liên hệ"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Thường xuyên được gọi"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Thêm liên hệ"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Thêm \"<xliff:g id="EMAIL">%s</xliff:g>\" vào danh bạ?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"một"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"hai"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"trừ"</string>
<string name="description_plus_button" msgid="515164827856229880">"cộng"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Xem địa chỉ liên hệ"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Bộ nhớ không khả dụng"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Không có thẻ SD nào"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Không tìm thấy bộ nhớ nào."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Không tìm thấy thẻ SD nào."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Đang tìm kiếm vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Nhập từ thẻ SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Nhập từ bộ nhớ"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Xuất sang bộ nhớ"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Nhập tất cả tệp vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Đang tìm kiếm dữ liệu vCard trong bộ nhớ..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Đang tìm dữ liệu vCard trên thẻ SD..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Không thể quét bộ nhớ"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Không thể quét thẻ SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Không thể quét bộ nhớ. (Lý do: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Không thể quét thẻ SD. (Lý do: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Lỗi I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Trình soạn vCard không khởi động đúng."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Không thể mở \"<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> trong tổng số <xliff:g id="TOTAL_NUMBER">%s</xliff:g> liên hệ"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Hủy nhập vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Hủy yêu cầu nhập <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Hủy xuất vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Hủy yêu cầu xuất <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Không thể nhập/xuất vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Tên danh bạ của bạn"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Danh sách liên hệ để hiển thị"</string>
<string name="menu_import_export" msgid="26217871113229507">"Nhập/xuất"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Nhập/xuất danh bạ"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Nhập danh bạ"</string>
<string name="menu_share" msgid="943789700636542260">"Chia sẻ"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Tất cả liên hệ"</string>
<string name="share_via" msgid="563121028023030093">"Chia sẻ liên hệ qua"</string>
<string name="share_error" msgid="948429331673358107">"Không thể chia sẻ địa chỉ liên hệ này."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Tên"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"được hợp nhất từ <xliff:g id="COUNT">%0$d</xliff:g> nguồn"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Khác"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Kết hợp danh bạ"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Kết hợp địa chỉ liên hệ hiện tại với địa chỉ liên hệ đã chọn?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Chỉnh sửa địa chỉ liên hệ đã chọn"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Chuyển sang chỉnh sửa liên hệ đã chọn? Thông tin bạn đã nhập đến giờ sẽ được sao chép."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Sao chép vào Danh bạ của tôi"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Thêm vào Danh bạ của tôi"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Đang tải…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Tạo địa chỉ liên hệ mới"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Đăng nhập vào tài khoản"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Nhập danh bạ từ một tệp"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Nhập danh bạ"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Tạo nhóm mới"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Tạo nhóm mới]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Xóa nhóm"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 nhóm"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> nhóm"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Đặt mặc định"</string>
<string name="clear_default" msgid="7193185801596678067">"Xóa mặc định"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Đã sao chép văn bản"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Hủy thay đổi"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Hủy các thay đổi của bạn?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Thiết lập tiểu sử của tôi"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Lưu trữ cục bộ"</string>
<string name="add_account" msgid="8201790677994503186">"Thêm tài khoản"</string>
<string name="add_new_account" msgid="5748627740680940264">"Thêm tài khoản mới"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Không thể thực hiện cuộc gọi"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Số thư thoại không khả dụng"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Không thể thực hiện cuộc gọi"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Để thiết lập thư thoại, đi tới Trình đơn > Cài đặt."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Để gọi thư thoại, trước tiên hãy tắt chế độ trên Máy bay."</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 381ffb0..73cc6ac 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"拨打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"添加到收藏"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"从收藏中删除"</string>
<string name="menu_editContact" msgid="9042415603857662633">"修改"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建议的联系人"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有联系人"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"已合并联系人"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"要删除联系人吗?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"设置铃声"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"所有来电转至语音信箱"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"您无法删除只读帐户中的联系人,但可以在联系人列表中将他们隐藏。"</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"经常联系的人"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"经常呼叫的联系人"</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="description_image_button_one" msgid="1740638037139856139">"一"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"二"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"删除"</string>
<string name="description_plus_button" msgid="515164827856229880">"添加"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"查看联系人"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"存储设备不存在"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"无 SD 卡"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"未找到任何存储设备。"</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"未找到 SD 卡。"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"正在搜索 vCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"从 SIM 卡导入"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"从存储设备导入"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"导出到存储设备"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"导入所有 vCard 文件"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"正在从存储设备中搜索 vCard 文件..."</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"正在 SD 卡中搜索 vCard 数据..."</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"无法扫描存储设备"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"无法扫描 SD 卡"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"无法扫描该存储设备。(原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"无法扫描该 SD 卡。(原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”)"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 错误"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard 制作程序未正确启动。"</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"无法打开“<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="cancel_import_confirmation_title" msgid="5578683596010294836">"取消导入 vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"要取消导入 <xliff:g id="FILENAME">%s</xliff:g> 吗?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"取消导出 vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"要取消导出 <xliff:g id="FILENAME">%s</xliff:g> 吗?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"无法取消导入/导出 vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"联系人姓名"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"要显示的联系人"</string>
<string name="menu_import_export" msgid="26217871113229507">"导入/导出"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"导入/导出联系人"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"导入联系人"</string>
<string name="menu_share" msgid="943789700636542260">"分享"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"所有联系人"</string>
<string name="share_via" msgid="563121028023030093">"联系人分享方式"</string>
<string name="share_error" msgid="948429331673358107">"无法分享此联系人。"</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"姓名"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"合并自 <xliff:g id="COUNT">%0$d</xliff:g> 个来源"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"其他"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"合并联系人"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"要合并当前联系人与所选联系人吗?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"编辑所选联系人"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切换至编辑所选联系人吗?系统会复制您到目前为止输入的所有信息。"</string>
<string name="menu_copyContact" msgid="1573960845106822639">"复制到“我的联系人”"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"添加到“我的联系人”"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"正在加载..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"创建新联系人"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"登录帐户"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"从文件导入联系人"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"导入联系人"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"创建新群组"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[创建新群组]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"删除群组"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 个群组"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> 个群组"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"设置默认值"</string>
<string name="clear_default" msgid="7193185801596678067">"清除默认值"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"文本已复制"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"舍弃更改"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"要舍弃您所做的更改吗?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"设置我的个人资料"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"本地保存"</string>
<string name="add_account" msgid="8201790677994503186">"添加帐户"</string>
<string name="add_new_account" msgid="5748627740680940264">"添加新帐户"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"呼叫未发出"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"语音信箱号码不可用"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"电话未拨出"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"要设置语音信箱,请转到“菜单”>“设置”。"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"要呼叫语音信箱,请先关闭飞行模式。"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 072daec..72166f0 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -41,7 +41,7 @@
<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="997146291983360266">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"新增至我的最愛"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"從我的最愛中移除"</string>
<string name="menu_editContact" msgid="9042415603857662633">"編輯"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建議聯絡人"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有聯絡人"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"已合併聯絡人"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"確定要刪除聯絡人?"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"設定電話鈴聲"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"將所有來電轉到語音信箱"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"您無法刪除唯讀帳戶的聯絡人,但可在聯絡人清單中隱藏這些聯絡人。"</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"常用聯絡人"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"常用聯絡人"</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="description_image_button_one" msgid="1740638037139856139">"1"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"2"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"負號"</string>
<string name="description_plus_button" msgid="515164827856229880">"加號"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"查看聯絡人"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"儲存裝置無法使用"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"無 SD 卡"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"找不到任何儲存裝置。"</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"找不到 SD 卡。"</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"正在搜尋 VCard"</string>
<string name="import_from_sim" msgid="3859272228033941659">"從 SIM 卡匯入"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"從儲存裝置匯入"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"匯出到儲存裝置"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"匯入所有 vCard 檔案"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"正在搜尋儲存裝置中的 vCard 資料…"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"正在 SD 卡上搜尋 vCard 資料…"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"無法掃描儲存裝置"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"無法掃描 SD 卡"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"無法掃描儲存裝置 (原因:<xliff:g id="FAIL_REASON">%s</xliff:g>)。"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"無法掃描 SD 卡 (原因:<xliff:g id="FAIL_REASON">%s</xliff:g>)。"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 錯誤"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"vCard 編輯器並未正確啟動。"</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"無法開啟「<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="cancel_import_confirmation_title" msgid="5578683596010294836">"取消匯入 vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"確定要取消匯入 <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"取消匯出 vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"確定要取消匯出 <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"無法取消匯入/匯出 vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"要顯示的聯絡人"</string>
<string name="menu_import_export" msgid="26217871113229507">"匯入/匯出"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"匯入/匯出聯絡人"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"匯入聯絡人"</string>
<string name="menu_share" msgid="943789700636542260">"分享"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"所有聯絡人"</string>
<string name="share_via" msgid="563121028023030093">"使用下列應用程式分享聯絡人資訊:"</string>
<string name="share_error" msgid="948429331673358107">"無法分享這位聯絡人。"</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"姓名"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"從 <xliff:g id="COUNT">%0$d</xliff:g> 個來源合併"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"其他"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"合併聯絡人"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"要將目前聯絡人與所選聯絡人合併嗎?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"編輯所選聯絡人"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切換至編輯所選聯絡人嗎?系統會為您複製目前已輸入的資訊。"</string>
<string name="menu_copyContact" msgid="1573960845106822639">"複製到我的通訊錄"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"新增至我的聯絡人"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"載入中…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"建立新聯絡人"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"登入帳戶"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"從檔案匯入聯絡人"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"匯入聯絡人"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"建立新群組"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[建立新群組]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"刪除群組"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 個群組"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> 個群組"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"設為預設值"</string>
<string name="clear_default" msgid="7193185801596678067">"清除預設值"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"文字已複製"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"捨棄變更"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"確定要捨棄變更?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"設定我的個人資料"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"儲存在本機中"</string>
<string name="add_account" msgid="8201790677994503186">"新增帳戶"</string>
<string name="add_new_account" msgid="5748627740680940264">"新增帳戶"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"未送出通話要求"</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"語音信箱號碼無法使用"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"無法撥號"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"如要設定語音信箱,請前往 [選單] > [設定]。"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"如要聽語音留言,請先關閉飛行模式。"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 441e192..23e720e 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -41,7 +41,7 @@
<string name="menu_search" msgid="9147752853603483719">"Sesha"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Othintana naye omusha"</string>
<string name="menu_viewContact" msgid="2795575601596468581">"Buka othintana naye"</string>
- <string name="menu_callNumber" msgid="5142851348489387516">"Shayela <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Shayela u-<xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Engeza ezintandokazini"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Susa ezintandokazini"</string>
<string name="menu_editContact" msgid="9042415603857662633">"Hlela"</string>
@@ -62,7 +62,6 @@
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Othintana nabo abasikiselwayo"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bonke othintana nabo"</string>
<string name="contactsJoinedMessage" msgid="7208148163607047389">"Othintana nabo abahlanganisiwe"</string>
- <string name="deleteConfirmation_title" msgid="1418215926447642260">"Susa othintana naye"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Hlela iringithoni"</string>
<string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Wonke amakholi aya kwimeyili yezwi"</string>
<string name="readOnlyContactWarning" msgid="7808825687289848259">"Awukwazi ukususa othintana nabo ema-akhawuntini okufunda kuphela, kodwa ungabafihla ohlwini lwakho loxhumana nabo."</string>
@@ -186,7 +185,6 @@
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> amaminithi <xliff:g id="SECONDS">%s</xliff:g> amasekhondi"</string>
<string name="favoritesFrequentContacted" msgid="6184232487472425690">"Abathintwa njalo"</string>
<string name="favoritesFrequentCalled" msgid="6128306889600696124">"Abashayelwa njalo"</string>
- <string name="add_contact_dlg_title" msgid="2896685845822146494">"Faka othintana naye"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Faka \"<xliff:g id="EMAIL">%s</xliff:g>\" kothintana nabo?"</string>
<string name="description_image_button_one" msgid="1740638037139856139">"kunye"</string>
<string name="description_image_button_two" msgid="5882638439003731308">"okubili"</string>
@@ -209,11 +207,8 @@
<string name="description_minus_button" msgid="387136707700230172">"susa"</string>
<string name="description_plus_button" msgid="515164827856229880">"kuhlanganise"</string>
<string name="description_view_contact_detail" msgid="9133251213656414807">"Buka othintana naye"</string>
- <string name="no_sdcard_title" product="nosdcard" msgid="8543619259870877473">"Isitoreji asitholakali"</string>
- <string name="no_sdcard_title" product="default" msgid="5911758680339949273">"Alikho ikhadi le-SD"</string>
<string name="no_sdcard_message" product="nosdcard" msgid="5242558018442357189">"Ayikho indawo yokulondoloza etholakele."</string>
<string name="no_sdcard_message" product="default" msgid="3357810406684913482">"Alikho ikhadi le-SD elitholakele."</string>
- <string name="searching_vcard_title" msgid="4970508055399376813">"Iseshela i-vCArd"</string>
<string name="import_from_sim" msgid="3859272228033941659">"Ngenisa kusuka kwikhadi le-SIM"</string>
<string name="import_from_sdcard" product="default" msgid="8668347930577565175">"Ngenisa kusuka esigcineni"</string>
<string name="export_to_sdcard" product="default" msgid="6092815580965201089">"Thekelisa kusigcini"</string>
@@ -223,8 +218,6 @@
<string name="import_all_vcard_string" msgid="5518136113853448474">"Ngenisa wonke amafayela e-vCard"</string>
<string name="searching_vcard_message" product="nosdcard" msgid="557077639409584945">"Isesha idatha ye-vCard kusigcini"</string>
<string name="searching_vcard_message" product="default" msgid="3962269894118092049">"Iseshela idatha ye-vCard ekhadini le-SD"</string>
- <string name="scanning_sdcard_failed_title" product="nosdcard" msgid="4944932641334764942">"Yehlulekile ukufinyelela kwindawo yokugcina i-USB"</string>
- <string name="scanning_sdcard_failed_title" product="default" msgid="6664940444476572612">"Yehlulekile ukuskena ikhadi le-SD"</string>
<string name="scanning_sdcard_failed_message" product="nosdcard" msgid="7221682312959229201">"Isilondolozi asiskeneknga. (Isizathu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="scanning_sdcard_failed_message" product="default" msgid="189023067829510792">"Ikhadi le-SD aliskenekanga. (Isizathu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")"</string>
<string name="fail_reason_io_error" msgid="6748358842976073255">"Iphutha le-I/O"</string>
@@ -273,9 +266,7 @@
<string name="composer_not_initialized" msgid="2321648986367005254">"Umqambi we-Vcard akazange aqale ngendlela efanele."</string>
<string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ayikwazi ukuvula \"<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> kothintana nabo abangu-<xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="cancel_import_confirmation_title" msgid="5578683596010294836">"Ikhansela ukungenisa i-vCard"</string>
<string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Misa ukulndwa kwe <xliff:g id="FILENAME">%s</xliff:g>?"</string>
- <string name="cancel_export_confirmation_title" msgid="6516467140276768528">"Ikhansela ukuthekelisa i-vCard"</string>
<string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Misa ukulandwa kwe <xliff:g id="FILENAME">%s</xliff:g>?"</string>
<string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Yehlulekile ukukhansela ukungenisa/thekelisa i-vCard"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Amagama othintana nabo"</string>
@@ -291,8 +282,8 @@
<string name="menu_contacts_filter" msgid="2165153460860262501">"Othintana nabo abazoboniswa"</string>
<string name="menu_import_export" msgid="26217871113229507">"Ngenisa/Thekelisa"</string>
<string name="dialog_import_export" msgid="4360648034889921624">"Ngenisa/Thekelisa othintana nabo"</string>
+ <string name="dialog_import" msgid="2431698729761448759">"Ngenisa othintana nabo"</string>
<string name="menu_share" msgid="943789700636542260">"Yabelana"</string>
- <string name="menu_all_contacts" msgid="5101735431586050711">"Bonke oxhumana nabo"</string>
<string name="share_via" msgid="563121028023030093">"Abelana nothintana naye nge"</string>
<string name="share_error" msgid="948429331673358107">"Lona oxhumana naye ngeke ukwazi ukwabelana ngaye."</string>
<string name="nameLabelsGroup" msgid="2034640839640477827">"Igama"</string>
@@ -441,9 +432,7 @@
<item quantity="other" msgid="425683718017380845">"ihlanganiswe kusuka emithombeni engu-<xliff:g id="COUNT">%0$d</xliff:g>"</item>
</plurals>
<string name="local_invisible_directory" msgid="6046691709127661065">"Okunye"</string>
- <string name="aggregation_suggestion_join_dialog_title" msgid="5276699501316246253">"Joyina othintana nabo"</string>
<string name="aggregation_suggestion_join_dialog_message" msgid="3842757977671434836">"Joyina othintana naye wamanje nothintana naye okhethiwe?"</string>
- <string name="aggregation_suggestion_edit_dialog_title" msgid="1064042382692091314">"Hlela ama-akhawunti akhethiwe"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Shintshela ekuhleleni othintana naye okhethiwe? Ulwazi olufakile kuze kube manje luzokopishwa."</string>
<string name="menu_copyContact" msgid="1573960845106822639">"Kopisha kwengithintana nabo"</string>
<string name="add_to_my_contacts" msgid="1068274916793627723">"Faka Kothintana Nabo"</string>
@@ -475,10 +464,9 @@
<string name="social_widget_loading" msgid="5327336597364074608">"Iyalayisha…"</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Dala othintana naye omusha"</string>
<string name="contacts_unavailable_add_account" msgid="7911101713860139754">"Ngena ngemvume kwi-akhawunti"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4456440183590517471">"Ngenisa othintana nabo kwifayela"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ngenisa othintana nabo"</string>
<string name="create_group_dialog_title" msgid="6874527142828424475">"Dala iqembu elisha"</string>
<string name="create_group_item_label" msgid="5218022006186243310">"[Yenza iqembu elisha]"</string>
- <string name="delete_group_dialog_title" msgid="7368429698398624427">"Susa iqembu"</string>
<plurals name="num_groups_in_account">
<item quantity="one" msgid="2944819210288517794">"1 isigcawu"</item>
<item quantity="other" msgid="1276758425904917367">"<xliff:g id="COUNT">%0$d</xliff:g> Amaqembu"</item>
@@ -497,7 +485,6 @@
<string name="set_default" msgid="4417505153468300351">"Hlela okuzenzakalelayo"</string>
<string name="clear_default" msgid="7193185801596678067">"Sula okuzenzakalelayo"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Umbhalo okopishiwe"</string>
- <string name="cancel_confirmation_dialog_title" msgid="3950463632415908534">"Lahla izinguquko"</string>
<string name="cancel_confirmation_dialog_message" msgid="5885724679874403115">"Lahla izinguquko ozenzile?"</string>
<string name="call_type_and_date" msgid="1766269584078149149">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
<string name="profile_display_name" msgid="4127389543625918771">"Misa iphrofayli yami"</string>
@@ -561,7 +548,7 @@
<string name="keep_local" msgid="1258761699192993322">"Gcina kuseduze"</string>
<string name="add_account" msgid="8201790677994503186">"Engeza i-akhawunti"</string>
<string name="add_new_account" msgid="5748627740680940264">"Yengeza i-akhawunti enthsha"</string>
- <string name="dialog_phone_call_prohibited_title" msgid="2111395432187079579">"Ucingo aluthunyelwanga."</string>
- <string name="dialog_voicemail_not_ready_title" msgid="7258109862329777060">"Inombolo yomlayezo wephimbo ayikho"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ucingo aluthunyelwanga"</string>
<string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Ukuya emyalezweni wephimbo, yana ezisethweni > zemenyu."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Ukushayela i-voicemail, vala kuqala imodi Yendiza."</string>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e856d67..db81fed 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -46,6 +46,9 @@
<!-- Minimum height of a row in the Editor -->
<dimen name="editor_min_line_item_height">48dip</dimen>
+ <!-- Height of the shadow asset under the photo on the contact detail page -->
+ <dimen name="detail_contact_photo_shadow_height">10dip</dimen>
+
<!-- Height of the tab text label in the tab carousel on the contact detail page -->
<dimen name="detail_tab_carousel_tab_label_height">45dip</dimen>
@@ -178,7 +181,9 @@
<dimen name="join_header_top_margin">16dip</dimen>
<dimen name="join_header_bottom_margin">0dip</dimen>
- <dimen name="account_filter_header_top_padding">0dip</dimen>
+ <!-- Padding between the action bar's bottom edge and the first header
+ in contacts/group lists. -->
+ <dimen name="list_header_extra_top_padding">0dip</dimen>
<!-- ContactTile Layouts -->
<!--
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7bb875c..fa67483 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -100,8 +100,8 @@
<!-- Menu item used to view the details for a specific contact -->
<string name="menu_viewContact">View contact</string>
- <!-- Menu item used to call a contact, containing the name of the contact to call -->
- <string name="menu_callNumber">Call <xliff:g id="name">%s</xliff:g></string>
+ <!-- Menu item used to call a contact, containing the number of the contact to call -->
+ <string name="menu_callNumber">Call <xliff:g id="number">%s</xliff:g></string>
<!-- Menu item used to add a star to a contact, which makes that contact show up at the top of favorites -->
<string name="menu_addStar">Add to favorites</string>
@@ -163,9 +163,6 @@
<!-- Toast shown after two contacts have been joined by a user action -->
<string name="contactsJoinedMessage">Contacts joined</string>
- <!-- Confirmation dialog title after users selects to delete a contact. [CHAR LIMIT=25]-->
- <string name="deleteConfirmation_title">Delete contact?</string>
-
<!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=15] -->
<string name="menu_set_ring_tone">Set ringtone</string>
@@ -452,7 +449,8 @@
<!-- Hint text displayed in the "digits" field above the dialer's
dialpad, if there's already a call in progress. (This hint
reminds the user that the dialer will add a new call, as opposed
- to sending DTMF tones over the current call.) -->
+ to sending DTMF tones over the current call.)
+ [CHAR LIMIT=40] -->
<string name="dialerDialpadHintText">Dial to add a call</string>
<!-- Dialog text displayed when loading a phone number from the SIM card for speed dial -->
@@ -584,8 +582,6 @@
<!-- The text displayed on the divider for the Favorites tab in Phone app indicating that items below it are frequently called as opposed to starred contacts [CHAR LIMIT = 39] -->
<string name="favoritesFrequentCalled">Frequently called</string>
- <!-- Dialog title when prompting before creating a contact -->
- <string name="add_contact_dlg_title">Add contact</string>
<!-- Dialog message when prompting before creating a contact. Includes
the email address, e.g. "Add xyz@foo.com to contacts?" -->
<string name="add_contact_dlg_message_fmt">Add \"<xliff:g id="email">%s</xliff:g>\" to contacts?</string>
@@ -731,19 +727,11 @@
-->
<string name="description_view_contact_detail" msgid="2795575601596468581">View contact</string>
- <!-- Dialog title shown when (USB) storage does not exist [CHAR LIMIT=25] -->
- <string name="no_sdcard_title" product="nosdcard">Storage unavailable</string>
- <!-- Dialog title shown when SD Card does not exist -->
- <string name="no_sdcard_title" product="default">No SD card</string>
-
<!-- Dialog message shown when (USB) storage does not exist [CHAR LIMIT=30] -->
<string name="no_sdcard_message" product="nosdcard">No storage was found.</string>
<!-- Dialog message shown when SDcard does not exist. [CHAR LIMIT=30] -->
<string name="no_sdcard_message" product="default">No SD card was found.</string>
- <!-- Dialog title shown when searching vCard data from SD Card -->
- <string name="searching_vcard_title">Searching for vCard</string>
-
<!-- Action string for selecting SIM for importing contacts -->
<string name="import_from_sim">Import from SIM card</string>
@@ -776,11 +764,6 @@
<!-- Dialog message shown when searching VCard data from SD Card. [CHAR LIMIT=NONE] -->
<string name="searching_vcard_message" product="default">Searching for vCard data on SD card\u2026</string>
- <!-- Dialog title shown when scanning VCard data failed. [CHAR LIMIT=NONE] -->
- <string name="scanning_sdcard_failed_title" product="nosdcard">Couldn\'t scan storage</string>
- <!-- Dialog title shown when scanning VCard data failed. -->
- <string name="scanning_sdcard_failed_title" product="default">Couldn\'t scan SD card</string>
-
<!-- Dialog message shown when searching VCard data failed.
An exact reason for the failure should [CHAR LIMIT=NONE] -->
<string name="scanning_sdcard_failed_message" product="nosdcard">The storage couldn\'t be scanned. (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
@@ -968,17 +951,11 @@
<!-- 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>
- <!-- Title shown in a Dialog confirming a user's cancel request toward existing vCard import. [CHAR LIMIT=40] -->
- <string name="cancel_import_confirmation_title">Canceling vCard import</string>
-
<!-- Message shown in a Dialog confirming a user's cancel request toward existing vCard import.
The argument is file name for the vCard import the user wants to cancel.
[CHAR LIMIT=128] -->
<string name="cancel_import_confirmation_message">Cancel import of <xliff:g id="filename" example="import.vcf">%s</xliff:g>?</string>
- <!-- Title shown in a Dialog confirming a user's cancel request toward existing vCard export. [CHAR LIMIT=128] -->
- <string name="cancel_export_confirmation_title">Canceling vCard export</string>
-
<!-- Message shown in a Dialog confirming a user's cancel request toward existing vCard export.
The argument is file name for the vCard export the user wants to cancel.
[CHAR LIMIT=128] -->
@@ -1025,12 +1002,12 @@
<!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=36] -->
<string name="dialog_import_export">Import/export contacts</string>
+ <!-- Dialog title when importing contacts from an external source. [CHAR LIMIT=36] -->
+ <string name="dialog_import">Import contacts</string>
+
<!-- The menu item to share the currently viewed contact [CHAR LIMIT=30] -->
<string name="menu_share">Share</string>
- <!-- The menu item to show all contacts in Phone entrance [CHAR LIMIT=30] -->
- <string name="menu_all_contacts">All contacts</string>
-
<!-- Dialog title when picking the application to share a contact with. -->
<string name="share_via">Share contact via</string>
@@ -1393,19 +1370,11 @@
<!-- The name of the invisible local contact directory -->
<string name="local_invisible_directory">Other</string>
- <!-- The title of a confirmation dialog shown when the user selects a
- contact aggregation suggestion in Contact editor. [CHAR LIMIT=128]-->
- <string name="aggregation_suggestion_join_dialog_title">Join contacts</string>
-
<!-- The message in a confirmation dialog shown when the user selects a
contact aggregation suggestion in Contact editor. [CHAR LIMIT=512]-->
<string name="aggregation_suggestion_join_dialog_message">Join
the current contact with the selected contact?</string>
- <!-- The title of a confirmation dialog shown when the user selects a
- contact aggregation suggestion in Contact editor. [CHAR LIMIT=128]-->
- <string name="aggregation_suggestion_edit_dialog_title">Edit selected contacts</string>
-
<!-- The message in a confirmation dialog shown when the user selects a
contact aggregation suggestion in Contact editor. [CHAR LIMIT=512]-->
<string name="aggregation_suggestion_edit_dialog_message">Switch to editing
@@ -1509,7 +1478,7 @@
<!-- Button shown on the main contacts screen when there are no contacts on the device.
Initiates a contact import dialog [CHAR LIMIT=128] -->
- <string name="contacts_unavailable_import_contacts">Import contacts from a file</string>
+ <string name="contacts_unavailable_import_contacts">Import contacts</string>
<!-- Title of the dialog that allows creation of a contact group [CHAR LIMIT=128] -->
<string name="create_group_dialog_title">Create new group</string>
@@ -1517,9 +1486,6 @@
<!-- An item in the popup list of groups that triggers creation of a contact group [CHAR LIMIT=128] -->
<string name="create_group_item_label">[Create new group]</string>
- <!-- Title of the dialog that allows deletion of a contact group [CHAR LIMIT=128] -->
- <string name="delete_group_dialog_title">Delete group</string>
-
<!-- Shows how many groups are from the specified account [CHAR LIMIT=15] -->
<plurals name="num_groups_in_account">
<item quantity="one">1 group</item>
@@ -1562,9 +1528,6 @@
<!-- Toast shown when text is copied to the clipboard [CHAR LIMIT=64] -->
<string name="toast_text_copied">Text copied</string>
- <!-- Title of the alert dialog when the user hits the Cancel button in the editor [CHAR LIMIT=64] -->
- <string name="cancel_confirmation_dialog_title">Discard changes</string>
-
<!-- Contents of the alert dialog when the user hits the Cancel button in the editor [CHAR LIMIT=128] -->
<string name="cancel_confirmation_dialog_message">Discard your changes?</string>
@@ -1818,15 +1781,17 @@
<!-- Button label to prompt the user to add another account (when there are already existing accounts on the device) [CHAR LIMIT=30] -->
<string name="add_new_account">Add new account</string>
- <!-- Dialog title which is shown when the user tries to make a phone call
- to prohibited phone numbers [CHAR LIMIT=40] -->
- <string name="dialog_phone_call_prohibited_title" msgid="4313552620858880999">Call not sent</string>
-
- <!-- Dialog title which is shown when the user tries to check voicemail
- while the system isn't ready for the access. [CHAR LIMIT=40] -->
- <string name="dialog_voicemail_not_ready_title">Voicemail number unavailable</string>
+ <!-- Dialog message which is shown when the user tries to make a phone call
+ to prohibited phone numbers [CHAR LIMIT=NONE] -->
+ <string name="dialog_phone_call_prohibited_message" msgid="4313552620858880999">Call not sent</string>
<!-- Dialog message which is shown when the user tries to check voicemail
while the system isn't ready for the access. [CHAR LIMIT=NONE] -->
<string name="dialog_voicemail_not_ready_message">To set up voicemail, go to Menu > Settings.</string>
+
+ <!-- Dialog message which is shown when the user tries to check voicemail
+ while the system is in airplane mode. The user cannot access to
+ voicemail service in Airplane mode. [CHAR LIMI=NONE] -->
+ <string name="dialog_voicemail_airplane_mode_message">To call voicemail, first turn off Airplane mode.</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index ece881e..0327059 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -38,7 +38,7 @@
<item name="list_item_presence_icon_size">16dip</item>
<item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
<item name="list_item_profile_photo_size">70dip</item>
- <item name="list_item_prefix_highlight_color">#729a27</item>
+ <item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
<item name="list_item_header_text_indent">8dip</item>
<item name="list_item_header_text_color">@color/people_app_theme_color</item>
<item name="list_item_header_text_size">14sp</item>
@@ -314,6 +314,15 @@
<item name="android:background">@color/quickcontact_tab_indicator</item>
</style>
+ <style name="Theme.PhotoSelector" parent="@android:style/Theme.Holo.Light">
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:windowFrame">@null</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:windowAnimationStyle">@null</item>
+ <item name="android:backgroundDimEnabled">false</item>
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowNoTitle">true</item>
+ </style>
<style name="GroupMembershipSizeTextAppearance" parent="@android:style/TextAppearance.Small"/>
diff --git a/src/com/android/contacts/CallContactActivity.java b/src/com/android/contacts/CallContactActivity.java
index b7c472a..793770b 100644
--- a/src/com/android/contacts/CallContactActivity.java
+++ b/src/com/android/contacts/CallContactActivity.java
@@ -18,10 +18,8 @@
import com.android.contacts.interactions.PhoneNumberInteraction;
-import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
-import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
@@ -50,7 +48,7 @@
if (Contacts.CONTENT_ITEM_TYPE.equals(getContentResolver().getType(contactUri))) {
PhoneNumberInteraction.startInteractionForPhoneCall(this, contactUri);
} else {
- startActivity(new Intent(Intent.ACTION_CALL_PRIVILEGED, contactUri));
+ startActivity(ContactsUtils.getCallIntent(contactUri));
finish();
}
}
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index caa8bce..428e2e8 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -22,8 +22,10 @@
import com.android.contacts.calllog.ContactInfo;
import com.android.contacts.calllog.ContactInfoHelper;
import com.android.contacts.calllog.PhoneNumberHelper;
+import com.android.contacts.format.FormatUtils;
import com.android.contacts.util.AsyncTaskExecutor;
import com.android.contacts.util.AsyncTaskExecutors;
+import com.android.contacts.util.Constants;
import com.android.contacts.voicemail.VoicemailPlaybackFragment;
import com.android.contacts.voicemail.VoicemailStatusHelper;
import com.android.contacts.voicemail.VoicemailStatusHelper.StatusMessage;
@@ -331,9 +333,8 @@
TelephonyManager tm = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) {
- Intent callIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("tel", mNumber, null));
- startActivity(callIntent);
+ startActivity(ContactsUtils.getCallIntent(
+ Uri.fromParts(Constants.SCHEME_TEL, mNumber, null)));
return true;
}
}
@@ -388,7 +389,6 @@
mPhoneCallDetailsHelper.setCallDetailsHeader(mHeaderTextView, firstDetails);
// Cache the details about the phone number.
- final Uri numberCallUri = mPhoneNumberHelper.getCallUri(mNumber);
final boolean canPlaceCallsTo = mPhoneNumberHelper.canPlaceCallsTo(mNumber);
final boolean isVoicemailNumber = mPhoneNumberHelper.isVoicemailNumber(mNumber);
final boolean isSipNumber = mPhoneNumberHelper.isSipNumber(mNumber);
@@ -469,9 +469,10 @@
firstDetails.number, firstDetails.formattedNumber);
ViewEntry entry = new ViewEntry(
- getString(R.string.menu_callNumber, displayNumber),
- new Intent(Intent.ACTION_CALL_PRIVILEGED, numberCallUri),
- getString(R.string.description_call, nameOrNumber));
+ getString(R.string.menu_callNumber,
+ FormatUtils.forceLeftToRight(displayNumber)),
+ ContactsUtils.getCallIntent(mNumber),
+ getString(R.string.description_call, nameOrNumber));
// Only show a label if the number is shown and it is not a SIP address.
if (!TextUtils.isEmpty(firstDetails.name)
@@ -771,7 +772,7 @@
}
public void onMenuEditNumberBeforeCall(MenuItem menuItem) {
- startActivity(new Intent(Intent.ACTION_DIAL, mPhoneNumberHelper.getCallUri(mNumber)));
+ startActivity(new Intent(Intent.ACTION_DIAL, ContactsUtils.getCallUri(mNumber)));
}
public void onMenuTrashVoicemail(MenuItem menuItem) {
diff --git a/src/com/android/contacts/ContactLoader.java b/src/com/android/contacts/ContactLoader.java
index c711b6c..2e59f71 100644
--- a/src/com/android/contacts/ContactLoader.java
+++ b/src/com/android/contacts/ContactLoader.java
@@ -301,8 +301,11 @@
return mRequestedUri;
}
+ /**
+ * Returns the contact ID.
+ */
@VisibleForTesting
- /*package*/ long getId() {
+ /* package */ long getId() {
return mId;
}
diff --git a/src/com/android/contacts/ContactPhotoManager.java b/src/com/android/contacts/ContactPhotoManager.java
index 7c54e80..3002dc3 100644
--- a/src/com/android/contacts/ContactPhotoManager.java
+++ b/src/com/android/contacts/ContactPhotoManager.java
@@ -30,8 +30,10 @@
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.TransitionDrawable;
import android.net.Uri;
import android.os.Handler;
import android.os.Handler.Callback;
@@ -177,6 +179,14 @@
public abstract void refreshCache();
/**
+ * Stores the given bitmap directly in the LRU bitmap cache.
+ * @param photoUri The URI of the photo (for future requests).
+ * @param bitmap The bitmap.
+ * @param photoBytes The bytes that were parsed to create the bitmap.
+ */
+ public abstract void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes);
+
+ /**
* Initiates a background process that over time will fill up cache with
* preload photos.
*/
@@ -201,6 +211,8 @@
class ContactPhotoManagerImpl extends ContactPhotoManager implements Callback {
private static final String LOADER_THREAD_NAME = "ContactPhotoLoader";
+ private static final int FADE_TRANSITION_DURATION = 200;
+
/**
* Type of message sent by the UI thread to itself to indicate that some photos
* need to be loaded.
@@ -428,7 +440,7 @@
}
private void loadPhotoByIdOrUri(ImageView view, Request request) {
- boolean loaded = loadCachedPhoto(view, request);
+ boolean loaded = loadCachedPhoto(view, request, false);
if (loaded) {
mPendingRequests.remove(view);
} else {
@@ -459,7 +471,13 @@
*
* @return false if the photo needs to be (re)loaded from the provider.
*/
- private boolean loadCachedPhoto(ImageView view, Request request) {
+ private boolean loadCachedPhoto(ImageView view, Request request, boolean fadeIn) {
+ Bitmap bitmap = mBitmapCache.get(request.getKey());
+ if (bitmap != null) {
+ view.setImageBitmap(bitmap);
+ return true;
+ }
+
BitmapHolder holder = mBitmapHolderCache.get(request.getKey());
if (holder == null) {
// The bitmap has not been loaded - should display the placeholder image.
@@ -475,11 +493,21 @@
// Optionally decode bytes into a bitmap
inflateBitmap(holder);
- view.setImageBitmap(holder.bitmap);
+ if (fadeIn) {
+ Drawable[] layers = new Drawable[2];
+ layers[0] = mContext.getResources().getDrawable(
+ getDefaultAvatarResId(request.mHires, request.mDarkTheme));
+ layers[1] = new BitmapDrawable(mContext.getResources(), holder.bitmap);
+ TransitionDrawable drawable = new TransitionDrawable(layers);
+ view.setImageDrawable(drawable);
+ drawable.startTransition(FADE_TRANSITION_DURATION);
+ } else {
+ view.setImageBitmap(holder.bitmap);
+ }
if (holder.bitmap != null) {
// Put the bitmap in the LRU cache
- mBitmapCache.put(request, holder.bitmap);
+ mBitmapCache.put(request.getKey(), holder.bitmap);
}
// Soften the reference
@@ -598,7 +626,7 @@
while (iterator.hasNext()) {
ImageView view = iterator.next();
Request key = mPendingRequests.get(view);
- boolean loaded = loadCachedPhoto(view, key);
+ boolean loaded = loadCachedPhoto(view, key, true);
if (loaded) {
iterator.remove();
}
@@ -649,6 +677,14 @@
mBitmapHolderCache.put(key, holder);
}
+ @Override
+ public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
+ Request request = Request.createFromUri(photoUri, true, false, DEFAULT_AVATER);
+ BitmapHolder holder = new BitmapHolder(photoBytes);
+ mBitmapHolderCache.put(request.getKey(), holder);
+ mBitmapCache.put(request.getKey(), bitmap);
+ }
+
/**
* Populates an array of photo IDs that need to be loaded.
*/
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index be84cc4..fb549d2 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -35,11 +35,13 @@
import android.content.Context;
import android.content.Intent;
import android.content.OperationApplicationException;
+import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.os.Parcelable;
+import android.os.Bundle;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract.AggregationExceptions;
@@ -53,10 +55,15 @@
import android.util.Log;
import android.widget.Toast;
+import java.lang.Long;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
/**
* A service responsible for saving changes to the content provider.
@@ -80,6 +87,7 @@
public static final String EXTRA_SAVE_MODE = "saveMode";
public static final String EXTRA_SAVE_IS_PROFILE = "saveIsProfile";
public static final String EXTRA_SAVE_SUCCEEDED = "saveSucceeded";
+ public static final String EXTRA_UPDATED_PHOTOS = "updatedPhotos";
public static final String ACTION_CREATE_GROUP = "createGroup";
public static final String ACTION_RENAME_GROUP = "renameGroup";
@@ -269,15 +277,38 @@
/**
* Creates an intent that can be sent to this service to create a new raw contact
* using data presented as a set of ContentValues.
+ * This variant is more convenient to use when there is only one photo that can
+ * possibly be updated, as in the Contact Details screen.
+ * @param rawContactId identifies a writable raw-contact whose photo is to be updated.
+ * @param updatedPhotoPath denotes a temporary file containing the contact's new photo.
*/
public static Intent createSaveContactIntent(Context context, EntityDeltaList state,
String saveModeExtraKey, int saveMode, boolean isProfile, Class<?> callbackActivity,
- String callbackAction) {
+ String callbackAction, long rawContactId, String updatedPhotoPath) {
+ Bundle bundle = new Bundle();
+ bundle.putString(String.valueOf(rawContactId), updatedPhotoPath);
+ return createSaveContactIntent(context, state, saveModeExtraKey, saveMode, isProfile,
+ callbackActivity, callbackAction, bundle);
+ }
+
+ /**
+ * Creates an intent that can be sent to this service to create a new raw contact
+ * using data presented as a set of ContentValues.
+ * This variant is used when multiple contacts' photos may be updated, as in the
+ * Contact Editor.
+ * @param updatedPhotos maps each raw-contact's ID to the file-path of the new photo.
+ */
+ public static Intent createSaveContactIntent(Context context, EntityDeltaList state,
+ String saveModeExtraKey, int saveMode, boolean isProfile, Class<?> callbackActivity,
+ String callbackAction, Bundle updatedPhotos) {
Intent serviceIntent = new Intent(
context, ContactSaveService.class);
serviceIntent.setAction(ContactSaveService.ACTION_SAVE_CONTACT);
serviceIntent.putExtra(EXTRA_CONTACT_STATE, (Parcelable) state);
serviceIntent.putExtra(EXTRA_SAVE_IS_PROFILE, isProfile);
+ if (updatedPhotos != null) {
+ serviceIntent.putExtra(EXTRA_UPDATED_PHOTOS, (Parcelable) updatedPhotos);
+ }
// Callback intent will be invoked by the service once the contact is
// saved. The service will put the URI of the new contact as "data" on
@@ -293,6 +324,7 @@
EntityDeltaList state = intent.getParcelableExtra(EXTRA_CONTACT_STATE);
Intent callbackIntent = intent.getParcelableExtra(EXTRA_CALLBACK_INTENT);
boolean isProfile = intent.getBooleanExtra(EXTRA_SAVE_IS_PROFILE, false);
+ Bundle updatedPhotos = intent.getParcelableExtra(EXTRA_UPDATED_PHOTOS);
// Trim any empty fields, and RawContacts, before persisting
final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
@@ -301,6 +333,10 @@
Uri lookupUri = null;
final ContentResolver resolver = getContentResolver();
+ boolean succeeded = false;
+
+ // Keep track of the id of a newly raw-contact (if any... there can be at most one).
+ long insertedRawContactId = -1;
// Attempt to persist changes
int tries = 0;
@@ -324,6 +360,9 @@
if (rawContactId == -1) {
throw new IllegalStateException("Could not determine RawContact ID after save");
}
+ // We don't have to check to see if the value is still -1. If we reach here,
+ // the previous loop iteration didn't succeed, so any ID that we obtained is bogus.
+ insertedRawContactId = getInsertedRawContactId(diff, results);
if (isProfile) {
// Since the profile supports local raw contacts, which may have been completely
// removed if all information was removed, we need to do a special query to
@@ -346,10 +385,9 @@
lookupUri = RawContacts.getContactLookupUri(resolver, rawContactUri);
}
Log.v(TAG, "Saved contact. New URI: " + lookupUri);
- // Mark the intent to indicate that the save was successful (even if the lookup URI
- // is now null). For local contacts or the local profile, it's possible that the
- // save triggered removal of the contact, so no lookup URI would exist..
- callbackIntent.putExtra(EXTRA_SAVE_SUCCEEDED, true);
+
+ // We can change this back to false later, if we fail to save the contact photo.
+ succeeded = true;
break;
} catch (RemoteException e) {
@@ -395,19 +433,95 @@
}
}
+ // Now save any updated photos. We do this at the end to ensure that
+ // the ContactProvider already knows about newly-created contacts.
+ if (updatedPhotos != null) {
+ for (String key : updatedPhotos.keySet()) {
+ String photoFilePath = updatedPhotos.getString(key);
+ long rawContactId = Long.parseLong(key);
+
+ // If the raw-contact ID is negative, we are saving a new raw-contact;
+ // replace the bogus ID with the new one that we actually saved the contact at.
+ if (rawContactId < 0) {
+ rawContactId = insertedRawContactId;
+ if (rawContactId == -1) {
+ throw new IllegalStateException(
+ "Could not determine RawContact ID for image insertion");
+ }
+ }
+
+ File photoFile = new File(photoFilePath);
+ if (!saveUpdatedPhoto(rawContactId, photoFile)) succeeded = false;
+ }
+ }
+
+ if (succeeded) {
+ // Mark the intent to indicate that the save was successful (even if the lookup URI
+ // is now null). For local contacts or the local profile, it's possible that the
+ // save triggered removal of the contact, so no lookup URI would exist..
+ callbackIntent.putExtra(EXTRA_SAVE_SUCCEEDED, true);
+ }
callbackIntent.setData(lookupUri);
deliverCallback(callbackIntent);
}
+ /**
+ * Save updated photo for the specified raw-contact.
+ * @return true for success, false for failure
+ */
+ private boolean saveUpdatedPhoto(long rawContactId, File photoFile) {
+ final Uri outputUri = Uri.withAppendedPath(
+ ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
+ RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
+
+ try {
+ final FileOutputStream outputStream = getContentResolver()
+ .openAssetFileDescriptor(outputUri, "rw").createOutputStream();
+ try {
+ final FileInputStream inputStream = new FileInputStream(photoFile);
+ try {
+ final byte[] buffer = new byte[16 * 1024];
+ int length;
+ int totalLength = 0;
+ while ((length = inputStream.read(buffer)) > 0) {
+ outputStream.write(buffer, 0, length);
+ totalLength += length;
+ }
+ Log.v(TAG, "Wrote " + totalLength + " bytes for photo " + photoFile.toString());
+ } finally {
+ inputStream.close();
+ }
+ } finally {
+ outputStream.close();
+ }
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to write photo: " + photoFile.toString() + " because: " + e);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Find the ID of an existing or newly-inserted raw-contact. If none exists, return -1.
+ */
private long getRawContactId(EntityDeltaList state,
final ArrayList<ContentProviderOperation> diff,
final ContentProviderResult[] results) {
- long rawContactId = state.findRawContactId();
- if (rawContactId != -1) {
- return rawContactId;
+ long existingRawContactId = state.findRawContactId();
+ if (existingRawContactId != -1) {
+ return existingRawContactId;
}
+ return getInsertedRawContactId(diff, results);
+ }
+
+ /**
+ * Find the ID of a newly-inserted raw-contact. If none exists, return -1.
+ */
+ private long getInsertedRawContactId(
+ final ArrayList<ContentProviderOperation> diff,
+ final ContentProviderResult[] results) {
final int diffSize = diff.size();
for (int i = 0; i < diffSize; i++) {
ContentProviderOperation operation = diff.get(i);
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index cb19713..687bd0d 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -16,10 +16,13 @@
package com.android.contacts;
+import com.android.contacts.activities.DialtactsActivity;
+import com.android.contacts.calllog.PhoneNumberHelper;
import com.android.contacts.model.AccountType;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.AccountWithDataSet;
import com.android.contacts.test.NeededForTesting;
+import com.android.contacts.util.Constants;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
import android.content.Context;
@@ -30,6 +33,7 @@
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.QuickContact;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.view.View;
@@ -213,6 +217,67 @@
}
/**
+ * Return Uri with an appropriate scheme, accepting Voicemail, SIP, and usual phone call
+ * numbers.
+ */
+ public static Uri getCallUri(String number) {
+ if (PhoneNumberUtils.isVoiceMailNumber(number)) {
+ return Uri.parse("voicemail:");
+ }
+ if (PhoneNumberUtils.isUriNumber(number)) {
+ return Uri.fromParts(Constants.SCHEME_SIP, number, null);
+ }
+ return Uri.fromParts(Constants.SCHEME_TEL, number, null);
+ }
+
+ /**
+ * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
+ * automatically.
+ */
+ public static Intent getCallIntent(String number) {
+ return getCallIntent(number, null);
+ }
+
+ /**
+ * Return an Intent for making a phone call. A given Uri will be used as is (without any
+ * sanity check).
+ */
+ public static Intent getCallIntent(Uri uri) {
+ return getCallIntent(uri, null);
+ }
+
+ /**
+ * A variant of {@link #getCallIntent(String)} but also accept a call origin. For more
+ * information about call origin, see comments in Phone package (PhoneApp).
+ */
+ public static Intent getCallIntent(String number, String callOrigin) {
+ return getCallIntent(getCallUri(number), callOrigin);
+ }
+
+ /**
+ * A variant of {@link #getCallIntent(Uri)} but also accept a call origin. For more
+ * information about call origin, see comments in Phone package (PhoneApp).
+ */
+ public static Intent getCallIntent(Uri uri, String callOrigin) {
+ final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED, uri);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ if (callOrigin != null) {
+ intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN, callOrigin);
+ }
+ return intent;
+ }
+
+ /**
+ * Return an Intent for launching voicemail screen.
+ */
+ public static Intent getVoicemailIntent() {
+ final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+ Uri.fromParts("voicemail", "", null));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ return intent;
+ }
+
+ /**
* Returns a header view based on the R.layout.list_separator, where the
* containing {@link TextView} is set using the given textResourceId.
*/
diff --git a/src/com/android/contacts/NfcHandler.java b/src/com/android/contacts/NfcHandler.java
index ee3e002..1ae72be 100644
--- a/src/com/android/contacts/NfcHandler.java
+++ b/src/com/android/contacts/NfcHandler.java
@@ -89,9 +89,8 @@
ndefBytes.write(buffer, 0, r);
}
- NdefRecord vcardRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
- "text/x-vCard".getBytes(), new byte[]{}, ndefBytes.toByteArray());
- return new NdefMessage(new NdefRecord[] {vcardRecord});
+ NdefRecord record = NdefRecord.createMime("text/x-vcard", ndefBytes.toByteArray());
+ return new NdefMessage(record);
} catch (IOException e) {
Log.e(TAG, "IOException creating vcard.");
return null;
diff --git a/src/com/android/contacts/PhoneCallDetailsHelper.java b/src/com/android/contacts/PhoneCallDetailsHelper.java
index 2d75c26..fd950fe 100644
--- a/src/com/android/contacts/PhoneCallDetailsHelper.java
+++ b/src/com/android/contacts/PhoneCallDetailsHelper.java
@@ -18,7 +18,7 @@
import com.android.contacts.calllog.CallTypeHelper;
import com.android.contacts.calllog.PhoneNumberHelper;
-import com.android.contacts.format.FormatUtils;
+import com.android.contacts.test.NeededForTesting;
import android.content.res.Resources;
import android.graphics.Typeface;
@@ -103,6 +103,7 @@
final CharSequence nameText;
final CharSequence numberText;
+ final CharSequence labelText;
final CharSequence displayNumber =
mPhoneNumberHelper.getDisplayNumber(details.number, details.formattedNumber);
if (TextUtils.isEmpty(details.name)) {
@@ -113,20 +114,17 @@
} else {
numberText = details.geocode;
}
+ labelText = null;
} else {
nameText = details.name;
- if (numberFormattedLabel != null) {
- numberText = FormatUtils.applyStyleToSpan(Typeface.BOLD,
- numberFormattedLabel + " " + displayNumber, 0,
- numberFormattedLabel.length(),
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- } else {
- numberText = displayNumber;
- }
+ numberText = displayNumber;
+ labelText = numberFormattedLabel;
}
views.nameView.setText(nameText);
views.numberView.setText(numberText);
+ views.labelView.setText(labelText);
+ views.labelView.setVisibility(TextUtils.isEmpty(labelText) ? View.GONE : View.VISIBLE);
}
/** Sets the text of the header view for the details page of a phone call. */
@@ -144,6 +142,7 @@
nameView.setText(nameText);
}
+ @NeededForTesting
public void setCurrentTimeForTest(long currentTimeMillis) {
mCurrentTimeMillisForTest = currentTimeMillis;
}
diff --git a/src/com/android/contacts/PhoneCallDetailsViews.java b/src/com/android/contacts/PhoneCallDetailsViews.java
index fa06879..ea5a461 100644
--- a/src/com/android/contacts/PhoneCallDetailsViews.java
+++ b/src/com/android/contacts/PhoneCallDetailsViews.java
@@ -31,14 +31,17 @@
public final CallTypeIconsView callTypeIcons;
public final TextView callTypeAndDate;
public final TextView numberView;
+ public final TextView labelView;
private PhoneCallDetailsViews(TextView nameView, View callTypeView,
- CallTypeIconsView callTypeIcons, TextView callTypeAndDate, TextView numberView) {
+ CallTypeIconsView callTypeIcons, TextView callTypeAndDate, TextView numberView,
+ TextView labelView) {
this.nameView = nameView;
this.callTypeView = callTypeView;
this.callTypeIcons = callTypeIcons;
this.callTypeAndDate = callTypeAndDate;
this.numberView = numberView;
+ this.labelView = labelView;
}
/**
@@ -53,7 +56,8 @@
view.findViewById(R.id.call_type),
(CallTypeIconsView) view.findViewById(R.id.call_type_icons),
(TextView) view.findViewById(R.id.call_count_and_date),
- (TextView) view.findViewById(R.id.number));
+ (TextView) view.findViewById(R.id.number),
+ (TextView) view.findViewById(R.id.label));
}
public static PhoneCallDetailsViews createForTest(Context context) {
@@ -62,6 +66,7 @@
new View(context),
new CallTypeIconsView(context),
new TextView(context),
+ new TextView(context),
new TextView(context));
}
}
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index b90d4c6..0260ca6 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -151,7 +151,14 @@
// Just set to the field here. The listener will be notified by update().
mCurrentTab = TabState.fromInt(savedState.getInt(EXTRA_KEY_SELECTED_TAB));
}
+ // Show tabs or the expanded {@link SearchView}, depending on whether or not we are in
+ // search mode.
update();
+ // Expanding the {@link SearchView} clears the query, so set the query from the
+ // {@link ContactsRequest} after it has been expanded, if applicable.
+ if (mSearchMode && !TextUtils.isEmpty(mQueryString)) {
+ setQueryString(mQueryString);
+ }
}
public void setListener(Listener listener) {
@@ -292,7 +299,8 @@
if (mSearchMode) {
setFocusOnSearchView();
// Since we have the {@link SearchView} in a custom action bar, we must manually handle
- // expanding the {@link SearchView} when a search is initiated.
+ // expanding the {@link SearchView} when a search is initiated. Note that a side effect
+ // of this method is that the {@link SearchView} query text is set to empty string.
mSearchView.onActionViewExpanded();
if (mActionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_STANDARD) {
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index a697c29..8d4cb5d 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -156,7 +156,7 @@
Bitmap photo = extras.getParcelable("data");
if (photo != null) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
- photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);
+ photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
final ContentValues imageValues = new ContentValues();
imageValues.put(Photo.PHOTO, stream.toByteArray());
diff --git a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
index 4b297d9..98abfbc 100644
--- a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
+++ b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
@@ -319,15 +319,23 @@
// Apply a limit of 1 result to the query because we only need to
// determine whether or not at least one other contact has the same
// name. We don't need to find ALL other contacts with the same name.
- Builder builder = Contacts.CONTENT_URI.buildUpon();
+ final Builder builder = Contacts.CONTENT_URI.buildUpon();
builder.appendQueryParameter("limit", String.valueOf(1));
- Uri uri = builder.build();
+ final Uri uri = builder.build();
+ final String displayNameSelection;
+ final String[] selectionArgs;
+ if (TextUtils.isEmpty(contactDisplayName)) {
+ displayNameSelection = Contacts.DISPLAY_NAME_PRIMARY + " IS NULL";
+ selectionArgs = new String[] { String.valueOf(mContactId) };
+ } else {
+ displayNameSelection = Contacts.DISPLAY_NAME_PRIMARY + " = ?";
+ selectionArgs = new String[] { contactDisplayName, String.valueOf(mContactId) };
+ }
mQueryHandler.startQuery(TOKEN_DISAMBIGUATION_QUERY, null, uri,
new String[] { Contacts._ID } /* unused projection but a valid one was needed */,
- Contacts.DISPLAY_NAME_PRIMARY + " = ? and " + Contacts.PHOTO_ID + " is null and "
- + Contacts._ID + " <> ?",
- new String[] { contactDisplayName, String.valueOf(mContactId) }, null);
+ displayNameSelection + " AND " + Contacts.PHOTO_ID + " IS NULL AND "
+ + Contacts._ID + " <> ?", selectionArgs, null);
}
/**
diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index b949176..b353a0b 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -74,7 +74,7 @@
private Handler mHandler = new Handler();
@Override
- public void onCreate(Bundle savedState) {
+ protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
// This activity must not be shown. We have to select the contact in the
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index b5b6c1d..bf7d7d1 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -31,6 +31,7 @@
import com.android.contacts.list.PhoneNumberPickerFragment;
import com.android.contacts.list.PostalAddressPickerFragment;
import com.android.contacts.widget.ContextMenuAdapter;
+import com.google.android.collect.Sets;
import android.app.ActionBar;
import android.app.ActionBar.LayoutParams;
@@ -415,8 +416,14 @@
ConfirmAddDetailActivity.class);
intent.setData(contactLookupUri);
if (extras != null) {
+ // First remove name key if present because the dialog does not support name
+ // editing. This is fine because the user wants to add information to an
+ // existing contact, who should already have a name and we wouldn't want to
+ // override the name.
+ extras.remove(Insert.NAME);
intent.putExtras(extras);
}
+
// Wait for the activity result because we want to keep the picker open (in case the
// user cancels adding the info to a contact and wants to pick someone else).
startActivityForResult(intent, SUBACTIVITY_ADD_TO_EXISTING_CONTACT);
@@ -440,13 +447,24 @@
* Returns true if is a single email or single phone number provided in the {@link Intent}
* extras bundle so that a pop-up confirmation dialog can be used to add the data to
* a contact. Otherwise return false if there are other intent extras that require launching
- * the full contact editor.
+ * the full contact editor. Ignore extras with the key {@link Insert.NAME} because names
+ * are a special case and we typically don't want to replace the name of an existing
+ * contact.
*/
private boolean launchAddToContactDialog(Bundle extras) {
if (extras == null) {
return false;
}
- Set<String> intentExtraKeys = extras.keySet();
+
+ // Copy extras because the set may be modified in the next step
+ Set<String> intentExtraKeys = Sets.newHashSet();
+ intentExtraKeys.addAll(extras.keySet());
+
+ // Ignore name key because this is an existing contact.
+ if (intentExtraKeys.contains(Insert.NAME)) {
+ intentExtraKeys.remove(Insert.NAME);
+ }
+
int numIntentExtraKeys = intentExtraKeys.size();
if (numIntentExtraKeys == 2) {
boolean hasPhone = intentExtraKeys.contains(Insert.PHONE) &&
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index 7e95fed..9872ad4 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -17,6 +17,7 @@
package com.android.contacts.activities;
import com.android.contacts.R;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.calllog.CallLogFragment;
import com.android.contacts.dialpad.DialpadFragment;
import com.android.contacts.interactions.PhoneNumberInteraction;
@@ -28,6 +29,7 @@
import com.android.contacts.list.PhoneNumberPickerFragment;
import com.android.contacts.activities.TransactionSafeActivity;
import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.Constants;
import com.android.internal.telephony.ITelephony;
import android.app.ActionBar;
@@ -87,7 +89,8 @@
* Copied from PhoneApp. See comments in Phone app for more detail.
*/
public static final String EXTRA_CALL_ORIGIN = "com.android.phone.CALL_ORIGIN";
- public static final String CALL_ORIGIN_DIALTACTS =
+ /** @see #getCallOrigin() */
+ private static final String CALL_ORIGIN_DIALTACTS =
"com.android.contacts.activities.DialtactsActivity";
/**
@@ -111,14 +114,6 @@
private static final int SUBACTIVITY_ACCOUNT_FILTER = 1;
- /**
- * Listener interface for Fragments accommodated in {@link ViewPager} enabling them to know
- * when it becomes visible or invisible inside the ViewPager.
- */
- public interface ViewPagerVisibilityListener {
- public void onVisibilityChanged(boolean visible);
- }
-
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
@@ -165,6 +160,40 @@
actionBar.selectTab(actionBar.getTabAt(position));
mNextPosition = position;
+
+ // This method is called halfway between swiping between the two pages.
+ // When the next page is fully selected, the ViewPager will go back to IDLE state in
+ // onPageScrollStateChanged(). The order should be:
+ // (user's swipe) -> onPageSelected() -> IDLE in onPageScrollStateChanged()
+ //
+ // sendFragmentVisibilityChange() must be called from here or in the IDLE state to
+ // notify the visibility change events to two pages: the current page (pointed by
+ // mCurrentPosition) should receive sendFragmentVisibilityChange() with the second
+ // argument false, meaning "the page is now invisible", while the next page (pointed by
+ // mNextPosition) should receive the method with the second argument true, meaning
+ // "the page becomes visible".
+ //
+ // To make transition animation smooth enough, we need to delay the event in some cases:
+ // - We should delay both method calls when the dialpad screen is involved.
+ // The screen does not have the bottom action bar, requiring different layout to
+ // fill the screen. The layout refresh takes some time and thus should be done after
+ // the page migration being completed.
+ // - We should delay the method for the call log screen. The screen will update
+ // its internal state and may query full call log. which is too costly to do when
+ // setMenuVisibility() is called, making the animation slower.
+ // - We should *not* delay the method for the phone favorite screen. The screen has
+ // another icon the call log screen doesn't have. We want to show/hide it immediately
+ // after user's choosing pages.
+ if (mCurrentPosition == TAB_INDEX_CALL_LOG && mNextPosition == TAB_INDEX_FAVORITES) {
+ sendFragmentVisibilityChange(mNextPosition, true /* visible */ );
+ invalidateOptionsMenu();
+ } else if (mCurrentPosition == TAB_INDEX_FAVORITES
+ && mNextPosition == TAB_INDEX_CALL_LOG) {
+ sendFragmentVisibilityChange(mCurrentPosition, false /* not visible */ );
+ invalidateOptionsMenu();
+ } else {
+ // Delay sendFragmentVisibilityChange() for both positions.
+ }
}
public void setCurrentPosition(int position) {
@@ -175,11 +204,17 @@
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_IDLE: {
- if (mCurrentPosition >= 0) {
- sendFragmentVisibilityChange(mCurrentPosition, false);
- }
- if (mNextPosition >= 0) {
- sendFragmentVisibilityChange(mNextPosition, true);
+ // Call delayed sendFragmentVisibilityChange() call(s).
+ // See comments in onPageSelected() for more details.
+ if (mCurrentPosition == TAB_INDEX_CALL_LOG
+ && mNextPosition == TAB_INDEX_FAVORITES) {
+ sendFragmentVisibilityChange(mCurrentPosition, false /* not visible */ );
+ } else if (mCurrentPosition == TAB_INDEX_FAVORITES
+ && mNextPosition == TAB_INDEX_CALL_LOG) {
+ sendFragmentVisibilityChange(mNextPosition, true /* visible */ );
+ } else {
+ sendFragmentVisibilityChange(mCurrentPosition, false /* not visible */ );
+ sendFragmentVisibilityChange(mNextPosition, true /* visible */ );
}
invalidateOptionsMenu();
@@ -291,7 +326,8 @@
@Override
public boolean onMenuItemClick(MenuItem item) {
AccountFilterUtil.startAccountFilterActivityForResult(
- DialtactsActivity.this, SUBACTIVITY_ACCOUNT_FILTER);
+ DialtactsActivity.this, SUBACTIVITY_ACCOUNT_FILTER,
+ mContactListFilterController.getFilter());
return true;
}
};
@@ -316,8 +352,7 @@
// Specify call-origin so that users will see the previous tab instead of
// CallLog screen (search UI will be automatically exited).
PhoneNumberInteraction.startInteractionForPhoneCall(
- DialtactsActivity.this, dataUri,
- CALL_ORIGIN_DIALTACTS);
+ DialtactsActivity.this, dataUri, getCallOrigin());
}
@Override
@@ -511,14 +546,8 @@
if (fragment instanceof DialpadFragment) {
mDialpadFragment = (DialpadFragment) fragment;
mDialpadFragment.setListener(mDialpadListener);
- if (currentPosition == TAB_INDEX_DIALER) {
- mDialpadFragment.onVisibilityChanged(true);
- }
} else if (fragment instanceof CallLogFragment) {
mCallLogFragment = (CallLogFragment) fragment;
- if (currentPosition == TAB_INDEX_CALL_LOG) {
- mCallLogFragment.onVisibilityChanged(true);
- }
} else if (fragment instanceof PhoneFavoriteFragment) {
mPhoneFavoriteFragment = (PhoneFavoriteFragment) fragment;
mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener);
@@ -532,6 +561,7 @@
mSearchFragment.setQuickContactEnabled(true);
mSearchFragment.setDarkTheme(true);
mSearchFragment.setPhotoPosition(ContactListItemView.PhotoPosition.LEFT);
+ mSearchFragment.setUseCallableUri(true);
if (mContactListFilterController != null
&& mContactListFilterController.getFilter() != null) {
mSearchFragment.setFilter(mContactListFilterController.getFilter());
@@ -652,10 +682,10 @@
final int previousItemIndex = mViewPager.getCurrentItem();
mViewPager.setCurrentItem(tabIndex, false /* smoothScroll */);
if (previousItemIndex != tabIndex) {
- sendFragmentVisibilityChange(previousItemIndex, false);
+ sendFragmentVisibilityChange(previousItemIndex, false /* not visible */ );
}
mPageChangeListener.setCurrentPosition(tabIndex);
- sendFragmentVisibilityChange(tabIndex, true);
+ sendFragmentVisibilityChange(tabIndex, true /* visible */ );
// Restore to the previous manual selection
mLastManuallySelectedFragment = savedTabIndex;
@@ -692,7 +722,7 @@
}
if (Intent.ACTION_VIEW.equals(action)) {
final Uri data = intent.getData();
- if (data != null && "tel".equals(data.getScheme())) {
+ if (data != null && Constants.SCHEME_TEL.equals(data.getScheme())) {
return true;
}
}
@@ -700,6 +730,16 @@
}
/**
+ * Returns an appropriate call origin for this Activity. May return null when no call origin
+ * should be used (e.g. when some 3rd party application launched the screen. Call origin is
+ * for remembering the tab in which the user made a phone call, so the external app's DIAL
+ * request should not be counted.)
+ */
+ public String getCallOrigin() {
+ return !isDialIntent(getIntent()) ? CALL_ORIGIN_DIALTACTS : null;
+ }
+
+ /**
* Retrieves the filter text stored in {@link #setupFilterText(Intent)}.
* This text originally came from a FILTER_CONTACTS_ACTION intent received
* by this activity. The stored text will then be cleared after after this
@@ -758,8 +798,13 @@
@Override
public void onContactSelected(Uri contactUri) {
PhoneNumberInteraction.startInteractionForPhoneCall(
- DialtactsActivity.this, contactUri,
- CALL_ORIGIN_DIALTACTS);
+ DialtactsActivity.this, contactUri, getCallOrigin());
+ }
+
+ @Override
+ public void onCallNumberDirectly(String phoneNumber) {
+ Intent intent = ContactsUtils.getCallIntent(phoneNumber, getCallOrigin());
+ startActivity(intent);
}
};
@@ -776,21 +821,18 @@
final MenuItem filterOptionMenuItem = menu.findItem(R.id.filter_option);
final MenuItem addContactOptionMenuItem = menu.findItem(R.id.add_contact);
final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings);
- Tab tab = getActionBar().getSelectedTab();
+ final Tab tab = getActionBar().getSelectedTab();
if (mInSearchUi) {
searchMenuItem.setVisible(false);
if (ViewConfiguration.get(this).hasPermanentMenuKey()) {
filterOptionMenuItem.setVisible(true);
filterOptionMenuItem.setOnMenuItemClickListener(
mFilterOptionsMenuItemClickListener);
- addContactOptionMenuItem.setVisible(true);
- addContactOptionMenuItem.setIntent(
- new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
} else {
// Filter option menu should be not be shown as a overflow menu.
filterOptionMenuItem.setVisible(false);
- addContactOptionMenuItem.setVisible(false);
}
+ addContactOptionMenuItem.setVisible(false);
callSettingsMenuItem.setVisible(false);
} else {
final boolean showCallSettingsMenu;
@@ -878,7 +920,7 @@
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
- sendFragmentVisibilityChange(mViewPager.getCurrentItem(), false);
+ sendFragmentVisibilityChange(mViewPager.getCurrentItem(), false /* not visible */ );
// Show the search fragment and hide everything else.
mSearchFragment.setUserVisibleHint(true);
@@ -930,7 +972,7 @@
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
- sendFragmentVisibilityChange(mViewPager.getCurrentItem(), true);
+ sendFragmentVisibilityChange(mViewPager.getCurrentItem(), true /* visible */ );
mViewPager.setVisibility(View.VISIBLE);
@@ -958,9 +1000,12 @@
}
private void sendFragmentVisibilityChange(int position, boolean visibility) {
- final Fragment fragment = getFragmentAt(position);
- if (fragment instanceof ViewPagerVisibilityListener) {
- ((ViewPagerVisibilityListener) fragment).onVisibilityChanged(visibility);
+ // Position can be -1 initially. See PageChangeListener.
+ if (position >= 0) {
+ final Fragment fragment = getFragmentAt(position);
+ if (fragment != null) {
+ fragment.setMenuVisibility(visibility);
+ }
}
}
diff --git a/src/com/android/contacts/activities/DialtactsViewPager.java b/src/com/android/contacts/activities/DialtactsViewPager.java
index 6bf41f7..fb869a9 100644
--- a/src/com/android/contacts/activities/DialtactsViewPager.java
+++ b/src/com/android/contacts/activities/DialtactsViewPager.java
@@ -36,8 +36,7 @@
* ListViews which delay their children anyway, as desired to prevent
* seeing pressed states flashing while scrolling lists
*/
- /*
public boolean shouldDelayChildPressedState() {
return false;
- }*/
+ }
}
diff --git a/src/com/android/contacts/activities/JoinContactActivity.java b/src/com/android/contacts/activities/JoinContactActivity.java
index 75a13d0..4a277cb 100644
--- a/src/com/android/contacts/activities/JoinContactActivity.java
+++ b/src/com/android/contacts/activities/JoinContactActivity.java
@@ -24,18 +24,29 @@
import com.android.contacts.list.OnContactPickerActionListener;
import android.app.ActionBar;
+import android.app.ActionBar.LayoutParams;
import android.app.Fragment;
+import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
+import android.text.TextUtils;
import android.util.Log;
+import android.view.LayoutInflater;
import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnFocusChangeListener;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.SearchView;
+import android.widget.SearchView.OnCloseListener;
+import android.widget.SearchView.OnQueryTextListener;
/**
* An activity that shows a list of contacts that can be joined with the target contact.
*/
-public class JoinContactActivity extends ContactsActivity {
+public class JoinContactActivity extends ContactsActivity
+ implements OnQueryTextListener, OnCloseListener, OnFocusChangeListener {
private static final String TAG = "JoinContactActivity";
@@ -59,6 +70,7 @@
private long mTargetContactId;
private JoinContactListFragment mListFragment;
+ private SearchView mSearchView;
@Override
public void onAttachFragment(Fragment fragment) {
@@ -93,12 +105,7 @@
.commitAllowingStateLoss();
}
- final ActionBar actionBar = getActionBar();
- if (actionBar != null) {
- actionBar.setDisplayShowHomeEnabled(true);
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowTitleEnabled(true);
- }
+ prepareSearchViewAndActionBar();
}
private void setupActionListener() {
@@ -125,6 +132,74 @@
});
}
+ private void prepareSearchViewAndActionBar() {
+ final ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ final View searchViewOnLayout = findViewById(R.id.search_view);
+ if (searchViewOnLayout != null) {
+ searchViewOnLayout.setVisibility(View.GONE);
+ }
+
+ final View searchViewLayout = LayoutInflater.from(actionBar.getThemedContext())
+ .inflate(R.layout.custom_action_bar, null);
+ mSearchView = (SearchView) searchViewLayout.findViewById(R.id.search_view);
+
+ // In order to make the SearchView look like "shown via search menu", we need to
+ // manually setup its state. See also DialtactsActivity.java and ActionBarAdapter.java.
+ mSearchView.setIconifiedByDefault(true);
+ mSearchView.setQueryHint(getString(R.string.hint_findContacts));
+ mSearchView.setIconified(false);
+
+ mSearchView.setOnQueryTextListener(this);
+ mSearchView.setOnCloseListener(this);
+ mSearchView.setOnQueryTextFocusChangeListener(this);
+
+ actionBar.setCustomView(searchViewLayout,
+ new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+ actionBar.setDisplayShowCustomEnabled(true);
+ actionBar.setDisplayShowHomeEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ } else {
+ mSearchView = (SearchView) findViewById(R.id.search_view);
+ mSearchView.setQueryHint(getString(R.string.hint_findContacts));
+ mSearchView.setOnQueryTextListener(this);
+ mSearchView.setOnQueryTextFocusChangeListener(this);
+ }
+
+ // Clear focus and suppress keyboard show-up.
+ mSearchView.clearFocus();
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ mListFragment.setQueryString(newText, true);
+ return false;
+ }
+
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ return false;
+ }
+
+ @Override
+ public boolean onClose() {
+ if (!TextUtils.isEmpty(mSearchView.getQuery())) {
+ mSearchView.setQuery(null, true);
+ }
+ return true;
+ }
+
+ @Override
+ public void onFocusChange(View view, boolean hasFocus) {
+ switch (view.getId()) {
+ case R.id.search_view: {
+ if (hasFocus) {
+ showInputMethod(mSearchView.findFocus());
+ }
+ }
+ }
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -156,4 +231,14 @@
mListFragment.onPickerResult(data);
}
}
+
+ private void showInputMethod(View view) {
+ final InputMethodManager imm = (InputMethodManager)
+ getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm != null) {
+ if (!imm.showSoftInput(view, 0)) {
+ Log.w(TAG, "Failed to show soft input method.");
+ }
+ }
+ }
}
diff --git a/src/com/android/contacts/activities/NonPhoneActivity.java b/src/com/android/contacts/activities/NonPhoneActivity.java
index 3a54292..47ae020 100644
--- a/src/com/android/contacts/activities/NonPhoneActivity.java
+++ b/src/com/android/contacts/activities/NonPhoneActivity.java
@@ -18,6 +18,7 @@
import com.android.contacts.ContactsActivity;
import com.android.contacts.R;
+import com.android.contacts.util.Constants;
import android.app.Activity;
import android.app.AlertDialog;
@@ -56,7 +57,7 @@
final Uri data = getIntent().getData();
if (data == null) return null;
final String scheme = data.getScheme();
- if (!"tel".equals(scheme)) return null;
+ if (!Constants.SCHEME_TEL.equals(scheme)) return null;
return getIntent().getData().getSchemeSpecificPart();
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 8d1b9aa..b87edbd 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -90,6 +90,7 @@
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListPopupWindow;
@@ -823,7 +824,7 @@
}
@Override
- public void startUpdate(View container) {
+ public void startUpdate(ViewGroup container) {
}
private Fragment getFragment(int position) {
@@ -844,7 +845,7 @@
}
@Override
- public Object instantiateItem(View container, int position) {
+ public Object instantiateItem(ViewGroup container, int position) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
@@ -857,7 +858,7 @@
}
@Override
- public void destroyItem(View container, int position, Object object) {
+ public void destroyItem(ViewGroup container, int position, Object object) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
@@ -865,7 +866,7 @@
}
@Override
- public void finishUpdate(View container) {
+ public void finishUpdate(ViewGroup container) {
if (mCurTransaction != null) {
mCurTransaction.commitAllowingStateLoss();
mCurTransaction = null;
@@ -879,7 +880,7 @@
}
@Override
- public void setPrimaryItem(View container, int position, Object object) {
+ public void setPrimaryItem(ViewGroup container, int position, Object object) {
Fragment fragment = (Fragment) object;
if (mCurrentPrimaryItem != fragment) {
if (mCurrentPrimaryItem != null) {
@@ -968,7 +969,12 @@
View mainView = findViewById(R.id.main_view);
if (mProviderStatus == ProviderStatus.STATUS_NORMAL) {
+ // Ensure that the mTabPager is visible; we may have made it invisible below.
contactsUnavailableView.setVisibility(View.GONE);
+ if (mTabPager != null) {
+ mTabPager.setVisibility(View.VISIBLE);
+ }
+
if (mainView != null) {
mainView.setVisibility(View.VISIBLE);
}
@@ -1001,7 +1007,14 @@
} else {
mContactsUnavailableFragment.update();
}
+
+ // Show the contactsUnavailableView, and hide the mTabPager so that we don't
+ // see it sliding in underneath the contactsUnavailableView at the edges.
contactsUnavailableView.setVisibility(View.VISIBLE);
+ if (mTabPager != null) {
+ mTabPager.setVisibility(View.GONE);
+ }
+
if (mainView != null) {
mainView.setVisibility(View.INVISIBLE);
}
@@ -1198,7 +1211,7 @@
@Override
public void onImportContactsFromFileAction() {
- ImportExportDialogFragment.show(getFragmentManager());
+ ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable());
}
@Override
@@ -1217,6 +1230,12 @@
startActivity(new Intent(Intent.ACTION_VIEW, contactUri));
}
}
+
+ @Override
+ public void onCallNumberDirectly(String phoneNumber) {
+ // No need to call phone number directly from People app.
+ Log.w(TAG, "unexpected invocation of onCallNumberDirectly()");
+ }
}
private final class GroupBrowserActionListener implements OnGroupBrowserActionListener {
@@ -1288,7 +1307,7 @@
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.actions, menu);
+ inflater.inflate(R.menu.people_options, menu);
// On narrow screens we specify a NEW group button in the {@link ActionBar}, so that
// it can be in the overflow menu. On wide screens, we use a custom view because we need
@@ -1424,8 +1443,9 @@
return true;
}
case R.id.menu_contacts_filter: {
- AccountFilterUtil.startAccountFilterActivityForResult(this,
- SUBACTIVITY_ACCOUNT_FILTER);
+ AccountFilterUtil.startAccountFilterActivityForResult(
+ this, SUBACTIVITY_ACCOUNT_FILTER,
+ mContactListFilterController.getFilter());
return true;
}
case R.id.menu_search: {
@@ -1452,7 +1472,7 @@
return true;
}
case R.id.menu_import_export: {
- ImportExportDialogFragment.show(getFragmentManager());
+ ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable());
return true;
}
case R.id.menu_accounts: {
@@ -1524,7 +1544,7 @@
if (resultCode == RESULT_OK && PhoneCapabilityTester.isUsingTwoPanes(this)) {
mRequest.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT);
mAllFragment.setSelectionRequired(true);
- mAllFragment.reloadDataAndSetSelectedUri(data.getData());
+ mAllFragment.setSelectedContactUri(data.getData());
// Suppress IME if in search mode
if (mActionBarAdapter != null) {
mActionBarAdapter.clearFocusOnSearchView();
diff --git a/src/com/android/contacts/activities/PhotoSelectionActivity.java b/src/com/android/contacts/activities/PhotoSelectionActivity.java
new file mode 100644
index 0000000..02843e9
--- /dev/null
+++ b/src/com/android/contacts/activities/PhotoSelectionActivity.java
@@ -0,0 +1,505 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.activities;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.detail.PhotoSelectionHandler;
+import com.android.contacts.editor.PhotoActionPopup;
+import com.android.contacts.model.EntityDeltaList;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.view.View;
+import android.view.ViewGroup.MarginLayoutParams;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+import android.widget.FrameLayout.LayoutParams;
+import android.widget.ImageView;
+
+import java.io.File;
+
+/**
+ * Popup activity for choosing a contact photo within the Contacts app.
+ */
+public class PhotoSelectionActivity extends Activity {
+
+ /** Number of ms for the animation to expand the photo. */
+ private static final int PHOTO_EXPAND_DURATION = 100;
+
+ /** Number of ms for the animation to contract the photo on activity exit. */
+ private static final int PHOTO_CONTRACT_DURATION = 50;
+
+ /** Number of ms for the animation to hide the backdrop on finish. */
+ private static final int BACKDROP_FADEOUT_DURATION = 100;
+
+ private static final String KEY_CURRENT_PHOTO_FILE = "currentphotofile";
+
+ private static final String KEY_SUB_ACTIVITY_IN_PROGRESS = "subinprogress";
+
+ /** Intent extra to get the photo URI. */
+ public static final String PHOTO_URI = "photo_uri";
+
+ /** Intent extra to get the entity delta list. */
+ public static final String ENTITY_DELTA_LIST = "entity_delta_list";
+
+ /** Intent extra to indicate whether the contact is the user's profile. */
+ public static final String IS_PROFILE = "is_profile";
+
+ /** Intent extra to indicate whether the contact is from a directory (non-editable). */
+ public static final String IS_DIRECTORY_CONTACT = "is_directory_contact";
+
+ /**
+ * Intent extra to indicate whether the photo should be animated to show the full contents of
+ * the photo (on a larger portion of the screen) when clicked. If unspecified or false, the
+ * photo will not move from its original location.
+ */
+ public static final String EXPAND_PHOTO = "expand_photo";
+
+ /** Source bounds of the image that was clicked on. */
+ private Rect mSourceBounds;
+
+ /**
+ * The photo URI. May be null, in which case the default avatar will be used.
+ */
+ private Uri mPhotoUri;
+
+ /** Entity delta list of the contact. */
+ private EntityDeltaList mState;
+
+ /** Whether the contact is the user's profile. */
+ private boolean mIsProfile;
+
+ /** Whether the contact is from a directory. */
+ private boolean mIsDirectoryContact;
+
+ /** Whether to animate the photo to an expanded view covering more of the screen. */
+ private boolean mExpandPhoto;
+
+ /** The semi-transparent backdrop. */
+ private View mBackdrop;
+
+ /** The photo view. */
+ private ImageView mPhotoView;
+
+ /** The photo handler attached to this activity, if any. */
+ private PhotoHandler mPhotoHandler;
+
+ /** Animator to expand the photo out to full size. */
+ private ObjectAnimator mPhotoAnimator;
+
+ /** Listener for the animation. */
+ private AnimatorListenerAdapter mAnimationListener;
+
+ /** Whether a change in layout of the photo has occurred that has no animation yet. */
+ private boolean mAnimationPending;
+
+ /** Prior position of the image (for animating). */
+ Rect mOriginalPos = new Rect();
+
+ /** Layout params for the photo view before we started animating. */
+ private LayoutParams mPhotoStartParams;
+
+ /** Layout params for the photo view after we finished animating. */
+ private LayoutParams mPhotoEndParams;
+
+ /** Whether a sub-activity is currently in progress. */
+ private boolean mSubActivityInProgress;
+
+ /**
+ * A photo result received by the activity, persisted across activity lifecycle.
+ */
+ private PendingPhotoResult mPendingPhotoResult;
+
+ /**
+ * The photo file being interacted with, if any. Saved/restored between activity instances.
+ */
+ private File mCurrentPhotoFile;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.photoselection_activity);
+ if (savedInstanceState != null) {
+ String fileName = savedInstanceState.getString(KEY_CURRENT_PHOTO_FILE);
+ if (fileName != null) {
+ mCurrentPhotoFile = new File(fileName);
+ }
+ mSubActivityInProgress = savedInstanceState.getBoolean(KEY_SUB_ACTIVITY_IN_PROGRESS);
+ }
+
+ // Pull data out of the intent.
+ final Intent intent = getIntent();
+ mPhotoUri = intent.getParcelableExtra(PHOTO_URI);
+ mState = (EntityDeltaList) intent.getParcelableExtra(ENTITY_DELTA_LIST);
+ mIsProfile = intent.getBooleanExtra(IS_PROFILE, false);
+ mIsDirectoryContact = intent.getBooleanExtra(IS_DIRECTORY_CONTACT, false);
+ mExpandPhoto = intent.getBooleanExtra(EXPAND_PHOTO, false);
+
+ mBackdrop = findViewById(R.id.backdrop);
+ mPhotoView = (ImageView) findViewById(R.id.photo);
+ mSourceBounds = intent.getSourceBounds();
+
+ // Fade in the background.
+ animateInBackground();
+
+ // Dismiss the dialog on clicking the backdrop.
+ mBackdrop.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ // Wait until the layout pass to show the photo, so that the source bounds will match up.
+ OnGlobalLayoutListener globalLayoutListener = new OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ displayPhoto();
+ mBackdrop.getViewTreeObserver().removeGlobalOnLayoutListener(this);
+ }
+ };
+ mBackdrop.getViewTreeObserver().addOnGlobalLayoutListener(globalLayoutListener);
+ }
+
+ @Override
+ public void finish() {
+ if (!mSubActivityInProgress) {
+ closePhotoAndFinish();
+ } else {
+ activityFinish();
+ }
+ }
+
+ /**
+ * Builds a well-formed intent for invoking this activity.
+ * @param context The context.
+ * @param photoUri The URI of the current photo (may be null, in which case the default
+ * avatar image will be displayed).
+ * @param photoBitmap The bitmap of the current photo (may be null, in which case the default
+ * avatar image will be displayed).
+ * @param photoBytes The bytes for the current photo (may be null, in which case the default
+ * avatar image will be displayed).
+ * @param photoBounds The pixel bounds of the current photo.
+ * @param delta The entity delta list for the contact.
+ * @param isProfile Whether the contact is the user's profile.
+ * @param isDirectoryContact Whether the contact comes from a directory (non-editable).
+ * @param expandPhotoOnClick Whether the photo should be expanded on click or not (generally,
+ * this should be true for phones, and false for tablets).
+ * @return An intent that can be used to invoke the photo selection activity.
+ */
+ public static Intent buildIntent(Context context, Uri photoUri, Bitmap photoBitmap,
+ byte[] photoBytes, Rect photoBounds, EntityDeltaList delta, boolean isProfile,
+ boolean isDirectoryContact, boolean expandPhotoOnClick) {
+ Intent intent = new Intent(context, PhotoSelectionActivity.class);
+ if (photoUri != null && photoBitmap != null && photoBytes != null) {
+ intent.putExtra(PHOTO_URI, photoUri);
+ }
+ intent.setSourceBounds(photoBounds);
+ intent.putExtra(ENTITY_DELTA_LIST, (Parcelable) delta);
+ intent.putExtra(IS_PROFILE, isProfile);
+ intent.putExtra(IS_DIRECTORY_CONTACT, isDirectoryContact);
+ intent.putExtra(EXPAND_PHOTO, expandPhotoOnClick);
+ return intent;
+ }
+
+ private void activityFinish() {
+ super.finish();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mPhotoAnimator != null) {
+ mPhotoAnimator.cancel();
+ mPhotoAnimator = null;
+ }
+ if (mPhotoHandler != null) {
+ mPhotoHandler.destroy();
+ mPhotoHandler = null;
+ }
+ }
+
+ private void displayPhoto() {
+ // Load the photo.
+ if (mPhotoUri != null) {
+ // If we have a URI, the bitmap should be cached directly.
+ ContactPhotoManager.getInstance(this).loadPhoto(mPhotoView, mPhotoUri, true, false);
+ } else {
+ // Fall back to avatar image.
+ mPhotoView.setImageResource(ContactPhotoManager.getDefaultAvatarResId(true, false));
+ }
+
+ // Animate the photo view into its end location.
+ final int[] pos = new int[2];
+ mBackdrop.getLocationOnScreen(pos);
+ LayoutParams layoutParams = new LayoutParams(mSourceBounds.width(),
+ mSourceBounds.height());
+ mOriginalPos.left = mSourceBounds.left - pos[0];
+ mOriginalPos.top = mSourceBounds.top - pos[1];
+ mOriginalPos.right = mOriginalPos.left + mSourceBounds.width();
+ mOriginalPos.bottom = mOriginalPos.top + mSourceBounds.height();
+ layoutParams.setMargins(mOriginalPos.left, mOriginalPos.top, mOriginalPos.right,
+ mOriginalPos.bottom);
+ mPhotoStartParams = layoutParams;
+ mPhotoView.setLayoutParams(layoutParams);
+ mPhotoView.requestLayout();
+
+ mPhotoView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom,
+ int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ if (mAnimationPending) {
+ mAnimationPending = false;
+ PropertyValuesHolder pvhLeft =
+ PropertyValuesHolder.ofInt("left", mOriginalPos.left, left);
+ PropertyValuesHolder pvhTop =
+ PropertyValuesHolder.ofInt("top", mOriginalPos.top, top);
+ PropertyValuesHolder pvhRight =
+ PropertyValuesHolder.ofInt("right", mOriginalPos.right, right);
+ PropertyValuesHolder pvhBottom =
+ PropertyValuesHolder.ofInt("bottom", mOriginalPos.bottom, bottom);
+ ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(mPhotoView,
+ pvhLeft, pvhTop, pvhRight, pvhBottom).setDuration(
+ PHOTO_EXPAND_DURATION);
+ if (mAnimationListener != null) {
+ anim.addListener(mAnimationListener);
+ }
+ anim.start();
+ }
+ }
+ });
+ attachPhotoHandler();
+ }
+
+ private LayoutParams getPhotoEndParams() {
+ if (mPhotoEndParams == null) {
+ mPhotoEndParams = new LayoutParams(mPhotoStartParams);
+ if (mExpandPhoto) {
+ Rect bounds = new Rect();
+ mBackdrop.getDrawingRect(bounds);
+ if (bounds.height() > bounds.width()) {
+ //Take up full width.
+ mPhotoEndParams.width = bounds.width();
+ mPhotoEndParams.height = bounds.width();
+ } else {
+ // Take up full height, leaving space for the popup.
+ mPhotoEndParams.height = bounds.height() - 150;
+ mPhotoEndParams.width = bounds.height() - 150;
+ }
+ mPhotoEndParams.topMargin = 0;
+ mPhotoEndParams.leftMargin = 0;
+ mPhotoEndParams.bottomMargin = mPhotoEndParams.height;
+ mPhotoEndParams.rightMargin = mPhotoEndParams.width;
+ }
+ }
+ return mPhotoEndParams;
+ }
+
+ private void animatePhotoOpen() {
+ mAnimationListener = new AnimatorListenerAdapter() {
+ private void capturePhotoPos() {
+ mPhotoView.requestLayout();
+ mOriginalPos.left = mPhotoView.getLeft();
+ mOriginalPos.top = mPhotoView.getTop();
+ mOriginalPos.right = mPhotoView.getRight();
+ mOriginalPos.bottom = mPhotoView.getBottom();
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ capturePhotoPos();
+ if (mPhotoHandler != null) {
+ mPhotoHandler.onClick(mPhotoView);
+ }
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ capturePhotoPos();
+ }
+ };
+ animatePhoto(getPhotoEndParams());
+ }
+
+ private void closePhotoAndFinish() {
+ mAnimationListener = new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ // After the photo animates down, fade it away and finish.
+ ObjectAnimator anim = ObjectAnimator.ofFloat(
+ mPhotoView, "alpha", 0f).setDuration(PHOTO_CONTRACT_DURATION);
+ anim.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ activityFinish();
+ }
+ });
+ anim.start();
+ }
+ };
+
+ // TODO: This won't animate in the right way if the rotation has changed since the activity
+ // was first started.
+ animatePhoto(mPhotoStartParams);
+ animateAwayBackground();
+ }
+
+ private void animatePhoto(MarginLayoutParams to) {
+ // Cancel any existing animation.
+ if (mPhotoAnimator != null) {
+ mPhotoAnimator.cancel();
+ }
+
+ mPhotoView.setLayoutParams(to);
+ mAnimationPending = true;
+ mPhotoView.requestLayout();
+ }
+
+ private void animateInBackground() {
+ ObjectAnimator.ofFloat(mBackdrop, "alpha", 0, 0.5f).setDuration(
+ PHOTO_EXPAND_DURATION).start();
+ }
+
+ private void animateAwayBackground() {
+ ObjectAnimator.ofFloat(mBackdrop, "alpha", 0f).setDuration(
+ BACKDROP_FADEOUT_DURATION).start();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ if (mCurrentPhotoFile != null) {
+ outState.putString(KEY_CURRENT_PHOTO_FILE, mCurrentPhotoFile.toString());
+ }
+ outState.putBoolean(KEY_SUB_ACTIVITY_IN_PROGRESS, mSubActivityInProgress);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (mPhotoHandler != null) {
+ mSubActivityInProgress = false;
+ if (mPhotoHandler.handlePhotoActivityResult(requestCode, resultCode, data)) {
+ // Clear out any pending photo result.
+ mPendingPhotoResult = null;
+ } else {
+ // User returning to the photo selection activity. Re-display options.
+ mPhotoHandler.onClick(mPhotoView);
+ }
+ } else {
+ // Create a pending photo result to be handled when the photo handler is created.
+ mPendingPhotoResult = new PendingPhotoResult(requestCode, resultCode, data);
+ }
+ }
+
+ private void attachPhotoHandler() {
+ // Always provide the same two choices (take a photo with the camera, select a photo
+ // from the gallery), but with slightly different wording.
+ // Note: don't worry about this being a read-only contact; this code will not be invoked.
+ int mode = (mPhotoUri == null) ? PhotoActionPopup.Modes.NO_PHOTO
+ : PhotoActionPopup.Modes.PHOTO_DISALLOW_PRIMARY;
+ // We don't want to provide a choice to remove the photo for two reasons:
+ // 1) the UX designs don't call for it
+ // 2) even if we wanted to, the implementation would be moderately hairy
+ mode &= ~PhotoActionPopup.Flags.REMOVE_PHOTO;
+
+ mPhotoHandler = new PhotoHandler(this, mPhotoView, mode, mState);
+ if (mPendingPhotoResult != null) {
+ mPhotoHandler.handlePhotoActivityResult(mPendingPhotoResult.mRequestCode,
+ mPendingPhotoResult.mResultCode, mPendingPhotoResult.mData);
+ mPendingPhotoResult = null;
+ } else {
+ animatePhotoOpen();
+ }
+ }
+
+ private final class PhotoHandler extends PhotoSelectionHandler {
+ private PhotoHandler(Context context, View photoView, int photoMode,
+ EntityDeltaList state) {
+ super(context, photoView, photoMode, mIsDirectoryContact, state);
+ setListener(new PhotoListener(context, mIsProfile));
+ }
+
+ private final class PhotoListener extends PhotoActionListener {
+ private final Context mContext;
+ private final boolean mIsProfile;
+ private PhotoListener(Context context, boolean isProfile) {
+ mContext = context;
+ mIsProfile = isProfile;
+ }
+
+ @Override
+ public void startTakePhotoActivity(Intent intent, int requestCode, File photoFile) {
+ mSubActivityInProgress = true;
+ mCurrentPhotoFile = photoFile;
+ startActivityForResult(intent, requestCode);
+ }
+
+ @Override
+ public void startPickFromGalleryActivity(Intent intent, int requestCode,
+ File photoFile) {
+ mSubActivityInProgress = true;
+ mCurrentPhotoFile = photoFile;
+ startActivityForResult(intent, requestCode);
+ }
+
+ @Override
+ public void onPhotoSelected(Bitmap bitmap) {
+ EntityDeltaList delta = getDeltaForAttachingPhotoToContact();
+ long rawContactId = getWritableEntityId();
+ String filePath = mCurrentPhotoFile.getAbsolutePath();
+ Intent intent = ContactSaveService.createSaveContactIntent(mContext, delta,
+ "", 0, mIsProfile, PhotoSelectionActivity.class,
+ ContactEditorActivity.ACTION_SAVE_COMPLETED, rawContactId, filePath);
+ startService(intent);
+ finish();
+ }
+
+ @Override
+ public File getCurrentPhotoFile() {
+ return mCurrentPhotoFile;
+ }
+
+ @Override
+ public void onPhotoSelectionDismissed() {
+ if (!mSubActivityInProgress) {
+ finish();
+ }
+ }
+ }
+ }
+
+ private static class PendingPhotoResult {
+ private int mRequestCode;
+ private int mResultCode;
+ private Intent mData;
+ private PendingPhotoResult(int requestCode, int resultCode, Intent data) {
+ mRequestCode = requestCode;
+ mResultCode = resultCode;
+ mData = data;
+ }
+ }
+}
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index c60d0fb..2efd6ba 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -24,7 +24,6 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.SearchManager;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
@@ -122,14 +121,12 @@
// Handle specific query request
if (Constants.SCHEME_MAILTO.equals(scheme)) {
mCreateExtras.putString(Intents.Insert.EMAIL, ssp);
- mCreateExtras.putString(SearchManager.QUERY, ssp);
Uri uri = Uri.withAppendedPath(Email.CONTENT_FILTER_URI, Uri.encode(ssp));
mQueryHandler.startQuery(QUERY_TOKEN, null, uri, CONTACTS_PROJECTION, null, null, null);
} else if (Constants.SCHEME_TEL.equals(scheme)) {
mCreateExtras.putString(Intents.Insert.PHONE, ssp);
- mCreateExtras.putString(SearchManager.QUERY, ssp);
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, ssp);
mQueryHandler.startQuery(QUERY_TOKEN, null, uri, PHONES_PROJECTION, null, null, null);
@@ -216,7 +213,6 @@
R.string.add_contact_dlg_message_fmt, mCreateDescrip);
return new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)
- .setTitle(R.string.add_contact_dlg_title)
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new IntentClickListener(this, createIntent))
diff --git a/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java b/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java
index 22b85d7..7b6ae63 100644
--- a/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/contacts/calllog/CallDetailHistoryAdapter.java
@@ -72,6 +72,12 @@
}
@Override
+ public boolean isEnabled(int position) {
+ // None of history will be clickable.
+ return false;
+ }
+
+ @Override
public int getCount() {
return mPhoneCallDetails.length + 1;
}
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index d9606cb..059436b 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -19,7 +19,7 @@
import com.android.common.io.MoreCloseables;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.activities.DialtactsActivity.ViewPagerVisibilityListener;
+import com.android.contacts.util.Constants;
import com.android.contacts.util.EmptyLoader;
import com.android.contacts.voicemail.VoicemailStatusHelper;
import com.android.contacts.voicemail.VoicemailStatusHelper.StatusMessage;
@@ -56,8 +56,8 @@
/**
* Displays a list of call log entries.
*/
-public class CallLogFragment extends ListFragment implements ViewPagerVisibilityListener,
- CallLogQueryHandler.Listener, CallLogAdapter.CallFetcher {
+public class CallLogFragment extends ListFragment
+ implements CallLogQueryHandler.Listener, CallLogAdapter.CallFetcher {
private static final String TAG = "CallLogFragment";
/**
@@ -69,7 +69,6 @@
private CallLogQueryHandler mCallLogQueryHandler;
private boolean mScrollToTop;
- private boolean mShowOptionsMenu;
/** Whether there is at least one voicemail source installed. */
private boolean mVoicemailSourcesAvailable = false;
/** Whether we are currently filtering over voicemail. */
@@ -265,24 +264,20 @@
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (mShowOptionsMenu) {
- inflater.inflate(R.menu.call_log_options, menu);
- }
+ inflater.inflate(R.menu.call_log_options, menu);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
- if (mShowOptionsMenu) {
- final MenuItem itemDeleteAll = menu.findItem(R.id.delete_all);
- // Check if all the menu items are inflated correctly. As a shortcut, we assume all
- // menu items are ready if the first item is non-null.
- if (itemDeleteAll != null) {
- itemDeleteAll.setEnabled(mAdapter != null && !mAdapter.isEmpty());
- menu.findItem(R.id.show_voicemails_only).setVisible(
- mVoicemailSourcesAvailable && !mShowingVoicemailOnly);
- menu.findItem(R.id.show_all_calls).setVisible(
- mVoicemailSourcesAvailable && mShowingVoicemailOnly);
- }
+ final MenuItem itemDeleteAll = menu.findItem(R.id.delete_all);
+ // Check if all the menu items are inflated correctly. As a shortcut, we assume all
+ // menu items are ready if the first item is non-null.
+ if (itemDeleteAll != null) {
+ itemDeleteAll.setEnabled(mAdapter != null && !mAdapter.isEmpty());
+ menu.findItem(R.id.show_voicemails_only).setVisible(
+ mVoicemailSourcesAvailable && !mShowingVoicemailOnly);
+ menu.findItem(R.id.show_all_calls).setVisible(
+ mVoicemailSourcesAvailable && mShowingVoicemailOnly);
}
}
@@ -329,8 +324,8 @@
Intent intent;
// If "number" is really a SIP address, construct a sip: URI.
if (PhoneNumberUtils.isUriNumber(number)) {
- intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("sip", number, null));
+ intent = ContactsUtils.getCallIntent(
+ Uri.fromParts(Constants.SCHEME_SIP, number, null));
} else {
// We're calling a regular PSTN phone number.
// Construct a tel: URI, but do some other possible cleanup first.
@@ -342,8 +337,8 @@
String countryIso = cursor.getString(CallLogQuery.COUNTRY_ISO);
number = mAdapter.getBetterNumberFromContacts(number, countryIso);
}
- intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("tel", number, null));
+ intent = ContactsUtils.getCallIntent(
+ Uri.fromParts(Constants.SCHEME_TEL, number, null));
}
intent.setFlags(
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
@@ -357,21 +352,13 @@
}
@Override
- public void onVisibilityChanged(boolean visible) {
- if (mShowOptionsMenu != visible) {
- mShowOptionsMenu = visible;
- // Invalidate the options menu since we are changing the list of options shown in it.
- Activity activity = getActivity();
- if (activity != null) {
- activity.invalidateOptionsMenu();
- }
- }
-
- if (visible && isResumed()) {
+ public void setMenuVisibility(boolean menuVisible) {
+ super.setMenuVisibility(menuVisible);
+ if (menuVisible && isResumed()) {
refreshData();
}
- if (!visible) {
+ if (!menuVisible) {
updateOnExit();
}
}
@@ -415,7 +402,8 @@
private void updateOnTransition(boolean onEntry) {
// We don't want to update any call data when keyguard is on because the user has likely not
// seen the new calls yet.
- if (!mKeyguardManager.inKeyguardRestrictedInputMode()) {
+ // This might be called before onCreate() and thus we need to check null explicitly.
+ if (mKeyguardManager != null && !mKeyguardManager.inKeyguardRestrictedInputMode()) {
// On either of the transitions we reset the new flag and update the notifications.
// While exiting we additionally consume all missed calls (by marking them as read).
// This will ensure that they no more appear in the "new" section when we return back.
diff --git a/src/com/android/contacts/calllog/CallLogListItemHelper.java b/src/com/android/contacts/calllog/CallLogListItemHelper.java
index bfedba5..9485b54 100644
--- a/src/com/android/contacts/calllog/CallLogListItemHelper.java
+++ b/src/com/android/contacts/calllog/CallLogListItemHelper.java
@@ -45,7 +45,7 @@
public CallLogListItemHelper(PhoneCallDetailsHelper phoneCallDetailsHelper,
PhoneNumberHelper phoneNumberHelper, Resources resources) {
mPhoneCallDetailsHelper = phoneCallDetailsHelper;
- mPhoneNumberHelper= phoneNumberHelper;
+ mPhoneNumberHelper = phoneNumberHelper;
mResources = resources;
}
diff --git a/src/com/android/contacts/calllog/CallLogListItemViews.java b/src/com/android/contacts/calllog/CallLogListItemViews.java
index 741d218..503de43 100644
--- a/src/com/android/contacts/calllog/CallLogListItemViews.java
+++ b/src/com/android/contacts/calllog/CallLogListItemViews.java
@@ -18,6 +18,7 @@
import com.android.contacts.PhoneCallDetailsViews;
import com.android.contacts.R;
+import com.android.contacts.test.NeededForTesting;
import android.content.Context;
import android.view.View;
@@ -68,6 +69,7 @@
view.findViewById(R.id.call_log_divider));
}
+ @NeededForTesting
public static CallLogListItemViews createForTest(Context context) {
return new CallLogListItemViews(
new QuickContactBadge(context),
diff --git a/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java b/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java
index c5e8f91..59dfcd4 100644
--- a/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java
+++ b/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java
@@ -90,8 +90,13 @@
// TODO: Move this into a service, to avoid holding the receiver up.
final NewCall[] newCalls = mNewCallsQuery.query();
+ if (newCalls == null) {
+ // Query failed, just return.
+ return;
+ }
+
if (newCalls.length == 0) {
- Log.e(TAG, "No voicemails to notify about: clear the notification.");
+ // No voicemails to notify about: clear the notification.
clearNotification();
return;
}
@@ -243,6 +248,9 @@
try {
cursor = mContentResolver.query(Calls.CONTENT_URI_WITH_VOICEMAIL, PROJECTION,
selection, selectionArgs, Calls.DEFAULT_SORT_ORDER);
+ if (cursor == null) {
+ return null;
+ }
NewCall[] newCalls = new NewCall[cursor.getCount()];
while (cursor.moveToNext()) {
newCalls[cursor.getPosition()] = createNewCallsFromCursor(cursor);
@@ -301,7 +309,7 @@
cursor = mContentResolver.query(
Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)),
PROJECTION, null, null, null);
- if (!cursor.moveToFirst()) return null;
+ if (cursor == null || !cursor.moveToFirst()) return null;
return cursor.getString(DISPLAY_NAME_COLUMN_INDEX);
} finally {
if (cursor != null) {
diff --git a/src/com/android/contacts/calllog/IntentProvider.java b/src/com/android/contacts/calllog/IntentProvider.java
index bfee5ec..7ddfecc 100644
--- a/src/com/android/contacts/calllog/IntentProvider.java
+++ b/src/com/android/contacts/calllog/IntentProvider.java
@@ -17,6 +17,7 @@
package com.android.contacts.calllog;
import com.android.contacts.CallDetailActivity;
+import com.android.contacts.ContactsUtils;
import android.content.ContentUris;
import android.content.Context;
@@ -38,16 +39,7 @@
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
- // Here, "number" can either be a PSTN phone number or a
- // SIP address. So turn it into either a tel: URI or a
- // sip: URI, as appropriate.
- Uri uri;
- if (PhoneNumberUtils.isUriNumber(number)) {
- uri = Uri.fromParts("sip", number, null);
- } else {
- uri = Uri.fromParts("tel", number, null);
- }
- return new Intent(Intent.ACTION_CALL_PRIVILEGED, uri);
+ return ContactsUtils.getCallIntent(number);
}
};
}
diff --git a/src/com/android/contacts/calllog/PhoneNumberHelper.java b/src/com/android/contacts/calllog/PhoneNumberHelper.java
index 20031b2..af7c2f6 100644
--- a/src/com/android/contacts/calllog/PhoneNumberHelper.java
+++ b/src/com/android/contacts/calllog/PhoneNumberHelper.java
@@ -16,6 +16,7 @@
package com.android.contacts.calllog;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
import com.android.internal.telephony.CallerInfo;
@@ -76,23 +77,18 @@
}
}
- /** Returns a URI that can be used to place a call to this number. */
- public Uri getCallUri(String number) {
- if (isVoicemailNumber(number)) {
- return Uri.parse("voicemail:x");
- }
- if (isSipNumber(number)) {
- return Uri.fromParts("sip", number, null);
- }
- return Uri.fromParts("tel", number, null);
- }
-
- /** Returns true if the given number is the number of the configured voicemail. */
+ /**
+ * Returns true if the given number is the number of the configured voicemail.
+ * To be able to mock-out this, it is not a static method.
+ */
public boolean isVoicemailNumber(CharSequence number) {
return PhoneNumberUtils.isVoiceMailNumber(number.toString());
}
- /** Returns true if the given number is a SIP address. */
+ /**
+ * Returns true if the given number is a SIP address.
+ * To be able to mock-out this, it is not a static method.
+ */
public boolean isSipNumber(CharSequence number) {
return PhoneNumberUtils.isUriNumber(number.toString());
}
diff --git a/src/com/android/contacts/detail/CarouselTab.java b/src/com/android/contacts/detail/CarouselTab.java
index 677f0ad..cdcf6b2 100644
--- a/src/com/android/contacts/detail/CarouselTab.java
+++ b/src/com/android/contacts/detail/CarouselTab.java
@@ -73,8 +73,9 @@
@Override
public void disableTouchInterceptor() {
- // This shouldn't be called because there is no need to disable the touch interceptor if
- // there is no content within the tab that needs to be clicked.
+ if (mTouchInterceptLayer != null) {
+ mTouchInterceptLayer.setVisibility(View.GONE);
+ }
}
@Override
diff --git a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
index b81cebf..912d7fb 100644
--- a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
+++ b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
@@ -20,6 +20,8 @@
import com.android.contacts.ContactLoader.Result;
import com.android.contacts.ContactPhotoManager;
import com.android.contacts.R;
+import com.android.contacts.activities.PhotoSelectionActivity;
+import com.android.contacts.model.EntityDeltaList;
import com.android.contacts.preference.ContactsPreferences;
import com.android.contacts.util.ContactBadgeUtil;
import com.android.contacts.util.HtmlUtils;
@@ -32,12 +34,14 @@
import android.content.Context;
import android.content.Entity;
import android.content.Entity.NamedContentValues;
+import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.ContactsContract;
@@ -51,6 +55,7 @@
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
@@ -192,11 +197,20 @@
/**
* Sets the contact photo to display in the given {@link ImageView}. If bitmap is null, the
* default placeholder image is shown.
+ * @param context The context.
+ * @param contactData The contact loader result.
+ * @param photoView The photo view that will host the image and act as the basis for the
+ * photo selector.
+ * @param expandPhotoOnClick Whether the photo should be expanded to fill more of the screen
+ * when clicked.
+ * @return The onclick listener for the photo. When clicked, a photo selection activity will
+ * be launched.
*/
- public static void setPhoto(Context context, Result contactData, ImageView photoView) {
+ public static OnClickListener setPhoto(Context context, Result contactData,
+ ImageView photoView, boolean expandPhotoOnClick) {
if (contactData.isLoadingPhoto()) {
photoView.setImageBitmap(null);
- return;
+ return null;
}
byte[] photo = contactData.getPhotoBinaryData();
Bitmap bitmap = photo != null ? BitmapFactory.decodeByteArray(photo, 0, photo.length)
@@ -209,6 +223,61 @@
photoView.startAnimation(animation);
}
photoView.setImageBitmap(bitmap);
+
+ // Set up the photo to display a full-screen photo selection activity when clicked.
+ OnClickListener clickListener = new PhotoClickListener(context, contactData, bitmap,
+ photo, expandPhotoOnClick);
+ photoView.setOnClickListener(clickListener);
+ return clickListener;
+ }
+
+ private static final class PhotoClickListener implements OnClickListener {
+
+ private final Context mContext;
+ private final Result mContactData;
+ private final Bitmap mPhotoBitmap;
+ private final byte[] mPhotoBytes;
+ private final boolean mExpandPhotoOnClick;
+ public PhotoClickListener(Context context, Result contactData, Bitmap photoBitmap,
+ byte[] photoBytes, boolean expandPhotoOnClick) {
+ mContext = context;
+ mContactData = contactData;
+ mPhotoBitmap = photoBitmap;
+ mPhotoBytes = photoBytes;
+ mExpandPhotoOnClick = expandPhotoOnClick;
+ }
+
+ @Override
+ public void onClick(View v) {
+ // Assemble the intent.
+ EntityDeltaList delta = EntityDeltaList.fromIterator(
+ mContactData.getEntities().iterator());
+
+ // Find location and bounds of target view, adjusting based on the
+ // assumed local density.
+ final float appScale =
+ mContext.getResources().getCompatibilityInfo().applicationScale;
+ final int[] pos = new int[2];
+ v.getLocationOnScreen(pos);
+
+ final Rect rect = new Rect();
+ rect.left = (int) (pos[0] * appScale + 0.5f);
+ rect.top = (int) (pos[1] * appScale + 0.5f);
+ rect.right = (int) ((pos[0] + v.getWidth()) * appScale + 0.5f);
+ rect.bottom = (int) ((pos[1] + v.getHeight()) * appScale + 0.5f);
+
+ Uri photoUri = null;
+ if (mContactData.getPhotoUri() != null) {
+ photoUri = Uri.parse(mContactData.getPhotoUri());
+ }
+ Intent photoSelectionIntent = PhotoSelectionActivity.buildIntent(mContext,
+ photoUri, mPhotoBitmap, mPhotoBytes, rect, delta, mContactData.isUserProfile(),
+ mContactData.isDirectoryEntry(), mExpandPhotoOnClick);
+ // Cache the bitmap directly, so the activity can pull it from the photo manager.
+ ContactPhotoManager.getInstance(mContext).cacheBitmap(photoUri, mPhotoBitmap,
+ mPhotoBytes);
+ mContext.startActivity(photoSelectionIntent);
+ }
}
/**
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 26d240f..7c79a4c 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -40,8 +40,8 @@
import com.android.contacts.util.Constants;
import com.android.contacts.util.DataStatus;
import com.android.contacts.util.DateUtils;
-import com.android.contacts.util.StructuredPostalUtils;
import com.android.contacts.util.PhoneCapabilityTester;
+import com.android.contacts.util.StructuredPostalUtils;
import com.android.contacts.widget.TransitionAnimationView;
import com.android.internal.telephony.ITelephony;
import com.google.common.annotations.VisibleForTesting;
@@ -84,7 +84,6 @@
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.DisplayNameSources;
-import android.provider.ContactsContract.Intents.UI;
import android.provider.ContactsContract.PhoneLookup;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.StatusUpdates;
@@ -133,13 +132,6 @@
private static final String KEY_CONTACT_URI = "contactUri";
private static final String KEY_LIST_STATE = "liststate";
- // TODO: Make maxLines a field in {@link DataKind}
- private static final int WEBSITE_MAX_LINES = 1;
- private static final int SIP_ADDRESS_MAX_LINES= 1;
- private static final int POSTAL_ADDRESS_MAX_LINES = 10;
- private static final int GROUP_MAX_LINES = 10;
- private static final int NOTE_MAX_LINES = 100;
-
private Context mContext;
private View mView;
private OnScrollListener mVerticalScrollListener;
@@ -147,7 +139,8 @@
private Listener mListener;
private ContactLoader.Result mContactData;
- private ImageView mStaticPhotoView;
+ private ViewGroup mStaticPhotoContainer;
+ private View mPhotoTouchOverlay;
private ListView mListView;
private ViewAdapter mAdapter;
private Uri mPrimaryPhoneUri = null;
@@ -155,14 +148,14 @@
private Button mQuickFixButton;
private QuickFix mQuickFix;
- private int mNumPhoneNumbers = 0;
private String mDefaultCountryIso;
private boolean mContactHasSocialUpdates;
private boolean mShowStaticPhoto = true;
private final QuickFix[] mPotentialQuickFixes = new QuickFix[] {
new MakeLocalCopyQuickFix(),
- new AddToMyContactsQuickFix() };
+ new AddToMyContactsQuickFix()
+ };
/**
* Device capability: Set during buildEntries and used in the long-press context menu
@@ -280,7 +273,8 @@
mInflater = inflater;
- mStaticPhotoView = (ImageView) mView.findViewById(R.id.photo);
+ mStaticPhotoContainer = (ViewGroup) mView.findViewById(R.id.static_photo_container);
+ mPhotoTouchOverlay = mView.findViewById(R.id.photo_touch_intercept_overlay);
mListView = (ListView) mView.findViewById(android.R.id.list);
mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
@@ -442,16 +436,22 @@
mContactHasSocialUpdates = !mContactData.getStreamItems().isEmpty();
// Setup the photo if applicable
- if (mStaticPhotoView != null) {
- // The presence of a static photo view is not sufficient to determine whether or not
- // we should show the photo. Check the mShowStaticPhoto flag which can be set by an
+ if (mStaticPhotoContainer != null) {
+ // The presence of a static photo container is not sufficient to determine whether or
+ // not we should show the photo. Check the mShowStaticPhoto flag which can be set by an
// outside class depending on screen size, layout, and whether the contact has social
// updates or not.
if (mShowStaticPhoto) {
- mStaticPhotoView.setVisibility(View.VISIBLE);
- ContactDetailDisplayUtils.setPhoto(mContext, mContactData, mStaticPhotoView);
+ mStaticPhotoContainer.setVisibility(View.VISIBLE);
+ ImageView photoView = (ImageView) mStaticPhotoContainer.findViewById(R.id.photo);
+ OnClickListener listener = ContactDetailDisplayUtils.setPhoto(mContext,
+ mContactData, photoView, false);
+ if (mPhotoTouchOverlay != null) {
+ mPhotoTouchOverlay.setVisibility(View.VISIBLE);
+ mPhotoTouchOverlay.setOnClickListener(listener);
+ }
} else {
- mStaticPhotoView.setVisibility(View.GONE);
+ mStaticPhotoContainer.setVisibility(View.GONE);
}
}
@@ -541,7 +541,6 @@
mRawContactIds.clear();
mPrimaryPhoneUri = null;
- mNumPhoneNumbers = 0;
final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
@@ -586,6 +585,7 @@
final DetailViewEntry entry = DetailViewEntry.fromValues(mContext, mimeType, kind,
dataId, entryValues, mContactData.isDirectoryEntry(),
mContactData.getDirectoryId());
+ entry.maxLines = kind.maxLinesForDisplay;
final boolean hasData = !TextUtils.isEmpty(entry.data);
Integer superPrimary = entryValues.getAsInteger(Data.IS_SUPER_PRIMARY);
@@ -595,13 +595,12 @@
// Always ignore the name. It is shown in the header if set
} else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build phone entries
- mNumPhoneNumbers++;
String phoneNumberE164 =
entryValues.getAsString(PhoneLookup.NORMALIZED_NUMBER);
entry.data = PhoneNumberUtils.formatNumber(
entry.data, phoneNumberE164, mDefaultCountryIso);
- final Intent phoneIntent = mHasPhone ? new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts(Constants.SCHEME_TEL, entry.data, null)) : null;
+ final Intent phoneIntent = mHasPhone ?
+ ContactsUtils.getCallIntent(entry.data) : null;
final Intent smsIntent = mHasSms ? new Intent(Intent.ACTION_SENDTO,
Uri.fromParts(Constants.SCHEME_SMSTO, entry.data, null)) : null;
@@ -641,22 +640,22 @@
imKind, dataId, entryValues, mContactData.isDirectoryEntry(),
mContactData.getDirectoryId());
buildImActions(mContext, imEntry, entryValues);
- imEntry.applyStatus(status, false);
+ imEntry.setPresence(status.getPresence());
+ imEntry.maxLines = imKind.maxLinesForDisplay;
mImEntries.add(imEntry);
}
} else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build postal entries
- entry.maxLines = POSTAL_ADDRESS_MAX_LINES;
entry.intent = StructuredPostalUtils.getViewPostalAddressIntent(entry.data);
mPostalEntries.add(entry);
} else if (Im.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build IM entries
buildImActions(mContext, entry, entryValues);
- // Apply presence and status details when available
+ // Apply presence when available
final DataStatus status = mContactData.getStatuses().get(entry.id);
if (status != null) {
- entry.applyStatus(status, false);
+ entry.setPresence(status.getPresence());
}
mImEntries.add(entry);
} else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) {
@@ -678,12 +677,10 @@
} else if (Note.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build note entries
entry.uri = null;
- entry.maxLines = NOTE_MAX_LINES;
mNoteEntries.add(entry);
} else if (Website.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build Website entries
entry.uri = null;
- entry.maxLines = WEBSITE_MAX_LINES;
try {
WebAddress webAddress = new WebAddress(entry.data);
entry.intent = new Intent(Intent.ACTION_VIEW,
@@ -695,9 +692,8 @@
} else if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build SipAddress entries
entry.uri = null;
- entry.maxLines = SIP_ADDRESS_MAX_LINES;
if (mHasSip) {
- entry.intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+ entry.intent = ContactsUtils.getCallIntent(
Uri.fromParts(Constants.SCHEME_SIP, entry.data, null));
} else {
entry.intent = null;
@@ -759,7 +755,6 @@
entry.mimetype = GroupMembership.MIMETYPE;
entry.kind = mContext.getString(R.string.groupsLabel);
entry.data = sb.toString();
- entry.maxLines = GROUP_MAX_LINES;
mGroupEntries.add(entry);
}
}
@@ -1229,8 +1224,6 @@
public int presence = -1;
public int chatCapability = 0;
- public CharSequence footerLine = null;
-
private boolean mIsInSubSection = false;
DetailViewEntry() {
@@ -1281,21 +1274,8 @@
return entry;
}
- /**
- * Apply given {@link DataStatus} values over this {@link DetailViewEntry}
- *
- * @param fillData When true, the given status replaces {@link #data}
- * and {@link #footerLine}. Otherwise only {@link #presence}
- * is updated.
- */
- public DetailViewEntry applyStatus(DataStatus status, boolean fillData) {
- presence = status.getPresence();
- if (fillData && status.isValid()) {
- this.data = status.getStatus().toString();
- this.footerLine = status.getTimestampLabel(context);
- }
-
- return this;
+ public void setPresence(int presence) {
+ this.presence = presence;
}
public void setIsInSubSection(boolean isInSubSection) {
@@ -1371,10 +1351,11 @@
/**
* Cache of the children views for a view that displays a header view entry.
*/
- private static class HeaderViewCache {
+ private static class HeaderViewCache implements ViewOverlay {
public final TextView displayNameView;
public final TextView companyView;
public final ImageView photoView;
+ public final View photoOverlayView;
public final CheckBox starredView;
public final int layoutResourceId;
@@ -1382,9 +1363,30 @@
displayNameView = (TextView) view.findViewById(R.id.name);
companyView = (TextView) view.findViewById(R.id.company);
photoView = (ImageView) view.findViewById(R.id.photo);
+ photoOverlayView = view.findViewById(R.id.photo_touch_intercept_overlay);
starredView = (CheckBox) view.findViewById(R.id.star);
layoutResourceId = layoutResourceInflated;
}
+
+ @Override
+ public void setAlphaLayerValue(float alpha) {
+ // Nothing to do.
+ }
+
+ @Override
+ public void enableTouchInterceptor(OnClickListener clickListener) {
+ if (photoOverlayView != null) {
+ photoOverlayView.setVisibility(View.VISIBLE);
+ photoOverlayView.setOnClickListener(clickListener);
+ }
+ }
+
+ @Override
+ public void disableTouchInterceptor() {
+ if (photoOverlayView != null) {
+ photoOverlayView.setVisibility(View.GONE);
+ }
+ }
}
/**
@@ -1407,7 +1409,6 @@
private static class DetailViewCache {
public final TextView type;
public final TextView data;
- public final TextView footer;
public final ImageView presenceIcon;
public final ImageView secondaryActionButton;
public final View actionsViewContainer;
@@ -1421,7 +1422,6 @@
OnClickListener secondaryActionClickListener) {
type = (TextView) view.findViewById(R.id.type);
data = (TextView) view.findViewById(R.id.data);
- footer = (TextView) view.findViewById(R.id.footer);
primaryIndicator = view.findViewById(R.id.primary_indicator);
presenceIcon = (ImageView) view.findViewById(R.id.presence_icon);
@@ -1498,7 +1498,10 @@
// Set the photo if it should be displayed
if (viewCache.photoView != null) {
- ContactDetailDisplayUtils.setPhoto(mContext, mContactData, viewCache.photoView);
+ OnClickListener listener = ContactDetailDisplayUtils.setPhoto(mContext,
+ mContactData, viewCache.photoView,
+ !PhoneCapabilityTester.isUsingTwoPanes(mContext));
+ viewCache.enableTouchInterceptor(listener);
}
// Set the starred state if it should be displayed
@@ -1606,14 +1609,6 @@
views.data.setText(entry.data);
setMaxLines(views.data, entry.maxLines);
- // Set the footer
- if (!TextUtils.isEmpty(entry.footerLine)) {
- views.footer.setText(entry.footerLine);
- views.footer.setVisibility(View.VISIBLE);
- } else {
- views.footer.setVisibility(View.GONE);
- }
-
// Set the default contact method
views.primaryIndicator.setVisibility(entry.isPrimary ? View.VISIBLE : View.GONE);
@@ -1903,9 +1898,7 @@
}
} else if (mPrimaryPhoneUri != null) {
// There isn't anything selected, call the default number
- final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- mPrimaryPhoneUri);
- mContext.startActivity(intent);
+ mContext.startActivity(ContactsUtils.getCallIntent(mPrimaryPhoneUri));
return true;
}
return false;
@@ -2007,7 +2000,7 @@
// should update the ui
final Intent intent = ContactSaveService.createSaveContactIntent(getActivity(),
contactDeltaList, "", 0, false, getActivity().getClass(),
- Intent.ACTION_VIEW);
+ Intent.ACTION_VIEW, null);
getActivity().startService(intent);
}
}
@@ -2136,17 +2129,14 @@
private final static class InvitableAccountTypesAdapter extends BaseAdapter {
private final Context mContext;
private final LayoutInflater mInflater;
- private final ContactLoader.Result mContactData;
private final ArrayList<AccountType> mAccountTypes;
public InvitableAccountTypesAdapter(Context context, ContactLoader.Result contactData) {
mContext = context;
mInflater = LayoutInflater.from(context);
- mContactData = contactData;
final List<AccountType> types = contactData.getInvitableAccountTypes();
mAccountTypes = new ArrayList<AccountType>(types.size());
- AccountTypeManager manager = AccountTypeManager.getInstance(context);
for (int i = 0; i < types.size(); i++) {
mAccountTypes.add(types.get(i));
}
diff --git a/src/com/android/contacts/detail/ContactDetailTabCarousel.java b/src/com/android/contacts/detail/ContactDetailTabCarousel.java
index 045e900..186cedd 100644
--- a/src/com/android/contacts/detail/ContactDetailTabCarousel.java
+++ b/src/com/android/contacts/detail/ContactDetailTabCarousel.java
@@ -18,7 +18,9 @@
import com.android.contacts.ContactLoader;
import com.android.contacts.R;
+import com.android.contacts.util.PhoneCapabilityTester;
+import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
@@ -47,9 +49,14 @@
/** Tab height as defined as a fraction of the screen width */
private float mTabHeightScreenWidthFraction;
+ /** Height in pixels of the shadow under the tab carousel */
+ private int mTabShadowHeight;
+
private ImageView mPhotoView;
private TextView mStatusView;
private ImageView mStatusPhotoView;
+ private boolean mHasPhoto;
+ private OnClickListener mPhotoClickListener;
private Listener mListener;
@@ -89,6 +96,8 @@
Resources resources = mContext.getResources();
mTabDisplayLabelHeight = resources.getDimensionPixelSize(
R.dimen.detail_tab_carousel_tab_label_height);
+ mTabShadowHeight = resources.getDimensionPixelSize(
+ R.dimen.detail_contact_photo_shadow_height);
mTabWidthScreenWidthFraction = resources.getFraction(
R.fraction.tab_width_screen_width_percentage, 1, 1);
mTabHeightScreenWidthFraction = resources.getFraction(
@@ -125,7 +134,7 @@
// from the total length of the tabs.
mAllowedHorizontalScrollLength = tabWidth * TAB_COUNT - screenWidth;
- int tabHeight = (int) (screenWidth * mTabHeightScreenWidthFraction);
+ int tabHeight = (int) (screenWidth * mTabHeightScreenWidthFraction) + mTabShadowHeight;
// Set the child {@link LinearLayout} to be TAB_COUNT * the computed tab width so that the
// {@link LinearLayout}'s children (which are the tabs) will evenly split that width.
if (getChildCount() > 0) {
@@ -153,7 +162,11 @@
private final OnClickListener mAboutTabTouchInterceptListener = new OnClickListener() {
@Override
public void onClick(View v) {
- mListener.onTabSelected(TAB_INDEX_ABOUT);
+ if (mCurrentTab == TAB_INDEX_ABOUT && mPhotoClickListener != null) {
+ mPhotoClickListener.onClick(v);
+ } else {
+ mListener.onTabSelected(TAB_INDEX_ABOUT);
+ }
}
};
@@ -256,9 +269,11 @@
case TAB_INDEX_ABOUT:
mAboutTab.showSelectedState();
mUpdatesTab.showDeselectedState();
+ mUpdatesTab.enableTouchInterceptor(mUpdatesTabTouchInterceptListener);
break;
case TAB_INDEX_UPDATES:
mUpdatesTab.showSelectedState();
+ mUpdatesTab.disableTouchInterceptor();
mAboutTab.showDeselectedState();
break;
default:
@@ -275,10 +290,12 @@
if (contactData == null) {
return;
}
+ mHasPhoto = contactData.getPhotoUri() != null;
// TODO: Move this into the {@link CarouselTab} class when the updates fragment code is more
// finalized
- ContactDetailDisplayUtils.setPhoto(mContext, contactData, mPhotoView);
+ mPhotoClickListener = ContactDetailDisplayUtils.setPhoto(mContext, contactData, mPhotoView,
+ !PhoneCapabilityTester.isUsingTwoPanes(mContext));
ContactDetailDisplayUtils.setSocialSnippet(mContext, contactData, mStatusView,
mStatusPhotoView);
}
diff --git a/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java b/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
index edcfc39..c708dc8 100644
--- a/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
+++ b/src/com/android/contacts/detail/ContactDetailViewPagerAdapter.java
@@ -19,6 +19,7 @@
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
+import android.view.ViewGroup;
/**
* Adapter for the {@link ViewPager} for the contact detail page for a contact in 2 cases:
@@ -88,11 +89,11 @@
}
@Override
- public void startUpdate(View container) {
+ public void startUpdate(ViewGroup container) {
}
@Override
- public Object instantiateItem(View container, int position) {
+ public Object instantiateItem(ViewGroup container, int position) {
switch (position) {
case INDEX_ABOUT_FRAGMENT:
mAboutFragmentView.setVisibility(View.VISIBLE);
@@ -105,12 +106,12 @@
}
@Override
- public void destroyItem(View container, int position, Object object) {
+ public void destroyItem(ViewGroup container, int position, Object object) {
((View) object).setVisibility(View.GONE);
}
@Override
- public void finishUpdate(View container) {
+ public void finishUpdate(ViewGroup container) {
}
@Override
diff --git a/src/com/android/contacts/detail/PhotoSelectionHandler.java b/src/com/android/contacts/detail/PhotoSelectionHandler.java
new file mode 100644
index 0000000..1423c65
--- /dev/null
+++ b/src/com/android/contacts/detail/PhotoSelectionHandler.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.detail;
+
+import com.android.contacts.R;
+import com.android.contacts.editor.PhotoActionPopup;
+import com.android.contacts.model.AccountType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.EntityDelta;
+import com.android.contacts.model.EntityDelta.ValuesDelta;
+import com.android.contacts.model.EntityDeltaList;
+import com.android.contacts.model.EntityModifier;
+
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.media.MediaScannerConnection;
+import android.net.Uri;
+import android.os.Environment;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.DisplayPhoto;
+import android.provider.ContactsContract.RawContacts;
+import android.provider.MediaStore;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ListPopupWindow;
+import android.widget.PopupWindow.OnDismissListener;
+import android.widget.Toast;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Handles displaying a photo selection popup for a given photo view and dealing with the results
+ * that come back.
+ */
+public class PhotoSelectionHandler implements OnClickListener {
+
+ private static final String TAG = PhotoSelectionHandler.class.getSimpleName();
+
+ private static final File PHOTO_DIR = new File(
+ Environment.getExternalStorageDirectory() + "/DCIM/Camera");
+
+ private static final String PHOTO_DATE_FORMAT = "'IMG'_yyyyMMdd_HHmmss";
+
+ private static final int REQUEST_CODE_CAMERA_WITH_DATA = 1001;
+ private static final int REQUEST_CODE_PHOTO_PICKED_WITH_DATA = 1002;
+
+ private final Context mContext;
+ private final View mPhotoView;
+ private final int mPhotoMode;
+ private final int mPhotoPickSize;
+ private final EntityDeltaList mState;
+ private final boolean mIsDirectoryContact;
+ private ListPopupWindow mPopup;
+ private AccountType mWritableAccount;
+ private PhotoActionListener mListener;
+
+ public PhotoSelectionHandler(Context context, View photoView, int photoMode,
+ boolean isDirectoryContact, EntityDeltaList state) {
+ mContext = context;
+ mPhotoView = photoView;
+ mPhotoMode = photoMode;
+ mIsDirectoryContact = isDirectoryContact;
+ mState = state;
+ mPhotoPickSize = getPhotoPickSize();
+ }
+
+ public void destroy() {
+ if (mPopup != null) {
+ mPopup.dismiss();
+ }
+ }
+
+ public PhotoActionListener getListener() {
+ return mListener;
+ }
+
+ public void setListener(PhotoActionListener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mListener != null) {
+ if (getWritableEntityIndex() != -1) {
+ mPopup = PhotoActionPopup.createPopupMenu(
+ mContext, mPhotoView, mListener, mPhotoMode);
+ mPopup.setOnDismissListener(new OnDismissListener() {
+ @Override
+ public void onDismiss() {
+ mListener.onPhotoSelectionDismissed();
+ }
+ });
+ mPopup.show();
+ }
+ }
+ }
+
+ /**
+ * Attempts to handle the given activity result. Returns whether this handler was able to
+ * process the result successfully.
+ * @param requestCode The request code.
+ * @param resultCode The result code.
+ * @param data The intent that was returned.
+ * @return Whether the handler was able to process the result.
+ */
+ public boolean handlePhotoActivityResult(int requestCode, int resultCode, Intent data) {
+ if (resultCode == Activity.RESULT_OK) {
+ switch (requestCode) {
+ case REQUEST_CODE_PHOTO_PICKED_WITH_DATA: {
+ Bitmap bitmap = BitmapFactory.decodeFile(
+ mListener.getCurrentPhotoFile().getAbsolutePath());
+ mListener.onPhotoSelected(bitmap);
+ return true;
+ }
+ case REQUEST_CODE_CAMERA_WITH_DATA: {
+ doCropPhoto(mListener.getCurrentPhotoFile());
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return the index of the first entity in the contact data that belongs to a contact-writable
+ * account, or -1 if no such entity exists.
+ */
+ private int getWritableEntityIndex() {
+ // Directory entries are non-writable.
+ if (mIsDirectoryContact) {
+ return -1;
+ }
+
+ // Find the first writable entity.
+ int entityIndex = 0;
+ for (EntityDelta delta : mState) {
+ ContentValues entityValues = delta.getValues().getCompleteValues();
+ String type = entityValues.getAsString(RawContacts.ACCOUNT_TYPE);
+ String dataSet = entityValues.getAsString(RawContacts.DATA_SET);
+ AccountType accountType = AccountTypeManager.getInstance(mContext).getAccountType(
+ type, dataSet);
+ if (accountType.areContactsWritable()) {
+ mWritableAccount = accountType;
+ return entityIndex;
+ }
+ entityIndex++;
+ }
+ return -1;
+ }
+
+ /**
+ * Return the raw-contact id of the first entity in the contact data that belongs to a
+ * contact-writable account, or -1 if no such entity exists.
+ */
+ protected long getWritableEntityId() {
+ int index = getWritableEntityIndex();
+ if (index == -1) return -1;
+ return mState.get(index).getValues().getId();
+ }
+
+ /**
+ * Utility method to retrieve the entity delta for attaching the given bitmap to the contact.
+ * This will attach the photo to the first contact-writable account that provided data to the
+ * contact. It is the caller's responsibility to apply the delta.
+ * @param bitmap The photo to use.
+ * @return An entity delta list that can be applied to associate the bitmap with the contact,
+ * or null if the photo could not be parsed or none of the accounts associated with the
+ * contact are writable.
+ */
+ public EntityDeltaList getDeltaForAttachingPhotoToContact() {
+ // Find the first writable entity.
+ int writableEntityIndex = getWritableEntityIndex();
+ if (writableEntityIndex != -1) {
+ // Note - guaranteed to have contact data if we have a writable entity index.
+ EntityDelta delta = mState.get(writableEntityIndex);
+ ValuesDelta child = EntityModifier.ensureKindExists(
+ delta, mWritableAccount, Photo.CONTENT_ITEM_TYPE);
+ child.setFromTemplate(false);
+ child.put(Photo.IS_SUPER_PRIMARY, 1);
+
+ return mState;
+ }
+ return null;
+ }
+
+ /**
+ * Sends a newly acquired photo to Gallery for cropping
+ */
+ private void doCropPhoto(File f) {
+ try {
+ // Add the image to the media store
+ MediaScannerConnection.scanFile(
+ mContext,
+ new String[] { f.getAbsolutePath() },
+ new String[] { null },
+ null);
+
+ // Launch gallery to crop the photo
+ final Intent intent = getCropImageIntent(f);
+ mListener.startPickFromGalleryActivity(intent, REQUEST_CODE_PHOTO_PICKED_WITH_DATA, f);
+ } catch (Exception e) {
+ Log.e(TAG, "Cannot crop image", e);
+ Toast.makeText(mContext, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
+ }
+ }
+
+ private String getPhotoFileName() {
+ Date date = new Date(System.currentTimeMillis());
+ SimpleDateFormat dateFormat = new SimpleDateFormat(PHOTO_DATE_FORMAT);
+ return dateFormat.format(date) + ".jpg";
+ }
+
+ private File getPhotoFile() {
+ PHOTO_DIR.mkdirs();
+ return new File(PHOTO_DIR, getPhotoFileName());
+ }
+
+ private int getPhotoPickSize() {
+ // Note that this URI is safe to call on the UI thread.
+ Cursor c = mContext.getContentResolver().query(DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI,
+ new String[]{DisplayPhoto.DISPLAY_MAX_DIM}, null, null, null);
+ try {
+ c.moveToFirst();
+ return c.getInt(0);
+ } finally {
+ c.close();
+ }
+ }
+
+ /**
+ * Constructs an intent for picking a photo from Gallery, cropping it and returning the bitmap.
+ */
+ private Intent getPhotoPickIntent(File photoFile) {
+ Uri photoUri = Uri.fromFile(photoFile);
+ 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", mPhotoPickSize);
+ intent.putExtra("outputY", mPhotoPickSize);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
+ return intent;
+ }
+
+ /**
+ * Constructs an intent for image cropping.
+ */
+ private Intent getCropImageIntent(File photoFile) {
+ Uri photoUri = Uri.fromFile(photoFile);
+ 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", mPhotoPickSize);
+ intent.putExtra("outputY", mPhotoPickSize);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
+ return intent;
+ }
+
+ /**
+ * Constructs an intent for capturing a photo and storing it in a temporary file.
+ */
+ public static Intent getTakePhotoIntent(File f) {
+ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
+ return intent;
+ }
+
+ public abstract class PhotoActionListener implements PhotoActionPopup.Listener {
+ @Override
+ public void onUseAsPrimaryChosen() {
+ // No default implementation.
+ }
+
+ @Override
+ public void onRemovePictureChosen() {
+ // No default implementation.
+ }
+
+ @Override
+ public void onTakePhotoChosen() {
+ try {
+ // Launch camera to take photo for selected contact
+ File f = getPhotoFile();
+ final Intent intent = getTakePhotoIntent(f);
+ startTakePhotoActivity(intent, REQUEST_CODE_CAMERA_WITH_DATA, f);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(mContext, R.string.photoPickerNotFoundText,
+ Toast.LENGTH_LONG).show();
+ }
+ }
+
+ @Override
+ public void onPickFromGalleryChosen() {
+ try {
+ // Launch picker to choose photo for selected contact
+ File f = getPhotoFile();
+ final Intent intent = getPhotoPickIntent(f);
+ startPickFromGalleryActivity(intent, REQUEST_CODE_PHOTO_PICKED_WITH_DATA, f);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(mContext, R.string.photoPickerNotFoundText,
+ Toast.LENGTH_LONG).show();
+ }
+ }
+
+ /**
+ * Should initiate an activity to take a photo using the camera.
+ * @param intent The image capture intent.
+ * @param requestCode The request code to use, suitable for handling by
+ * {@link PhotoSelectionHandler#handlePhotoActivityResult(int, int, Intent)}.
+ * @param photoFile The file path that will be used to store the photo. This is generally
+ * what should be returned by
+ * {@link PhotoSelectionHandler.PhotoActionListener#getCurrentPhotoFile()}.
+ */
+ public abstract void startTakePhotoActivity(Intent intent, int requestCode, File photoFile);
+
+ /**
+ * Should initiate an activity pick a photo from the gallery.
+ * @param intent The image capture intent.
+ * @param requestCode The request code to use, suitable for handling by
+ * @param photoFile The temporary file that the cropped image is written to before being
+ * stored by the content-provider.
+ * {@link PhotoSelectionHandler#handlePhotoActivityResult(int, int, Intent)}.
+ */
+ public abstract void startPickFromGalleryActivity(Intent intent, int requestCode,
+ File photoFile);
+
+ /**
+ * Called when the user has completed selection of a photo.
+ * @param bitmap The selected and cropped photo.
+ */
+ public abstract void onPhotoSelected(Bitmap bitmap);
+
+ /**
+ * Gets the current photo file that is being interacted with. It is the activity or
+ * fragment's responsibility to maintain this in saved state, since this handler instance
+ * will not survive rotation.
+ */
+ public abstract File getCurrentPhotoFile();
+
+ /**
+ * Called when the photo selection dialog is dismissed.
+ */
+ public abstract void onPhotoSelectionDismissed();
+ }
+}
diff --git a/src/com/android/contacts/detail/TransformableImageView.java b/src/com/android/contacts/detail/TransformableImageView.java
new file mode 100644
index 0000000..6edc42b
--- /dev/null
+++ b/src/com/android/contacts/detail/TransformableImageView.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.detail;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageView;
+
+/**
+ * Extension to ImageView that handles cropping during resize animations.
+ */
+public class TransformableImageView extends ImageView {
+
+ public TransformableImageView(Context context) {
+ super(context);
+ }
+
+ public TransformableImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public TransformableImageView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ int saveCount = canvas.getSaveCount();
+ canvas.save();
+ canvas.translate(mPaddingLeft, mPaddingTop);
+ Matrix drawMatrix = new Matrix();
+ int dwidth = getDrawable().getIntrinsicWidth();
+ int dheight = getDrawable().getIntrinsicHeight();
+
+ int vwidth = getWidth() - mPaddingLeft - mPaddingRight;
+ int vheight = getHeight() - mPaddingTop - mPaddingBottom;
+ float scale;
+ float dx = 0, dy = 0;
+
+ if (dwidth * vheight > vwidth * dheight) {
+ scale = (float) vheight / (float) dheight;
+ dx = (vwidth - dwidth * scale) * 0.5f;
+ } else {
+ scale = (float) vwidth / (float) dwidth;
+ dy = (vheight - dheight * scale) * 0.5f;
+ }
+
+ drawMatrix.setScale(scale, scale);
+ drawMatrix.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));
+ canvas.concat(drawMatrix);
+ getDrawable().draw(canvas);
+ canvas.restoreToCount(saveCount);
+ }
+}
diff --git a/src/com/android/contacts/dialpad/DialpadFragment.java b/src/com/android/contacts/dialpad/DialpadFragment.java
index 793717d..1087ecc 100644
--- a/src/com/android/contacts/dialpad/DialpadFragment.java
+++ b/src/com/android/contacts/dialpad/DialpadFragment.java
@@ -20,7 +20,7 @@
import com.android.contacts.R;
import com.android.contacts.SpecialCharSequenceMgr;
import com.android.contacts.activities.DialtactsActivity;
-import com.android.contacts.activities.DialtactsActivity.ViewPagerVisibilityListener;
+import com.android.contacts.util.Constants;
import com.android.contacts.util.PhoneNumberFormatter;
import com.android.internal.telephony.ITelephony;
import com.android.phone.CallLogAsync;
@@ -54,31 +54,29 @@
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.text.Editable;
+import android.text.SpannableString;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.DialerKeyListener;
+import android.text.style.RelativeSizeSpan;
import android.util.Log;
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.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
-import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.TextView;
-import java.util.HashSet;
-import java.util.Set;
-
/**
* Fragment that displays a twelve-key phone dialpad.
*/
@@ -87,7 +85,7 @@
View.OnLongClickListener, View.OnKeyListener,
AdapterView.OnItemClickListener, TextWatcher,
PopupMenu.OnMenuItemClickListener,
- ViewPagerVisibilityListener {
+ View.OnTouchListener {
private static final String TAG = DialpadFragment.class.getSimpleName();
private static final String EMPTY_NUMBER = "";
@@ -112,9 +110,12 @@
private View mDigitsContainer;
private EditText mDigits;
+ /** Remembers if we need to clear digits field when the screen is completely gone. */
+ private boolean mClearDigitsOnStop;
+
private View mDelete;
private ToneGenerator mToneGenerator;
- private Object mToneGeneratorLock = new Object();
+ private final Object mToneGeneratorLock = new Object();
private View mDialpad;
private View mAdditionalButtonsRow;
@@ -130,23 +131,21 @@
*/
private String mProhibitedPhoneNumberRegexp;
- private boolean mShowOptionsMenu;
-
// 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 final 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 HapticFeedback mHaptic = new HapticFeedback();
+ private final HapticFeedback mHaptic = new HapticFeedback();
/** Identifier for the "Add Call" intent extra. */
- static final String ADD_CALL_MODE_KEY = "add_call_mode";
+ private static final String ADD_CALL_MODE_KEY = "add_call_mode";
/**
* Identifier for intent extra for sending an empty Flash message for
@@ -158,7 +157,7 @@
* TODO: Keep in sync with the string defined in OutgoingCallBroadcaster.java
* in Phone app until this is replaced with the ITelephony API.
*/
- static final String EXTRA_SEND_EMPTY_FLASH
+ private static final String EXTRA_SEND_EMPTY_FLASH
= "com.android.phone.extra.SEND_EMPTY_FLASH";
private String mCurrentCountryIso;
@@ -188,10 +187,12 @@
private boolean mWasEmptyBeforeTextChange;
+ @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
mWasEmptyBeforeTextChange = TextUtils.isEmpty(s);
}
+ @Override
public void onTextChanged(CharSequence input, int start, int before, int changeCount) {
if (mWasEmptyBeforeTextChange != TextUtils.isEmpty(input)) {
final Activity activity = getActivity();
@@ -204,6 +205,7 @@
// the DTMF dialer handles that functionality now.
}
+ @Override
public void afterTextChanged(Editable input) {
if (SpecialCharSequenceMgr.handleChars(getActivity(), input.toString(), mDigits)) {
// A special sequence was entered, clear the digits
@@ -324,7 +326,7 @@
if (Intent.ACTION_DIAL.equals(action) || Intent.ACTION_VIEW.equals(action)) {
Uri uri = intent.getData();
if (uri != null) {
- if ("tel".equals(uri.getScheme())) {
+ if (Constants.SCHEME_TEL.equals(uri.getScheme())) {
// Put the requested number into the input area
String data = uri.getSchemeSpecificPart();
setFormattedDigits(data, null);
@@ -448,26 +450,30 @@
}
private void setupKeypad(View fragmentView) {
- // Setup the listeners for the buttons
- View view = fragmentView.findViewById(R.id.one);
- view.setOnClickListener(this);
- view.setOnLongClickListener(this);
+ // For numeric buttons, we rely on onTouchListener instead of onClickListener
+ // for faster event handling, while some other buttons since basically
+ // onTouch event conflicts with horizontal swipes.
+ fragmentView.findViewById(R.id.one).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.two).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.three).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.four).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.five).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.six).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.seven).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.eight).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.nine).setOnTouchListener(this);
+ fragmentView.findViewById(R.id.zero).setOnTouchListener(this);
- fragmentView.findViewById(R.id.two).setOnClickListener(this);
- fragmentView.findViewById(R.id.three).setOnClickListener(this);
- fragmentView.findViewById(R.id.four).setOnClickListener(this);
- fragmentView.findViewById(R.id.five).setOnClickListener(this);
- fragmentView.findViewById(R.id.six).setOnClickListener(this);
- fragmentView.findViewById(R.id.seven).setOnClickListener(this);
- fragmentView.findViewById(R.id.eight).setOnClickListener(this);
- fragmentView.findViewById(R.id.nine).setOnClickListener(this);
+ // Buttons other than numeric ones should use onClick as usual.
fragmentView.findViewById(R.id.star).setOnClickListener(this);
-
- view = fragmentView.findViewById(R.id.zero);
- view.setOnClickListener(this);
- view.setOnLongClickListener(this);
-
fragmentView.findViewById(R.id.pound).setOnClickListener(this);
+
+ // Long-pressing one button will initiate Voicemail.
+ fragmentView.findViewById(R.id.one).setOnLongClickListener(this);
+
+ // Long-pressing zero button will enter '+' instead.
+ fragmentView.findViewById(R.id.zero).setOnLongClickListener(this);
+
}
@Override
@@ -526,7 +532,10 @@
// another call, but that call is guaranteed to fail. Perhaps the
// entire dialer UI should be disabled instead.)
if (phoneIsInUse()) {
- mDigits.setHint(R.string.dialerDialpadHintText);
+ final SpannableString hint = new SpannableString(
+ getActivity().getString(R.string.dialerDialpadHintText));
+ hint.setSpan(new RelativeSizeSpan(0.8f), 0, hint.length(), 0);
+ mDigits.setHint(hint);
} else {
// Common case; no hint necessary.
mDigits.setHint(null);
@@ -560,9 +569,18 @@
}
@Override
+ public void onStop() {
+ super.onStop();
+ if (mClearDigitsOnStop) {
+ mClearDigitsOnStop = false;
+ mDigits.getText().clear();
+ }
+ }
+
+ @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
- if (mShowOptionsMenu && ViewConfiguration.get(getActivity()).hasPermanentMenuKey() &&
+ if (ViewConfiguration.get(getActivity()).hasPermanentMenuKey() &&
isLayoutReady() && mDialpadChooser != null) {
inflater.inflate(R.menu.dialpad_options, menu);
}
@@ -571,7 +589,7 @@
@Override
public void onPrepareOptionsMenu(Menu menu) {
// Hardware menu key should be available and Views should already be ready.
- if (mShowOptionsMenu && ViewConfiguration.get(getActivity()).hasPermanentMenuKey() &&
+ if (ViewConfiguration.get(getActivity()).hasPermanentMenuKey() &&
isLayoutReady() && mDialpadChooser != null) {
setupMenuItems(menu);
}
@@ -668,6 +686,7 @@
}
}
+ @Override
public boolean onKey(View view, int keyCode, KeyEvent event) {
switch (view.getId()) {
case R.id.digits:
@@ -680,59 +699,120 @@
return false;
}
+ /**
+ * We handle the key based on the DOWN event, but we wait till the UP event to play the local
+ * DTMF tone (to avoid playing a spurious tone if the user is actually doing a swipe...)
+ */
+ @Override
+ public boolean onTouch(View view, MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ switch (view.getId()) {
+ case R.id.one: {
+ keyPressed(KeyEvent.KEYCODE_1);
+ break;
+ }
+ case R.id.two: {
+ keyPressed(KeyEvent.KEYCODE_2);
+ break;
+ }
+ case R.id.three: {
+ keyPressed(KeyEvent.KEYCODE_3);
+ break;
+ }
+ case R.id.four: {
+ keyPressed(KeyEvent.KEYCODE_4);
+ break;
+ }
+ case R.id.five: {
+ keyPressed(KeyEvent.KEYCODE_5);
+ break;
+ }
+ case R.id.six: {
+ keyPressed(KeyEvent.KEYCODE_6);
+ break;
+ }
+ case R.id.seven: {
+ keyPressed(KeyEvent.KEYCODE_7);
+ break;
+ }
+ case R.id.eight: {
+ keyPressed(KeyEvent.KEYCODE_8);
+ break;
+ }
+ case R.id.nine: {
+ keyPressed(KeyEvent.KEYCODE_9);
+ break;
+ }
+ case R.id.zero: {
+ keyPressed(KeyEvent.KEYCODE_0);
+ break;
+ }
+ default: {
+ Log.wtf(TAG, "Unexpected onTouch(ACTION_DOWN) event from: " + view);
+ break;
+ }
+ }
+ } else if (event.getAction() == MotionEvent.ACTION_UP) {
+ switch (view.getId()) {
+ case R.id.one: {
+ playTone(ToneGenerator.TONE_DTMF_1);
+ break;
+ }
+ case R.id.two: {
+ playTone(ToneGenerator.TONE_DTMF_2);
+ break;
+ }
+ case R.id.three: {
+ playTone(ToneGenerator.TONE_DTMF_3);
+ break;
+ }
+ case R.id.four: {
+ playTone(ToneGenerator.TONE_DTMF_4);
+ break;
+ }
+ case R.id.five: {
+ playTone(ToneGenerator.TONE_DTMF_5);
+ break;
+ }
+ case R.id.six: {
+ playTone(ToneGenerator.TONE_DTMF_6);
+ break;
+ }
+ case R.id.seven: {
+ playTone(ToneGenerator.TONE_DTMF_7);
+ break;
+ }
+ case R.id.eight: {
+ playTone(ToneGenerator.TONE_DTMF_8);
+ break;
+ }
+ case R.id.nine: {
+ playTone(ToneGenerator.TONE_DTMF_9);
+ break;
+ }
+ case R.id.zero: {
+ playTone(ToneGenerator.TONE_DTMF_0);
+ break;
+ }
+ default: {
+ Log.wtf(TAG, "Unexpected onTouch(ACTION_UP) event from: " + view);
+ break;
+ }
+ }
+ } else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
+ // This event will be thrown when a user starts dragging the dialpad screen,
+ // intending horizontal swipe. The system will see the event after ACTION_DOWN while
+ // it won't see relevant ACTION_UP event anymore.
+ //
+ // Here, remove the last digit already entered in the last ACTION_DOWN event.
+ removeLastOneDigitIfPossible();
+ }
+ return false;
+ }
+
@Override
public void onClick(View view) {
switch (view.getId()) {
- case R.id.one: {
- playTone(ToneGenerator.TONE_DTMF_1);
- keyPressed(KeyEvent.KEYCODE_1);
- return;
- }
- case R.id.two: {
- playTone(ToneGenerator.TONE_DTMF_2);
- keyPressed(KeyEvent.KEYCODE_2);
- return;
- }
- case R.id.three: {
- playTone(ToneGenerator.TONE_DTMF_3);
- keyPressed(KeyEvent.KEYCODE_3);
- return;
- }
- case R.id.four: {
- playTone(ToneGenerator.TONE_DTMF_4);
- keyPressed(KeyEvent.KEYCODE_4);
- return;
- }
- case R.id.five: {
- playTone(ToneGenerator.TONE_DTMF_5);
- keyPressed(KeyEvent.KEYCODE_5);
- return;
- }
- case R.id.six: {
- playTone(ToneGenerator.TONE_DTMF_6);
- keyPressed(KeyEvent.KEYCODE_6);
- return;
- }
- case R.id.seven: {
- playTone(ToneGenerator.TONE_DTMF_7);
- keyPressed(KeyEvent.KEYCODE_7);
- return;
- }
- case R.id.eight: {
- playTone(ToneGenerator.TONE_DTMF_8);
- keyPressed(KeyEvent.KEYCODE_8);
- return;
- }
- case R.id.nine: {
- playTone(ToneGenerator.TONE_DTMF_9);
- keyPressed(KeyEvent.KEYCODE_9);
- return;
- }
- case R.id.zero: {
- playTone(ToneGenerator.TONE_DTMF_0);
- keyPressed(KeyEvent.KEYCODE_0);
- return;
- }
case R.id.pound: {
playTone(ToneGenerator.TONE_DTMF_P);
keyPressed(KeyEvent.KEYCODE_POUND);
@@ -770,6 +850,11 @@
if (popup != null) {
popup.show();
}
+ return;
+ }
+ default: {
+ Log.wtf(TAG, "Unexpected onClick() event from: " + view);
+ return;
}
}
}
@@ -787,9 +872,10 @@
return popupMenu;
}
+ @Override
public boolean onLongClick(View view) {
final Editable digits = mDigits.getText();
- int id = view.getId();
+ final int id = view.getId();
switch (id) {
case R.id.deleteButton: {
digits.clear();
@@ -800,20 +886,38 @@
return true;
}
case R.id.one: {
- if (isDigitsEmpty()) {
+ // '1' may be already entered since we rely on onTouch() event for numeric buttons.
+ // Just for safety we also check if the digits field is empty or not.
+ if (isDigitsEmpty() || TextUtils.equals(mDigits.getText(), "1")) {
+ // We'll try to initiate voicemail and thus we want to remove irrelevant string.
+ removeLastOneDigitIfPossible();
+
if (isVoicemailAvailable()) {
callVoicemail();
} else if (getActivity() != null) {
- DialogFragment dialogFragment = ErrorDialogFragment.newInstance(
- R.string.dialog_voicemail_not_ready_title,
- R.string.dialog_voicemail_not_ready_message);
- dialogFragment.show(getFragmentManager(), "voicemail_not_ready");
+ // Voicemail is unavailable maybe because Airplane mode is turned on.
+ // Check the current status and show the most appropriate error message.
+ final boolean isAirplaneModeOn =
+ Settings.System.getInt(getActivity().getContentResolver(),
+ Settings.System.AIRPLANE_MODE_ON, 0) != 0;
+ if (isAirplaneModeOn) {
+ DialogFragment dialogFragment = ErrorDialogFragment.newInstance(
+ R.string.dialog_voicemail_airplane_mode_message);
+ dialogFragment.show(getFragmentManager(),
+ "voicemail_request_during_airplane_mode");
+ } else {
+ DialogFragment dialogFragment = ErrorDialogFragment.newInstance(
+ R.string.dialog_voicemail_not_ready_message);
+ dialogFragment.show(getFragmentManager(), "voicemail_not_ready");
+ }
}
return true;
}
return false;
}
case R.id.zero: {
+ // Remove tentative input ('0') done by onTouch().
+ removeLastOneDigitIfPossible();
keyPressed(KeyEvent.KEYCODE_PLUS);
return true;
}
@@ -828,35 +932,36 @@
return false;
}
+ private void removeLastOneDigitIfPossible() {
+ final Editable editable = mDigits.getText();
+ final int length = editable.length();
+ if (length > 0) {
+ mDigits.getText().delete(length - 1, length);
+ }
+ }
+
public void callVoicemail() {
- startActivity(newVoicemailIntent());
- mDigits.getText().clear(); // TODO: Fix bug 1745781
+ startActivity(ContactsUtils.getVoicemailIntent());
+ mClearDigitsOnStop = true;
getActivity().finish();
}
public static class ErrorDialogFragment extends DialogFragment {
private int mTitleResId;
- private Integer mMessageResId; // can be null
+ private int mMessageResId;
private static final String ARG_TITLE_RES_ID = "argTitleResId";
private static final String ARG_MESSAGE_RES_ID = "argMessageResId";
- public static ErrorDialogFragment newInstance(int titleResId) {
- return newInstanceInter(titleResId, null);
+ public static ErrorDialogFragment newInstance(int messageResId) {
+ return newInstance(0, messageResId);
}
public static ErrorDialogFragment newInstance(int titleResId, int messageResId) {
- return newInstanceInter(titleResId, messageResId);
- }
-
- private static ErrorDialogFragment newInstanceInter(
- int titleResId, Integer messageResId) {
final ErrorDialogFragment fragment = new ErrorDialogFragment();
final Bundle args = new Bundle();
args.putInt(ARG_TITLE_RES_ID, titleResId);
- if (messageResId != null) {
- args.putInt(ARG_MESSAGE_RES_ID, messageResId);
- }
+ args.putInt(ARG_MESSAGE_RES_ID, messageResId);
fragment.setArguments(args);
return fragment;
}
@@ -865,25 +970,25 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTitleResId = getArguments().getInt(ARG_TITLE_RES_ID);
- if (getArguments().containsKey(ARG_MESSAGE_RES_ID)) {
- mMessageResId = getArguments().getInt(ARG_MESSAGE_RES_ID);
- }
+ mMessageResId = getArguments().getInt(ARG_MESSAGE_RES_ID);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle(mTitleResId)
- .setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dismiss();
- }
- });
- if (mMessageResId != null) {
+ if (mTitleResId != 0) {
+ builder.setTitle(mTitleResId);
+ }
+ if (mMessageResId != 0) {
builder.setMessage(mMessageResId);
}
+ builder.setPositiveButton(android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dismiss();
+ }
+ });
return builder.create();
}
}
@@ -951,20 +1056,18 @@
Log.i(TAG, "The phone number is prohibited explicitly by a rule.");
if (getActivity() != null) {
DialogFragment dialogFragment = ErrorDialogFragment.newInstance(
- R.string.dialog_phone_call_prohibited_title);
+ R.string.dialog_phone_call_prohibited_message);
dialogFragment.show(getFragmentManager(), "phone_prohibited_dialog");
}
// Clear the digits just in case.
mDigits.getText().clear();
} else {
- final Intent intent = newDialNumberIntent(number);
- if (getActivity() instanceof DialtactsActivity) {
- intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN,
- DialtactsActivity.CALL_ORIGIN_DIALTACTS);
- }
+ final Intent intent = ContactsUtils.getCallIntent(number,
+ (getActivity() instanceof DialtactsActivity ?
+ ((DialtactsActivity)getActivity()).getCallOrigin() : null));
startActivity(intent);
- mDigits.getText().clear(); // TODO: Fix bug 1745781
+ mClearDigitsOnStop = true;
getActivity().finish();
}
}
@@ -1126,6 +1229,7 @@
DIALPAD_CHOICE_ADD_NEW_CALL);
}
+ @Override
public int getCount() {
return NUM_ITEMS;
}
@@ -1133,6 +1237,7 @@
/**
* Return the ChoiceItem for a given position.
*/
+ @Override
public Object getItem(int position) {
return mChoiceItems[position];
}
@@ -1140,6 +1245,7 @@
/**
* Return a unique ID for each possible choice.
*/
+ @Override
public long getItemId(int position) {
return position;
}
@@ -1147,6 +1253,7 @@
/**
* Make a view for each row.
*/
+ @Override
public View getView(int position, View convertView, ViewGroup parent) {
// When convertView is non-null, we can reuse it (there's no need
// to reinflate it.)
@@ -1167,7 +1274,8 @@
/**
* Handle clicks from the dialpad chooser.
*/
- public void onItemClick(AdapterView parent, View v, int position, long id) {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
DialpadChooserAdapter.ChoiceItem item =
(DialpadChooserAdapter.ChoiceItem) parent.getItemAtPosition(position);
int itemId = item.id;
@@ -1409,6 +1517,7 @@
new CallLogAsync.GetLastOutgoingCallArgs(
getActivity(),
new CallLogAsync.OnLastOutgoingCallComplete() {
+ @Override
public void lastOutgoingCall(String number) {
// TODO: Filter out emergency numbers if
// the carrier does not want redial for
@@ -1420,33 +1529,13 @@
mCallLog.getLastOutgoingCall(lastCallArgs);
}
- // Helpers for the call intents.
- private Intent newVoicemailIntent() {
- final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("voicemail", EMPTY_NUMBER, null));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return intent;
- }
-
private Intent newFlashIntent() {
- final Intent intent = newDialNumberIntent(EMPTY_NUMBER);
+ final Intent intent = ContactsUtils.getCallIntent(EMPTY_NUMBER);
intent.putExtra(EXTRA_SEND_EMPTY_FLASH, true);
return intent;
}
- private Intent newDialNumberIntent(String number) {
- final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("tel", number, null));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return intent;
- }
-
public void setListener(Listener listener) {
mListener = listener;
}
-
- @Override
- public void onVisibilityChanged(boolean visible) {
- mShowOptionsMenu = visible;
- }
}
diff --git a/src/com/android/contacts/dialpad/DialpadImageButton.java b/src/com/android/contacts/dialpad/DialpadImageButton.java
new file mode 100644
index 0000000..6e01379
--- /dev/null
+++ b/src/com/android/contacts/dialpad/DialpadImageButton.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.dialpad;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.ImageButton;
+
+/**
+ * Custom {@link ImageButton} for dialpad buttons.
+ *
+ * During horizontal swipe, we want to exit "fading out" animation offered by its background
+ * just after starting the swipe.This class overrides {@link #onTouchEvent(MotionEvent)} to achieve
+ * the behavior.
+ */
+public class DialpadImageButton extends ImageButton {
+
+ public DialpadImageButton(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public DialpadImageButton(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ final boolean ret = super.onTouchEvent(event);
+ if (event.getAction() == MotionEvent.ACTION_CANCEL) {
+ jumpDrawablesToCurrentState();
+ }
+ return ret;
+ }
+}
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 844f892..2ede872 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -23,6 +23,7 @@
import com.android.contacts.activities.ContactEditorAccountsChangedActivity;
import com.android.contacts.activities.ContactEditorActivity;
import com.android.contacts.activities.JoinContactActivity;
+import com.android.contacts.detail.PhotoSelectionHandler;
import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
import com.android.contacts.editor.Editor.EditorListener;
import com.android.contacts.model.AccountType;
@@ -44,7 +45,6 @@
import android.app.Fragment;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ActivityNotFoundException;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
@@ -56,10 +56,8 @@
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Rect;
-import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Environment;
import android.os.SystemClock;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Event;
@@ -67,11 +65,9 @@
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.DisplayPhoto;
import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.RawContacts;
-import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -87,11 +83,9 @@
import android.widget.Toast;
import java.io.File;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Date;
import java.util.List;
public class ContactEditorFragment extends Fragment implements
@@ -192,25 +186,17 @@
}
private static final int REQUEST_CODE_JOIN = 0;
- private static final int REQUEST_CODE_CAMERA_WITH_DATA = 1;
- private static final int REQUEST_CODE_PHOTO_PICKED_WITH_DATA = 2;
- private static final int REQUEST_CODE_ACCOUNTS_CHANGED = 3;
+ private static final int REQUEST_CODE_ACCOUNTS_CHANGED = 1;
- private Bitmap mPhoto = null;
private long mRawContactIdRequestingPhoto = -1;
- private long mRawContactIdRequestingPhotoAfterLoad = -1;
+ private PhotoSelectionHandler mPhotoSelectionHandler;
private final EntityDeltaComparator mComparator = new EntityDeltaComparator();
- private static final File PHOTO_DIR = new File(
- Environment.getExternalStorageDirectory() + "/DCIM/Camera");
-
private Cursor mGroupMetaData;
private File mCurrentPhotoFile;
-
- // Height/width (in pixels) to request for the photo - queried from the provider.
- private int mPhotoPickSize;
+ private final Bundle mUpdatedPhotos = new Bundle();
private Context mContext;
private String mAction;
@@ -322,7 +308,6 @@
super.onAttach(activity);
mContext = activity;
mEditorUtils = ContactEditorUtils.getInstance(mContext);
- loadPhotoPickSize();
}
@Override
@@ -729,8 +714,9 @@
editor.setState(entity, type, mViewIdGenerator, isEditingUserProfile());
- editor.getPhotoEditor().setEditorListener(
- new PhotoEditorListener(editor, type.areContactsWritable()));
+ // Set up the photo handler.
+ bindPhotoHandler(editor, type, mState);
+
if (editor instanceof RawContactEditorView) {
final RawContactEditorView rawContactEditor = (RawContactEditorView) editor;
EditorListener listener = new EditorListener() {
@@ -776,7 +762,32 @@
// Activity can be null if we have been detached from the Activity
final Activity activity = getActivity();
if (activity != null) activity.invalidateOptionsMenu();
+ }
+ private void bindPhotoHandler(BaseRawContactEditorView editor, AccountType type,
+ EntityDeltaList state) {
+ final int mode;
+ if (type.areContactsWritable()) {
+ if (editor.hasSetPhoto()) {
+ if (hasMoreThanOnePhoto()) {
+ mode = PhotoActionPopup.Modes.PHOTO_ALLOW_PRIMARY;
+ } else {
+ mode = PhotoActionPopup.Modes.PHOTO_DISALLOW_PRIMARY;
+ }
+ } else {
+ mode = PhotoActionPopup.Modes.NO_PHOTO;
+ }
+ } else {
+ if (editor.hasSetPhoto() && hasMoreThanOnePhoto()) {
+ mode = PhotoActionPopup.Modes.READ_ONLY_ALLOW_PRIMARY;
+ } else {
+ // Read-only and either no photo or the only photo ==> no options
+ return;
+ }
+ }
+ mPhotoSelectionHandler = new PhotoHandler(mContext, editor, mode, state);
+ editor.getPhotoEditor().setEditorListener(
+ (PhotoHandler.PhotoEditorListener) mPhotoSelectionHandler.getListener());
}
private void bindGroupMetaData() {
@@ -926,32 +937,6 @@
return save(SaveMode.JOIN);
}
- private void loadPhotoPickSize() {
- Cursor c = mContext.getContentResolver().query(DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI,
- new String[]{DisplayPhoto.DISPLAY_MAX_DIM}, null, null, null);
- try {
- c.moveToFirst();
- mPhotoPickSize = c.getInt(0);
- } finally {
- c.close();
- }
- }
-
- /**
- * Constructs an intent for picking a photo from Gallery, cropping it and returning the bitmap.
- */
- public 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", mPhotoPickSize);
- intent.putExtra("outputY", mPhotoPickSize);
- intent.putExtra("return-data", true);
- return intent;
- }
-
/**
* Check if our internal {@link #mState} is valid, usually checked before
* performing user actions.
@@ -961,61 +946,6 @@
}
/**
- * 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";
- }
-
- /**
- * 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(
- mContext,
- new String[] { f.getAbsolutePath() },
- new String[] { null },
- null);
-
- // Launch gallery to crop the photo
- final Intent intent = getCropImageIntent(Uri.fromFile(f));
- mStatus = Status.SUB_ACTIVITY;
- startActivityForResult(intent, REQUEST_CODE_PHOTO_PICKED_WITH_DATA);
- } catch (Exception e) {
- Log.e(TAG, "Cannot crop image", e);
- Toast.makeText(mContext, R.string.photoPickerNotFoundText, Toast.LENGTH_LONG).show();
- }
- }
-
- /**
- * Constructs an intent for image cropping.
- */
- public 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", mPhotoPickSize);
- intent.putExtra("outputY", mPhotoPickSize);
- intent.putExtra("return-data", true);
- return intent;
- }
-
- /**
* Saves or creates the contact based on the mode, and if successful
* finishes the activity.
*/
@@ -1044,8 +974,9 @@
// Save contact
Intent intent = ContactSaveService.createSaveContactIntent(getActivity(), mState,
- SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
- getActivity().getClass(), ContactEditorActivity.ACTION_SAVE_COMPLETED);
+ SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(), getActivity().getClass(),
+ ContactEditorActivity.ACTION_SAVE_COMPLETED, mUpdatedPhotos);
+
getActivity().startService(intent);
return true;
}
@@ -1062,7 +993,6 @@
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setIconAttribute(android.R.attr.alertDialogIcon)
- .setTitle(R.string.cancel_confirmation_dialog_title)
.setMessage(R.string.cancel_confirmation_dialog_message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@@ -1456,7 +1386,6 @@
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setIconAttribute(android.R.attr.alertDialogIcon)
- .setTitle(R.string.aggregation_suggestion_join_dialog_title)
.setMessage(R.string.aggregation_suggestion_join_dialog_message)
.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
@@ -1504,7 +1433,6 @@
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setIconAttribute(android.R.attr.alertDialogIcon)
- .setTitle(R.string.aggregation_suggestion_edit_dialog_title)
.setMessage(R.string.aggregation_suggestion_edit_dialog_message)
.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
@@ -1594,27 +1522,13 @@
mStatus = Status.EDITING;
}
- switch (requestCode) {
- case REQUEST_CODE_PHOTO_PICKED_WITH_DATA: {
- // Ignore failed requests
- if (resultCode != Activity.RESULT_OK) return;
- // As we are coming back to this view, the editor will be reloaded automatically,
- // which will cause the photo that is set here to disappear. To prevent this,
- // we remember to set a flag which is interpreted after loading.
- // This photo is set here already to reduce flickering.
- mPhoto = data.getParcelableExtra("data");
- setPhoto(mRawContactIdRequestingPhoto, mPhoto);
- mRawContactIdRequestingPhotoAfterLoad = mRawContactIdRequestingPhoto;
- mRawContactIdRequestingPhoto = -1;
+ // See if the photo selection handler handles this result.
+ if (mPhotoSelectionHandler != null && mPhotoSelectionHandler.handlePhotoActivityResult(
+ requestCode, resultCode, data)) {
+ return;
+ }
- break;
- }
- case REQUEST_CODE_CAMERA_WITH_DATA: {
- // Ignore failed requests
- if (resultCode != Activity.RESULT_OK) return;
- doCropPhoto(mCurrentPhotoFile);
- break;
- }
+ switch (requestCode) {
case REQUEST_CODE_JOIN: {
// Ignore failed requests
if (resultCode != Activity.RESULT_OK) return;
@@ -1650,13 +1564,21 @@
/**
* Sets the photo stored in mPhoto and writes it to the RawContact with the given id
*/
- private void setPhoto(long rawContact, Bitmap photo) {
+ private void setPhoto(long rawContact, Bitmap photo, File photoFile) {
BaseRawContactEditorView requestingEditor = getRawContactEditorView(rawContact);
+
+ if (photo == null || photo.getHeight() < 0 || photo.getWidth() < 0) {
+ // This is unexpected.
+ Log.w(TAG, "Invalid bitmap passed to setPhoto()");
+ }
+
if (requestingEditor != null) {
requestingEditor.setPhotoBitmap(photo);
} else {
Log.w(TAG, "The contact that requested the photo is no longer present.");
}
+
+ mUpdatedPhotos.putString(String.valueOf(rawContact), photoFile.getAbsolutePath());
}
/**
@@ -1723,12 +1645,6 @@
setData(data);
final long setDataEndTime = SystemClock.elapsedRealtime();
- // If we are coming back from the photo trimmer, this will be set.
- if (mRawContactIdRequestingPhotoAfterLoad != -1) {
- setPhoto(mRawContactIdRequestingPhotoAfterLoad, mPhoto);
- mRawContactIdRequestingPhotoAfterLoad = -1;
- mPhoto = null;
- }
Log.v(TAG, "Time needed for setting UI: " + (setDataEndTime-setDataStartTime));
}
@@ -1773,111 +1689,98 @@
save(SaveMode.SPLIT);
}
- private final class PhotoEditorListener
- implements EditorListener, PhotoActionPopup.Listener {
- private final BaseRawContactEditorView mEditor;
- private final boolean mAccountWritable;
-
- private PhotoEditorListener(BaseRawContactEditorView editor, boolean accountWritable) {
- mEditor = editor;
- mAccountWritable = accountWritable;
+ /**
+ * Custom photo handler for the editor. The inner listener that this creates also has a
+ * reference to the editor and acts as an {@link EditorListener}, and uses that editor to hold
+ * state information in several of the listener methods.
+ */
+ private final class PhotoHandler extends PhotoSelectionHandler {
+ public PhotoHandler(Context context, BaseRawContactEditorView editor, int photoMode,
+ EntityDeltaList state) {
+ super(context, editor.getPhotoEditor(), photoMode, false, state);
+ setListener(new PhotoEditorListener(editor));
}
- @Override
- public void onRequest(int request) {
- if (!hasValidState()) return;
+ private final class PhotoEditorListener extends PhotoSelectionHandler.PhotoActionListener
+ implements EditorListener {
+ private final BaseRawContactEditorView mEditor;
- if (request == EditorListener.REQUEST_PICK_PHOTO) {
- // Determine mode
- final int mode;
- if (mAccountWritable) {
- if (mEditor.hasSetPhoto()) {
- if (hasMoreThanOnePhoto()) {
- mode = PhotoActionPopup.MODE_PHOTO_ALLOW_PRIMARY;
- } else {
- mode = PhotoActionPopup.MODE_PHOTO_DISALLOW_PRIMARY;
- }
- } else {
- mode = PhotoActionPopup.MODE_NO_PHOTO;
- }
- } else {
- if (mEditor.hasSetPhoto() && hasMoreThanOnePhoto()) {
- mode = PhotoActionPopup.MODE_READ_ONLY_ALLOW_PRIMARY;
- } else {
- // Read-only and either no photo or the only photo ==> no options
- return;
- }
- }
- PhotoActionPopup.createPopupMenu(mContext, mEditor.getPhotoEditor(), this, mode)
- .show();
+ private PhotoEditorListener(BaseRawContactEditorView editor) {
+ mEditor = editor;
}
- }
- @Override
- public void onDeleteRequested(Editor removedEditor) {
- // The picture cannot be deleted, it can only be removed, which is handled by
- // onRemovePictureChosen()
- }
+ @Override
+ public void onRequest(int request) {
+ if (!hasValidState()) return;
- /**
- * User has chosen to set the selected photo as the (super) primary photo
- */
- @Override
- public void onUseAsPrimaryChosen() {
- // Set the IsSuperPrimary for each editor
- int count = mContent.getChildCount();
- for (int i = 0; i < count; i++) {
- final View childView = mContent.getChildAt(i);
- if (childView instanceof BaseRawContactEditorView) {
- final BaseRawContactEditorView editor = (BaseRawContactEditorView) childView;
- final PhotoEditorView photoEditor = editor.getPhotoEditor();
- photoEditor.setSuperPrimary(editor == mEditor);
+ if (request == EditorListener.REQUEST_PICK_PHOTO) {
+ onClick(mEditor.getPhotoEditor());
}
}
- }
- /**
- * User has chosen to remove a picture
- */
- @Override
- public void onRemovePictureChosen() {
- mEditor.setPhotoBitmap(null);
- }
-
- /**
- * Launches Camera to take a picture and store it in a file.
- */
- @Override
- public void onTakePhotoChosen() {
- mRawContactIdRequestingPhoto = mEditor.getRawContactId();
- try {
- // Launch camera to take photo for selected contact
- PHOTO_DIR.mkdirs();
- mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());
- final Intent intent = getTakePickIntent(mCurrentPhotoFile);
-
- mStatus = Status.SUB_ACTIVITY;
- startActivityForResult(intent, REQUEST_CODE_CAMERA_WITH_DATA);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(mContext, R.string.photoPickerNotFoundText,
- Toast.LENGTH_LONG).show();
+ @Override
+ public void onDeleteRequested(Editor removedEditor) {
+ // The picture cannot be deleted, it can only be removed, which is handled by
+ // onRemovePictureChosen()
}
- }
- /**
- * Launches Gallery to pick a photo.
- */
- @Override
- public void onPickFromGalleryChosen() {
- mRawContactIdRequestingPhoto = mEditor.getRawContactId();
- try {
- // Launch picker to choose photo for selected contact
- final Intent intent = getPhotoPickIntent();
+ /**
+ * User has chosen to set the selected photo as the (super) primary photo
+ */
+ @Override
+ public void onUseAsPrimaryChosen() {
+ // Set the IsSuperPrimary for each editor
+ int count = mContent.getChildCount();
+ for (int i = 0; i < count; i++) {
+ final View childView = mContent.getChildAt(i);
+ if (childView instanceof BaseRawContactEditorView) {
+ final BaseRawContactEditorView editor =
+ (BaseRawContactEditorView) childView;
+ final PhotoEditorView photoEditor = editor.getPhotoEditor();
+ photoEditor.setSuperPrimary(editor == mEditor);
+ }
+ }
+ }
+
+ /**
+ * User has chosen to remove a picture
+ */
+ @Override
+ public void onRemovePictureChosen() {
+ mEditor.setPhotoBitmap(null);
+ }
+
+ @Override
+ public void startTakePhotoActivity(Intent intent, int requestCode, File photoFile) {
+ mRawContactIdRequestingPhoto = mEditor.getRawContactId();
mStatus = Status.SUB_ACTIVITY;
- startActivityForResult(intent, REQUEST_CODE_PHOTO_PICKED_WITH_DATA);
- } catch (ActivityNotFoundException e) {
- Toast.makeText(mContext, R.string.photoPickerNotFoundText,
- Toast.LENGTH_LONG).show();
+ mCurrentPhotoFile = photoFile;
+ startActivityForResult(intent, requestCode);
+ }
+
+ @Override
+ public void startPickFromGalleryActivity(Intent intent, int requestCode,
+ File photoFile) {
+ mRawContactIdRequestingPhoto = mEditor.getRawContactId();
+ mStatus = Status.SUB_ACTIVITY;
+ mCurrentPhotoFile = photoFile;
+ startActivityForResult(intent, requestCode);
+ }
+
+ @Override
+ public void onPhotoSelected(Bitmap bitmap) {
+ setPhoto(mRawContactIdRequestingPhoto, bitmap, mCurrentPhotoFile);
+ mRawContactIdRequestingPhoto = -1;
+ }
+
+ @Override
+ public File getCurrentPhotoFile() {
+ return mCurrentPhotoFile;
+ }
+
+ @Override
+ public void onPhotoSelectionDismissed() {
+ // Nothing to do.
}
}
}
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index 05a041d..46006a0 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -19,6 +19,7 @@
import com.android.contacts.model.AccountType;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.AccountWithDataSet;
+import com.android.contacts.test.NeededForTesting;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
@@ -74,11 +75,13 @@
return sInstance;
}
+ @NeededForTesting
void cleanupForTest() {
mPrefs.edit().remove(KEY_DEFAULT_ACCOUNT).remove(KEY_KNOWN_ACCOUNTS)
.remove(KEY_ANYTHING_SAVED).apply();
}
+ @NeededForTesting
void removeDefaultAccountForTest() {
mPrefs.edit().remove(KEY_DEFAULT_ACCOUNT).apply();
}
diff --git a/src/com/android/contacts/editor/EventFieldEditorView.java b/src/com/android/contacts/editor/EventFieldEditorView.java
index 4a5a502..475e172 100644
--- a/src/com/android/contacts/editor/EventFieldEditorView.java
+++ b/src/com/android/contacts/editor/EventFieldEditorView.java
@@ -131,7 +131,9 @@
@Override
public boolean isEmpty() {
- return TextUtils.isEmpty(mDateView.getText());
+ final EditField editField = getKind().fieldList.get(0);
+ final String column = editField.column;
+ return TextUtils.isEmpty(getEntry().getAsString(column));
}
@Override
@@ -243,6 +245,7 @@
} else {
resultString = kind.dateFormatWithYear.format(outCalendar.getTime());
}
+
onFieldChanged(column, resultString);
rebuildDateView();
}
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index 2a1ec5e..c9e713b 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -286,7 +286,17 @@
}
// Field changes are saved directly
+ saveValue(column, value);
+
+ // Notify listener if applicable
+ notifyEditorListener();
+ }
+
+ protected void saveValue(String column, String value) {
mEntry.put(column, value);
+ }
+
+ protected void notifyEditorListener() {
if (mListener != null) {
mListener.onRequest(EditorListener.FIELD_CHANGED);
}
diff --git a/src/com/android/contacts/editor/PhotoActionPopup.java b/src/com/android/contacts/editor/PhotoActionPopup.java
index cca6f9d..9744308 100644
--- a/src/com/android/contacts/editor/PhotoActionPopup.java
+++ b/src/com/android/contacts/editor/PhotoActionPopup.java
@@ -29,15 +29,46 @@
import java.util.ArrayList;
/**
- * Shows a popup asking the user what to do for a photo. The result is pased back to the Listener
+ * Shows a popup asking the user what to do for a photo. The result is passed back to the Listener
*/
public class PhotoActionPopup {
public static final String TAG = "PhotoActionPopup";
- public static final int MODE_NO_PHOTO = 0;
- public static final int MODE_READ_ONLY_ALLOW_PRIMARY = 1;
- public static final int MODE_PHOTO_DISALLOW_PRIMARY = 2;
- public static final int MODE_PHOTO_ALLOW_PRIMARY = 3;
+ /**
+ * Bitmask flags to specify which actions should be presented to the user.
+ */
+ public static final class Flags {
+ /** If set, show choice to use as primary photo. */
+ public static final int ALLOW_PRIMARY = 1;
+ /** If set, show choice to remove photo. */
+ public static final int REMOVE_PHOTO = 2;
+ /** If set, show choices to take a picture with the camera, or pick one from the gallery. */
+ public static final int TAKE_OR_PICK_PHOTO = 4;
+ /**
+ * If set, modifies the wording in the choices for TAKE_OR_PICK_PHOTO
+ * to emphasize that the existing photo will be replaced.
+ */
+ public static final int TAKE_OR_PICK_PHOTO_REPLACE_WORDING = 8;
+ }
+
+ /**
+ * Convenient combinations of commonly-used flags (see {@link Flags}).
+ */
+ public static final class Modes {
+ public static final int NO_PHOTO =
+ Flags.TAKE_OR_PICK_PHOTO;
+ public static final int READ_ONLY_ALLOW_PRIMARY =
+ Flags.ALLOW_PRIMARY;
+ public static final int PHOTO_DISALLOW_PRIMARY =
+ Flags.REMOVE_PHOTO |
+ Flags.TAKE_OR_PICK_PHOTO |
+ Flags.TAKE_OR_PICK_PHOTO_REPLACE_WORDING;
+ public static final int PHOTO_ALLOW_PRIMARY =
+ Flags.ALLOW_PRIMARY |
+ Flags.REMOVE_PHOTO |
+ Flags.TAKE_OR_PICK_PHOTO |
+ Flags.TAKE_OR_PICK_PHOTO_REPLACE_WORDING;
+ }
public static ListPopupWindow createPopupMenu(Context context, View anchorView,
final Listener listener, int mode) {
@@ -45,29 +76,26 @@
// if there are NO choices (e.g. a read-only picture is already super-primary)
final ArrayList<ChoiceListItem> choices = new ArrayList<ChoiceListItem>(4);
// Use as Primary
- if (mode == MODE_PHOTO_ALLOW_PRIMARY || mode == MODE_READ_ONLY_ALLOW_PRIMARY) {
+ if ((mode & Flags.ALLOW_PRIMARY) > 0) {
choices.add(new ChoiceListItem(ChoiceListItem.ID_USE_AS_PRIMARY,
context.getString(R.string.use_photo_as_primary)));
}
// Remove
- if (mode == MODE_PHOTO_DISALLOW_PRIMARY || mode == MODE_PHOTO_ALLOW_PRIMARY) {
+ if ((mode & Flags.REMOVE_PHOTO) > 0) {
choices.add(new ChoiceListItem(ChoiceListItem.ID_REMOVE,
context.getString(R.string.removePhoto)));
}
- // Take photo (if there is already a photo, it says "Take new photo")
- if (mode == MODE_NO_PHOTO || mode == MODE_PHOTO_ALLOW_PRIMARY
- || mode == MODE_PHOTO_DISALLOW_PRIMARY) {
- final int resId = mode == MODE_NO_PHOTO ? R.string.take_photo :R.string.take_new_photo;
- choices.add(new ChoiceListItem(ChoiceListItem.ID_TAKE_PHOTO,
- context.getString(resId)));
+ // Take photo or pick one from the gallery. Wording differs if there is already a photo.
+ if ((mode & Flags.TAKE_OR_PICK_PHOTO) > 0) {
+ boolean replace = (mode & Flags.TAKE_OR_PICK_PHOTO_REPLACE_WORDING) > 0;
+ final int takePhotoResId = replace ? R.string.take_new_photo : R.string.take_photo;
+ final String takePhotoString = context.getString(takePhotoResId);
+ final int pickPhotoResId = replace ? R.string.pick_new_photo : R.string.pick_photo;
+ final String pickPhotoString = context.getString(pickPhotoResId);
+ choices.add(new ChoiceListItem(ChoiceListItem.ID_TAKE_PHOTO, takePhotoString));
+ choices.add(new ChoiceListItem(ChoiceListItem.ID_PICK_PHOTO, pickPhotoString));
}
- // Select from Gallery (or "Select new from Gallery")
- if (mode == MODE_NO_PHOTO || mode == MODE_PHOTO_ALLOW_PRIMARY
- || mode == MODE_PHOTO_DISALLOW_PRIMARY) {
- final int resId = mode == MODE_NO_PHOTO ? R.string.pick_photo :R.string.pick_new_photo;
- choices.add(new ChoiceListItem(ChoiceListItem.ID_PICK_PHOTO,
- context.getString(resId)));
- }
+
final ListAdapter adapter = new ArrayAdapter<ChoiceListItem>(context,
R.layout.select_dialog_item, choices);
@@ -76,8 +104,6 @@
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final ChoiceListItem choice = choices.get(position);
- listPopupWindow.dismiss();
-
switch (choice.getId()) {
case ChoiceListItem.ID_USE_AS_PRIMARY:
listener.onUseAsPrimaryChosen();
@@ -92,6 +118,8 @@
listener.onPickFromGalleryChosen();
break;
}
+
+ listPopupWindow.dismiss();
}
};
diff --git a/src/com/android/contacts/editor/PhotoEditorView.java b/src/com/android/contacts/editor/PhotoEditorView.java
index 086b07f..db29544 100644
--- a/src/com/android/contacts/editor/PhotoEditorView.java
+++ b/src/com/android/contacts/editor/PhotoEditorView.java
@@ -132,25 +132,13 @@
return;
}
- final int size = photo.getWidth() * photo.getHeight() * 4;
- final ByteArrayOutputStream out = new ByteArrayOutputStream(size);
+ mPhotoImageView.setImageBitmap(photo);
+ mFrameView.setEnabled(isEnabled());
+ mHasSetPhoto = true;
+ mEntry.setFromTemplate(false);
- try {
- photo.compress(Bitmap.CompressFormat.PNG, 100, out);
- out.flush();
- out.close();
-
- mEntry.put(Photo.PHOTO, out.toByteArray());
- mPhotoImageView.setImageBitmap(photo);
- mFrameView.setEnabled(isEnabled());
- mHasSetPhoto = true;
- mEntry.setFromTemplate(false);
-
- // When the user chooses a new photo mark it as super primary
- mEntry.put(Photo.IS_SUPER_PRIMARY, 1);
- } catch (IOException e) {
- Log.w(TAG, "Unable to serialize photo: " + e.toString());
- }
+ // When the user chooses a new photo mark it as super primary
+ mEntry.put(Photo.IS_SUPER_PRIMARY, 1);
}
/**
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index c9c6699..efb6b13 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -307,6 +307,9 @@
addToDefaultGroupIfNeeded();
+
+ final int sectionCount = getSectionViewsWithoutFields().size();
+ mAddFieldButton.setVisibility(sectionCount > 0 ? View.VISIBLE : View.GONE);
mAddFieldButton.setEnabled(isEnabled());
}
@@ -405,12 +408,14 @@
return mRawContactId;
}
- private void showAddInformationPopupWindow() {
+ /**
+ * Return a list of KindSectionViews that have no fields yet...
+ * these are candidates to have fields added in
+ * {@link #showAddInformationPopupWindow()}
+ */
+ private ArrayList<KindSectionView> getSectionViewsWithoutFields() {
final ArrayList<KindSectionView> fields =
new ArrayList<KindSectionView>(mFields.getChildCount());
-
- final PopupMenu popupMenu = new PopupMenu(getContext(), mAddFieldButton);
- final Menu menu = popupMenu.getMenu();
for (int i = 0; i < mFields.getChildCount(); i++) {
View child = mFields.getChildAt(i);
if (child instanceof KindSectionView) {
@@ -434,10 +439,19 @@
continue;
}
- menu.add(Menu.NONE, fields.size(), Menu.NONE, sectionView.getTitle());
fields.add(sectionView);
}
}
+ return fields;
+ }
+
+ private void showAddInformationPopupWindow() {
+ final ArrayList<KindSectionView> fields = getSectionViewsWithoutFields();
+ final PopupMenu popupMenu = new PopupMenu(getContext(), mAddFieldButton);
+ final Menu menu = popupMenu.getMenu();
+ for (int i = 0; i < fields.size(); i++) {
+ menu.add(Menu.NONE, i, Menu.NONE, fields.get(i).getTitle());
+ }
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
@@ -449,6 +463,13 @@
} else {
view.addItem();
}
+
+ // If this was the last section without an entry, we just added one, and therefore
+ // there's no reason to show the button.
+ if (fields.size() == 1) {
+ mAddFieldButton.setVisibility(View.GONE);
+ }
+
return true;
}
});
diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java
index 6911628..af1b3cf 100644
--- a/src/com/android/contacts/editor/StructuredNameEditorView.java
+++ b/src/com/android/contacts/editor/StructuredNameEditorView.java
@@ -77,11 +77,12 @@
if (!isFieldChanged(column, value)) {
return;
}
- super.onFieldChanged(column, value);
+ // First save the new value for the column.
+ saveValue(column, value);
mChanged = true;
- // Make sure the display name and the structured name are synced
+ // Next make sure the display name and the structured name are synced
if (hasShortAndLongForms()) {
if (areOptionalFieldsVisible()) {
rebuildFullName(getValues());
@@ -89,6 +90,10 @@
rebuildStructuredName(getValues());
}
}
+
+ // Then notify the listener, which will rely on the display and structured names to be
+ // synced (in order to provide aggregate suggestions).
+ notifyEditorListener();
}
@Override
diff --git a/src/com/android/contacts/format/FormatUtils.java b/src/com/android/contacts/format/FormatUtils.java
index 4b076cf..82bf78d 100644
--- a/src/com/android/contacts/format/FormatUtils.java
+++ b/src/com/android/contacts/format/FormatUtils.java
@@ -28,6 +28,8 @@
* Assorted utility methods related to text formatting in Contacts.
*/
public class FormatUtils {
+ private static final char LEFT_TO_RIGHT_EMBEDDING = '\u202A';
+ private static final char POP_DIRECTIONAL_FORMATTING = '\u202C';
/**
* Finds the earliest point in buffer1 at which the first part of buffer2 matches. For example,
@@ -180,4 +182,13 @@
return -1;
}
+
+ /** Returns the given text, forced to be left-to-right. */
+ public static CharSequence forceLeftToRight(CharSequence text) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(LEFT_TO_RIGHT_EMBEDDING);
+ sb.append(text);
+ sb.append(POP_DIRECTIONAL_FORMATTING);
+ return sb.toString();
+ }
}
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index f0e4175..3a43e66 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -23,6 +23,7 @@
import com.android.contacts.interactions.GroupDeletionDialogFragment;
import com.android.contacts.list.ContactTileAdapter;
import com.android.contacts.list.ContactTileAdapter.DisplayType;
+import com.android.contacts.list.ContactTileView;
import com.android.contacts.model.AccountType;
import com.android.contacts.model.AccountTypeManager;
@@ -42,6 +43,7 @@
import android.os.Bundle;
import android.provider.ContactsContract.Groups;
import android.text.TextUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -203,13 +205,19 @@
getLoaderManager().restartLoader(LOADER_MEMBERS, null, mGroupMemberListLoaderListener);
}
- private final ContactTileAdapter.Listener mContactTileListener =
- new ContactTileAdapter.Listener() {
+ private final ContactTileView.Listener mContactTileListener =
+ new ContactTileView.Listener() {
@Override
public void onContactSelected(Uri contactUri, Rect targetRect) {
mListener.onContactSelected(contactUri);
}
+
+ @Override
+ public void onCallNumberDirectly(String phoneNumber) {
+ // No need to call phone number directly from People app.
+ Log.w(TAG, "unexpected invocation of onCallNumberDirectly()");
+ }
};
/**
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index a3ebeb0..9d056f4 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -550,7 +550,6 @@
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setIconAttribute(android.R.attr.alertDialogIcon)
- .setTitle(R.string.cancel_confirmation_dialog_title)
.setMessage(R.string.cancel_confirmation_dialog_message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index 7e880a4..4aa4030 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -274,7 +274,6 @@
private void showDialog(int messageId, final Uri contactUri) {
mDialog = new AlertDialog.Builder(getActivity())
- .setTitle(R.string.deleteConfirmation_title)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(messageId)
.setNegativeButton(android.R.string.cancel, null)
diff --git a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
index c1f3bd7..09306f2 100644
--- a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
@@ -52,7 +52,6 @@
return new AlertDialog.Builder(getActivity())
.setIconAttribute(android.R.attr.alertDialogIcon)
- .setTitle(R.string.delete_group_dialog_title)
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
diff --git a/src/com/android/contacts/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/interactions/ImportExportDialogFragment.java
index 7fdc47e..521d2f0 100644
--- a/src/com/android/contacts/interactions/ImportExportDialogFragment.java
+++ b/src/com/android/contacts/interactions/ImportExportDialogFragment.java
@@ -55,14 +55,18 @@
public static final String TAG = "ImportExportDialogFragment";
private static final String KEY_RES_ID = "resourceId";
+ private static final String ARG_CONTACTS_ARE_AVAILABLE = "CONTACTS_ARE_AVAILABLE";
private final String[] LOOKUP_PROJECTION = new String[] {
Contacts.LOOKUP_KEY
};
/** Preferred way to show this dialog */
- public static void show(FragmentManager fragmentManager) {
+ public static void show(FragmentManager fragmentManager, boolean contactsAreAvailable) {
final ImportExportDialogFragment fragment = new ImportExportDialogFragment();
+ Bundle args = new Bundle();
+ args.putBoolean(ARG_CONTACTS_ARE_AVAILABLE, contactsAreAvailable);
+ fragment.setArguments(args);
fragment.show(fragmentManager, ImportExportDialogFragment.TAG);
}
@@ -72,6 +76,7 @@
final Resources res = getActivity().getResources();
final LayoutInflater dialogInflater = (LayoutInflater)getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ final boolean contactsAreAvailable = getArguments().getBoolean(ARG_CONTACTS_ARE_AVAILABLE);
// Adapter that shows a list of string resources
final ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(getActivity(),
@@ -95,10 +100,14 @@
adapter.add(R.string.import_from_sdcard);
}
if (res.getBoolean(R.bool.config_allow_export_to_sdcard)) {
- adapter.add(R.string.export_to_sdcard);
+ if (contactsAreAvailable) {
+ adapter.add(R.string.export_to_sdcard);
+ }
}
if (res.getBoolean(R.bool.config_allow_share_visible_contacts)) {
- adapter.add(R.string.share_visible_contacts);
+ if (contactsAreAvailable) {
+ adapter.add(R.string.share_visible_contacts);
+ }
}
final DialogInterface.OnClickListener clickListener =
@@ -136,7 +145,9 @@
}
};
return new AlertDialog.Builder(getActivity())
- .setTitle(R.string.dialog_import_export)
+ .setTitle(contactsAreAvailable
+ ? R.string.dialog_import_export
+ : R.string.dialog_import)
.setSingleChoiceItems(adapter, -1, clickListener)
.create();
}
diff --git a/src/com/android/contacts/interactions/PhoneNumberInteraction.java b/src/com/android/contacts/interactions/PhoneNumberInteraction.java
index 4c75896..401cbb1 100644
--- a/src/com/android/contacts/interactions/PhoneNumberInteraction.java
+++ b/src/com/android/contacts/interactions/PhoneNumberInteraction.java
@@ -47,6 +47,7 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
@@ -65,6 +66,11 @@
* Initiates phone calls or a text message. If there are multiple candidates, this class shows a
* dialog to pick one. Creating one of these interactions should be done through the static
* factory methods.
+ *
+ * Note that this class initiates not only usual *phone* calls but also *SIP* calls.
+ *
+ * TODO: clean up code and documents since it is quite confusing to use "phone numbers" or
+ * "phone calls" here while they can be SIP addresses or SIP calls (See also issue 5039627).
*/
public class PhoneNumberInteraction implements OnLoadCompleteListener<Cursor> {
private static final String TAG = PhoneNumberInteraction.class.getSimpleName();
@@ -86,6 +92,8 @@
String dataSet;
long type;
String label;
+ /** {@link Phone#CONTENT_ITEM_TYPE} or {@link SipAddress#CONTENT_ITEM_TYPE}. */
+ String mimeType;
public PhoneItem() {
}
@@ -97,6 +105,7 @@
this.dataSet = in.readString();
this.type = in.readLong();
this.label = in.readString();
+ this.mimeType = in.readString();
}
public void writeToParcel(Parcel dest, int flags) {
@@ -106,6 +115,7 @@
dest.writeString(dataSet);
dest.writeLong(type);
dest.writeString(label);
+ dest.writeString(mimeType);
}
public int describeContents() {
@@ -260,11 +270,15 @@
RawContacts.ACCOUNT_TYPE,
RawContacts.DATA_SET,
Phone.TYPE,
- Phone.LABEL
+ Phone.LABEL,
+ Phone.MIMETYPE
};
- private static final String PHONE_NUMBER_SELECTION = Data.MIMETYPE + "='"
- + Phone.CONTENT_ITEM_TYPE + "' AND " + Phone.NUMBER + " NOT NULL";
+ private static final String PHONE_NUMBER_SELECTION =
+ Data.MIMETYPE + " IN ('"
+ + Phone.CONTENT_ITEM_TYPE + "', "
+ + "'" + SipAddress.CONTENT_ITEM_TYPE + "') AND "
+ + Data.DATA1 + " NOT NULL";
private final Context mContext;
private final OnDismissListener mDismissListener;
@@ -308,11 +322,7 @@
Intent.ACTION_SENDTO, Uri.fromParts("sms", phoneNumber, null));
break;
default:
- intent = new Intent(
- Intent.ACTION_CALL_PRIVILEGED, Uri.fromParts("tel", phoneNumber, null));
- if (callOrigin != null) {
- intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN, callOrigin);
- }
+ intent = ContactsUtils.getCallIntent(phoneNumber, callOrigin);
break;
}
context.startActivity(intent);
@@ -378,6 +388,7 @@
item.dataSet = cursor.getString(cursor.getColumnIndex(RawContacts.DATA_SET));
item.type = cursor.getInt(cursor.getColumnIndex(Phone.TYPE));
item.label = cursor.getString(cursor.getColumnIndex(Phone.LABEL));
+ item.mimeType = cursor.getString(cursor.getColumnIndex(Phone.MIMETYPE));
phoneList.add(item);
}
@@ -396,8 +407,9 @@
if (phoneList.size() == 0) {
onDismiss();
} else if (phoneList.size() == 1) {
+ PhoneItem item = phoneList.get(0);
onDismiss();
- performAction(phoneList.get(0).phoneNumber);
+ performAction(item.phoneNumber);
} else {
// There are multiple candidates. Let the user choose one.
showDisambiguationDialog(phoneList);
diff --git a/src/com/android/contacts/list/AccountFilterActivity.java b/src/com/android/contacts/list/AccountFilterActivity.java
index 14db634..2624e5d 100644
--- a/src/com/android/contacts/list/AccountFilterActivity.java
+++ b/src/com/android/contacts/list/AccountFilterActivity.java
@@ -56,11 +56,14 @@
private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 0;
public static final String KEY_EXTRA_CONTACT_LIST_FILTER = "contactListFilter";
+ public static final String KEY_EXTRA_CURRENT_FILTER = "currentFilter";
private static final int FILTER_LOADER_ID = 0;
private ListView mListView;
+ private ContactListFilter mCurrentFilter;
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -74,6 +77,8 @@
actionBar.setDisplayHomeAsUpEnabled(true);
}
+ mCurrentFilter = getIntent().getParcelableExtra(KEY_EXTRA_CURRENT_FILTER);
+
getLoaderManager().initLoader(FILTER_LOADER_ID, null, new MyLoaderCallbacks());
}
@@ -151,7 +156,8 @@
Log.e(TAG, "Failed to load filters");
return;
}
- mListView.setAdapter(new FilterListAdapter(AccountFilterActivity.this, data));
+ mListView.setAdapter(
+ new FilterListAdapter(AccountFilterActivity.this, data, mCurrentFilter));
}
@Override
@@ -197,11 +203,16 @@
private static class FilterListAdapter extends BaseAdapter {
private final List<ContactListFilter> mFilters;
private final LayoutInflater mLayoutInflater;
+ private final AccountTypeManager mAccountTypes;
+ private final ContactListFilter mCurrentFilter;
- public FilterListAdapter(Context context, List<ContactListFilter> filters) {
+ public FilterListAdapter(
+ Context context, List<ContactListFilter> filters, ContactListFilter current) {
mLayoutInflater = (LayoutInflater) context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
mFilters = filters;
+ mCurrentFilter = current;
+ mAccountTypes = AccountTypeManager.getInstance(context);
}
@Override
@@ -230,8 +241,9 @@
view.setSingleAccount(mFilters.size() == 1);
final ContactListFilter filter = mFilters.get(position);
view.setContactListFilter(filter);
- view.bindView(true);
+ view.bindView(mAccountTypes);
view.setTag(filter);
+ view.setActivated(filter.equals(mCurrentFilter));
return view;
}
}
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 4c38efb..a2b61c7 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -300,7 +300,7 @@
* Sets the new selection for the list.
*/
public void setSelectedContactUri(Uri uri) {
- setSelectedContactUri(uri, true, true, true, false);
+ setSelectedContactUri(uri, true, false /* no smooth scroll */, true, false);
}
@Override
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index 9c36f05..ac4d399 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -18,7 +18,6 @@
import com.android.contacts.ContactPhotoManager;
import com.android.contacts.R;
import com.android.contacts.widget.IndexerListAdapter;
-import com.android.contacts.widget.TextWithHighlightingFactory;
import android.content.Context;
import android.content.CursorLoader;
@@ -54,13 +53,8 @@
*/
private static final boolean LOCAL_INVISIBLE_DIRECTORY_ENABLED = false;
- /**
- * The animation is used here to allocate animated name text views.
- */
- private TextWithHighlightingFactory mTextWithHighlightingFactory;
private int mDisplayOrder;
private int mSortOrder;
- private boolean mNameHighlightingEnabled;
private boolean mDisplayPhotos;
private boolean mQuickContactEnabled;
@@ -136,6 +130,28 @@
return partition;
}
+ /**
+ * Remove all directories after the default directory. This is typically used when contacts
+ * list screens are asked to exit the search mode and thus need to remove all remote directory
+ * results for the search.
+ *
+ * This code assumes that the default directory and directories before that should not be
+ * deleted (e.g. Join screen has "suggested contacts" directory before the default director,
+ * and we should not remove the directory).
+ */
+ /* package */ void removeDirectoriesAfterDefault() {
+ final int partitionCount = getPartitionCount();
+ for (int i = partitionCount - 1; i >= 0; i--) {
+ final Partition partition = getPartition(i);
+ if ((partition instanceof DirectoryPartition)
+ && ((DirectoryPartition) partition).getDirectoryId() == Directory.DEFAULT) {
+ break;
+ } else {
+ removePartition(i);
+ }
+ }
+ }
+
private int getPartitionByDirectoryId(long id) {
int count = getPartitionCount();
for (int i = 0; i < count; i++) {
@@ -602,8 +618,16 @@
// TODO: move sharable logic (bindXX() methods) to here with extra arguments
+ /**
+ * Loads the photo for the quick contact view and assigns the contact uri.
+ * @param photoIdColumn Index of the photo id column
+ * @param photoUriColumn Index of the photo uri column. Optional: Can be -1
+ * @param contactIdColumn Index of the contact id column
+ * @param lookUpKeyColumn Index of the lookup key column
+ */
protected void bindQuickContact(final ContactListItemView view, int partitionIndex,
- Cursor cursor, int photoIdColumn, int contactIdColumn, int lookUpKeyColumn) {
+ Cursor cursor, int photoIdColumn, int photoUriColumn, int contactIdColumn,
+ int lookUpKeyColumn) {
long photoId = 0;
if (!cursor.isNull(photoIdColumn)) {
photoId = cursor.getLong(photoIdColumn);
@@ -612,7 +636,15 @@
QuickContactBadge quickContact = view.getQuickContact();
quickContact.assignContactUri(
getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn));
- getPhotoLoader().loadPhoto(quickContact, photoId, false, mDarkTheme);
+
+ if (photoId != 0 || photoUriColumn == -1) {
+ getPhotoLoader().loadPhoto(quickContact, photoId, false, mDarkTheme);
+ } else {
+ final String photoUriString = cursor.getString(photoUriColumn);
+ final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
+ getPhotoLoader().loadPhoto(quickContact, photoUri, false, mDarkTheme);
+ }
+
}
protected Uri getContactUri(int partitionIndex, Cursor cursor,
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 8db477e..5ee25a2 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -613,12 +613,10 @@
mAdapter.clearPartitions();
if (!flag) {
- // If we are switching from search to regular display,
- // remove all directory partitions (except the default one).
- int count = mAdapter.getPartitionCount();
- for (int i = count; --i >= 1;) {
- mAdapter.removePartition(i);
- }
+ // If we are switching from search to regular display, remove all directory
+ // partitions after default one, assuming they are remote directories which
+ // should be cleaned up on exiting the search mode.
+ mAdapter.removeDirectoriesAfterDefault();
}
mAdapter.configureDefaultPartition(false, flag);
}
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
index a8caf3b..81fcb84 100644
--- a/src/com/android/contacts/list/ContactListAdapter.java
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -23,7 +23,6 @@
import android.provider.ContactsContract;
import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.SearchSnippetColumns;
import android.text.TextUtils;
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 07319f9..172cbe2 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -18,8 +18,10 @@
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
+import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
+import android.provider.ContactsContract.RawContacts;
import android.text.TextUtils;
/**
@@ -252,6 +254,23 @@
return mId;
}
+ /**
+ * Adds the account query parameters to the given {@code uriBuilder}.
+ *
+ * @throws IllegalStateException if the filter type is not {@link #FILTER_TYPE_ACCOUNT}.
+ */
+ public Uri.Builder addAccountQueryParameterToUrl(Uri.Builder uriBuilder) {
+ if (filterType != FILTER_TYPE_ACCOUNT) {
+ throw new IllegalStateException("filterType must be FILTER_TYPE_ACCOUNT");
+ }
+ uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
+ uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
+ if (!TextUtils.isEmpty(dataSet)) {
+ uriBuilder.appendQueryParameter(RawContacts.DATA_SET, dataSet);
+ }
+ return uriBuilder;
+ }
+
public String toDebugString() {
final StringBuilder builder = new StringBuilder();
builder.append("[filter type: " + filterType + " (" + filterTypeToString(filterType) + ")");
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
index 8126c62..9f483f1 100644
--- a/src/com/android/contacts/list/ContactListFilterController.java
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -50,6 +50,9 @@
public abstract void removeListener(ContactListFilterListener listener);
+ /**
+ * Return the currently-active filter.
+ */
public abstract ContactListFilter getFilter();
/**
diff --git a/src/com/android/contacts/list/ContactListFilterView.java b/src/com/android/contacts/list/ContactListFilterView.java
index 398a864..3fa20a1 100644
--- a/src/com/android/contacts/list/ContactListFilterView.java
+++ b/src/com/android/contacts/list/ContactListFilterView.java
@@ -17,6 +17,8 @@
package com.android.contacts.list;
import com.android.contacts.R;
+import com.android.contacts.model.AccountType;
+import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.util.ThemeUtils;
import android.content.Context;
@@ -32,8 +34,8 @@
public class ContactListFilterView extends LinearLayout {
private ImageView mIcon;
- private TextView mLabel;
- private View mIndent;
+ private TextView mAccountType;
+ private TextView mAccountUserName;
private ContactListFilter mFilter;
private boolean mSingleAccount;
private int mActivatedBackground;
@@ -58,78 +60,70 @@
this.mSingleAccount = flag;
}
- public void bindView(boolean dropdown) {
- if (dropdown) {
- if (mActivatedBackground == 0) {
- mActivatedBackground = ThemeUtils.getActivatedBackground(getContext().getTheme());
- }
- setBackgroundResource(mActivatedBackground);
+ public void bindView(AccountTypeManager accountTypes) {
+ if (mActivatedBackground == 0) {
+ mActivatedBackground = ThemeUtils.getActivatedBackground(getContext().getTheme());
}
+ setBackgroundResource(mActivatedBackground);
- if (mLabel == null) {
+ if (mAccountType == null) {
mIcon = (ImageView) findViewById(R.id.icon);
- mLabel = (TextView) findViewById(R.id.label);
- mIndent = findViewById(R.id.indent);
+ mAccountType = (TextView) findViewById(R.id.accountType);
+ mAccountUserName = (TextView) findViewById(R.id.accountUserName);
}
if (mFilter == null) {
- mLabel.setText(R.string.contactsList);
+ mAccountType.setText(R.string.contactsList);
return;
}
+ mAccountUserName.setVisibility(View.GONE);
switch (mFilter.filterType) {
case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
- bindView(R.drawable.ic_menu_contacts_holo_light, R.string.list_filter_all_accounts,
- dropdown);
+ bindView(0, R.string.list_filter_all_accounts);
break;
}
case ContactListFilter.FILTER_TYPE_STARRED: {
- bindView(R.drawable.ic_menu_star_holo_light, R.string.list_filter_all_starred,
- dropdown);
+ bindView(R.drawable.ic_menu_star_holo_light, R.string.list_filter_all_starred);
break;
}
case ContactListFilter.FILTER_TYPE_CUSTOM: {
- bindView(R.drawable.ic_menu_settings_holo_light,
- dropdown ? R.string.list_filter_customize : R.string.list_filter_custom,
- dropdown);
+ bindView(R.drawable.ic_menu_settings_holo_light, R.string.list_filter_customize);
break;
}
case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
- bindView(0, R.string.list_filter_phones, dropdown);
+ bindView(0, R.string.list_filter_phones);
break;
}
case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: {
- bindView(0, R.string.list_filter_single, dropdown);
+ bindView(0, R.string.list_filter_single);
break;
}
case ContactListFilter.FILTER_TYPE_ACCOUNT: {
+ mAccountUserName.setVisibility(View.VISIBLE);
mIcon.setVisibility(View.VISIBLE);
if (mFilter.icon != null) {
mIcon.setImageDrawable(mFilter.icon);
} else {
mIcon.setImageResource(R.drawable.unknown_source);
}
- mLabel.setText(mFilter.accountName);
- if (dropdown) {
- mIndent.setVisibility(View.GONE);
- }
+ final AccountType accountType =
+ accountTypes.getAccountType(mFilter.accountType, mFilter.dataSet);
+ mAccountUserName.setText(mFilter.accountName);
+ mAccountType.setText(accountType.getDisplayLabel(getContext()));
break;
}
}
}
- private void bindView(int iconResource, int textResource, boolean dropdown) {
+ private void bindView(int iconResource, int textResource) {
if (iconResource != 0) {
mIcon.setVisibility(View.VISIBLE);
mIcon.setImageResource(iconResource);
} else {
- mIcon.setVisibility(dropdown ? View.INVISIBLE : View.GONE);
+ mIcon.setVisibility(View.GONE);
}
- mLabel.setText(textResource);
-
- if (mIndent != null) {
- mIndent.setVisibility(View.GONE);
- }
+ mAccountType.setText(textResource);
}
}
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 490cd92..26df446 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -50,7 +50,7 @@
private static final String TAG = ContactTileAdapter.class.getSimpleName();
private DisplayType mDisplayType;
- private Listener mListener;
+ private ContactTileView.Listener mListener;
private Context mContext;
private Resources mResources;
private Cursor mContactCursor = null;
@@ -114,7 +114,7 @@
GROUP_MEMBERS
}
- public ContactTileAdapter(Context context, Listener listener, int numCols,
+ public ContactTileAdapter(Context context, ContactTileView.Listener listener, int numCols,
DisplayType displayType) {
mListener = listener;
mContext = context;
@@ -474,16 +474,6 @@
return getRowCount(mDividerPosition);
}
- private ContactTileView.Listener mContactTileListener = new ContactTileView.Listener() {
- @Override
- public void onClick(ContactTileView contactTileView) {
- if (mListener != null) {
- mListener.onContactSelected(contactTileView.getLookupUri(),
- ContactsUtils.getTargetRectFromView(mContext, contactTileView));
- }
- }
- };
-
/**
* Acts as a row item composed of {@link ContactTileView}
*
@@ -531,7 +521,7 @@
0);
contactTile.setLayoutParams(params);
contactTile.setPhotoManager(mPhotoManager);
- contactTile.setListener(mContactTileListener);
+ contactTile.setListener(mListener);
addView(contactTile);
} else {
contactTile = (ContactTileView) getChildAt(childIndex);
@@ -667,8 +657,4 @@
public static final int FREQUENT = 2;
public static final int STARRED_WITH_SECONDARY_ACTION = 3;
}
-
- public interface Listener {
- public void onContactSelected(Uri contactUri, Rect targetRect);
- }
}
diff --git a/src/com/android/contacts/list/ContactTileDarkFrequentView.java b/src/com/android/contacts/list/ContactTileDarkFrequentView.java
deleted file mode 100644
index 78f45bd..0000000
--- a/src/com/android/contacts/list/ContactTileDarkFrequentView.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.list;
-
-import android.content.Context;
-import android.util.AttributeSet;
-
-/**
- * A dark version of the {@link ContactTileView} (This class is needed to load the proper avatar)
- */
-public class ContactTileDarkFrequentView extends ContactTileView {
- public ContactTileDarkFrequentView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected boolean isDarkTheme() {
- return true;
- }
-}
diff --git a/src/com/android/contacts/list/ContactTileListFragment.java b/src/com/android/contacts/list/ContactTileListFragment.java
index d4d961b..fbd7fec 100644
--- a/src/com/android/contacts/list/ContactTileListFragment.java
+++ b/src/com/android/contacts/list/ContactTileListFragment.java
@@ -49,7 +49,8 @@
private static final String TAG = ContactTileListFragment.class.getSimpleName();
public interface Listener {
- public void onContactSelected(Uri contactUri, Rect targetRect);
+ void onContactSelected(Uri contactUri, Rect targetRect);
+ void onCallNumberDirectly(String phoneNumber);
}
private static int LOADER_CONTACTS = 1;
@@ -94,8 +95,7 @@
@Override
public void onStart() {
super.onStart();
- // TODO: Use initLoader?
- getLoaderManager().restartLoader(LOADER_CONTACTS, null, mContactTileLoaderListener);
+ getLoaderManager().initLoader(LOADER_CONTACTS, null, mContactTileLoaderListener);
}
public void setColumnCount(int columnCount) {
@@ -164,13 +164,20 @@
mListener = listener;
}
- private ContactTileAdapter.Listener mAdapterListener =
- new ContactTileAdapter.Listener() {
+ private ContactTileView.Listener mAdapterListener =
+ new ContactTileView.Listener() {
@Override
public void onContactSelected(Uri contactUri, Rect targetRect) {
if (mListener != null) {
mListener.onContactSelected(contactUri, targetRect);
}
}
+
+ @Override
+ public void onCallNumberDirectly(String phoneNumber) {
+ if (mListener != null) {
+ mListener.onCallNumberDirectly(phoneNumber);
+ }
+ }
};
}
diff --git a/src/com/android/contacts/list/ContactTilePhoneFrequentView.java b/src/com/android/contacts/list/ContactTilePhoneFrequentView.java
new file mode 100644
index 0000000..d924b03
--- /dev/null
+++ b/src/com/android/contacts/list/ContactTilePhoneFrequentView.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.text.TextUtils;
+
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.list.ContactTileAdapter.ContactEntry;
+
+/**
+ * A dark version of the {@link ContactTileView} that is used in Dialtacts
+ * for frequently called contacts. Slightly different behavior from superclass...
+ * when you tap it, you want to call the frequently-called number for the
+ * contact, even if that is not the default number for that contact.
+ */
+public class ContactTilePhoneFrequentView extends ContactTileView {
+ private String mPhoneNumberString;
+
+ public ContactTilePhoneFrequentView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected boolean isDarkTheme() {
+ return true;
+ }
+
+ @Override
+ public void loadFromContact(ContactEntry entry) {
+ super.loadFromContact(entry);
+ mPhoneNumberString = null; // ... in case we're reusing the view
+ if (entry != null) {
+ // Grab the phone-number to call directly... see {@link onClick()}
+ mPhoneNumberString = entry.phoneNumber;
+ }
+ }
+
+ @Override
+ protected OnClickListener createClickListener() {
+ return new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mListener == null) return;
+ if (TextUtils.isEmpty(mPhoneNumberString)) {
+ // Copy "superclass" implementation
+ mListener.onContactSelected(getLookupUri(), ContactsUtils.getTargetRectFromView(
+ mContext, ContactTilePhoneFrequentView.this));
+ } else {
+ // When you tap a frequently-called contact, you want to
+ // call them at the number that you usually talk to them
+ // at (i.e. the one displayed in the UI), regardless of
+ // whether that's their default number.
+ mListener.onCallNumberDirectly(mPhoneNumberString);
+ }
+ }
+ };
+ }
+}
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
index 0b90c44..e73b9c1 100644
--- a/src/com/android/contacts/list/ContactTileView.java
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -16,10 +16,12 @@
package com.android.contacts.list;
import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
import com.android.contacts.list.ContactTileAdapter.ContactEntry;
import android.content.Context;
+import android.graphics.Rect;
import android.net.Uri;
import android.util.AttributeSet;
import android.util.Log;
@@ -45,7 +47,7 @@
private ContactPhotoManager mPhotoManager = null;
private View mPushState;
private View mHorizontalDivider;
- private Listener mListener;
+ protected Listener mListener;
public ContactTileView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -64,14 +66,8 @@
mPushState = findViewById(R.id.contact_tile_push_state);
mHorizontalDivider = findViewById(R.id.contact_tile_horizontal_divider);
- OnClickListener listener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener != null) {
- mListener.onClick(ContactTileView.this);
- }
- }
- };
+
+ OnClickListener listener = createClickListener();
if(mPushState != null) {
mPushState.setOnClickListener(listener);
@@ -80,6 +76,18 @@
}
}
+ protected OnClickListener createClickListener() {
+ return new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mListener == null) return;
+ mListener.onContactSelected(
+ getLookupUri(),
+ ContactsUtils.getTargetRectFromView(mContext, ContactTileView.this));
+ }
+ };
+ }
+
public void setPhotoManager(ContactPhotoManager photoManager) {
mPhotoManager = photoManager;
}
@@ -165,6 +173,13 @@
}
public interface Listener {
- void onClick(ContactTileView contactTileView);
+ /**
+ * Notification that the contact was selected; no specific action is dictated.
+ */
+ void onContactSelected(Uri contactLookupUri, Rect viewRect);
+ /**
+ * Notification that the specified number is to be called.
+ */
+ void onCallNumberDirectly(String phoneNumber);
}
}
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 8d14591..9199766 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -18,6 +18,7 @@
import com.android.contacts.CallContactActivity;
import com.android.contacts.ContactsSearchManager;
+import com.android.contacts.ContactsUtils;
import android.app.Activity;
import android.app.SearchManager;
@@ -33,6 +34,7 @@
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
+import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.Intents.UI;
import android.text.TextUtils;
import android.util.Log;
@@ -124,16 +126,22 @@
} else if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) {
request.setActionCode(ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT);
} else if (Intent.ACTION_SEARCH.equals(action)) {
+ String query = intent.getStringExtra(SearchManager.QUERY);
// See if the suggestion was clicked with a search action key (call button)
if ("call".equals(intent.getStringExtra(SearchManager.ACTION_MSG))) {
- String query = intent.getStringExtra(SearchManager.QUERY);
if (!TextUtils.isEmpty(query)) {
- Intent newIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("tel", query, null));
- request.setRedirectIntent(newIntent);
+ request.setRedirectIntent(ContactsUtils.getCallIntent(query));
}
} else {
- request.setQueryString(intent.getStringExtra(SearchManager.QUERY));
+ // If the {@link SearchManager.QUERY} is empty, then check if a phone number
+ // or email is specified, in that priority.
+ if (TextUtils.isEmpty(query)) {
+ query = intent.getStringExtra(Insert.PHONE);
+ }
+ if (TextUtils.isEmpty(query)) {
+ query = intent.getStringExtra(Insert.EMAIL);
+ }
+ request.setQueryString(query);
request.setSearchMode(true);
}
} else if (Intent.ACTION_VIEW.equals(action)) {
@@ -182,7 +190,7 @@
intent.setData(null);
}
} else if (Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED.equals(action)) {
- request.setRedirectIntent(new Intent(Intent.ACTION_CALL_PRIVILEGED, intent.getData()));
+ request.setRedirectIntent(ContactsUtils.getCallIntent(intent.getData()));
} else if (Intents.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED.equals(action)) {
// TODO actually support this in EditContactActivity.
String number = intent.getData().getSchemeSpecificPart();
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 4bf1a04..79dec09 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -60,7 +60,9 @@
@Override
public void onClick(View view) {
AccountFilterUtil.startAccountFilterActivityForResult(
- DefaultContactBrowseListFragment.this, REQUEST_CODE_ACCOUNT_FILTER);
+ DefaultContactBrowseListFragment.this,
+ REQUEST_CODE_ACCOUNT_FILTER,
+ getFilter());
}
}
private OnClickListener mFilterHeaderClickListener = new FilterHeaderClickListener();
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 348abb9..72a5c88 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -26,9 +26,7 @@
import android.net.Uri.Builder;
import android.preference.PreferenceManager;
import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.SearchSnippetColumns;
@@ -124,9 +122,13 @@
if (filter != null
&& filter.filterType != ContactListFilter.FILTER_TYPE_CUSTOM
&& filter.filterType != ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
- uri = uri.buildUpon().appendQueryParameter(
- ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
- .build();
+ final Uri.Builder builder = uri.buildUpon();
+ builder.appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT));
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+ filter.addAccountQueryParameterToUrl(builder);
+ }
+ uri = builder.build();
}
loader.setUri(uri);
@@ -172,22 +174,7 @@
break;
}
case ContactListFilter.FILTER_TYPE_ACCOUNT: {
- // TODO: avoid the use of private API
- selection.append(
- Contacts._ID + " IN ("
- + "SELECT DISTINCT " + RawContacts.CONTACT_ID
- + " FROM raw_contacts"
- + " WHERE " + RawContacts.ACCOUNT_TYPE + "=?"
- + " AND " + RawContacts.ACCOUNT_NAME + "=?");
- selectionArgs.add(filter.accountType);
- selectionArgs.add(filter.accountName);
- if (filter.dataSet != null) {
- selection.append(" AND " + RawContacts.DATA_SET + "=?");
- selectionArgs.add(filter.dataSet);
- } else {
- selection.append(" AND " + RawContacts.DATA_SET + " IS NULL");
- }
- selection.append(")");
+ // We use query parameters for account filter, so no selection to add here.
break;
}
}
@@ -209,7 +196,8 @@
if (isQuickContactEnabled()) {
bindQuickContact(view, partition, cursor, ContactQuery.CONTACT_PHOTO_ID,
- ContactQuery.CONTACT_ID, ContactQuery.CONTACT_LOOKUP_KEY);
+ ContactQuery.CONTACT_PHOTO_URI, ContactQuery.CONTACT_ID,
+ ContactQuery.CONTACT_LOOKUP_KEY);
} else {
bindPhoto(view, partition, cursor);
}
diff --git a/src/com/android/contacts/list/EmailAddressListAdapter.java b/src/com/android/contacts/list/EmailAddressListAdapter.java
index 93f435e..13853a1 100644
--- a/src/com/android/contacts/list/EmailAddressListAdapter.java
+++ b/src/com/android/contacts/list/EmailAddressListAdapter.java
@@ -78,6 +78,9 @@
builder.appendPath(TextUtils.isEmpty(query) ? "" : query);
} else {
builder = Email.CONTENT_URI.buildUpon();
+ if (isSectionHeaderDisplayEnabled()) {
+ builder.appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true");
+ }
}
builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
String.valueOf(directoryId));
@@ -97,11 +100,6 @@
}
}
- protected static Builder buildSectionIndexerUri(Uri uri) {
- return uri.buildUpon()
- .appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true");
- }
-
@Override
public String getContactDisplayName(int position) {
return ((Cursor) getItem(position)).getString(EmailQuery.EMAIL_DISPLAY_NAME);
@@ -112,7 +110,7 @@
* position.
*/
public Uri getDataUri(int position) {
- long id = ((Cursor)getItem(position)).getLong(EmailQuery.EMAIL_ID);
+ long id = ((Cursor) getItem(position)).getLong(EmailQuery.EMAIL_ID);
return ContentUris.withAppendedId(Data.CONTENT_URI, id);
}
diff --git a/src/com/android/contacts/list/EmailAddressPickerFragment.java b/src/com/android/contacts/list/EmailAddressPickerFragment.java
index 14b6c23..13fe541 100644
--- a/src/com/android/contacts/list/EmailAddressPickerFragment.java
+++ b/src/com/android/contacts/list/EmailAddressPickerFragment.java
@@ -58,6 +58,13 @@
return inflater.inflate(R.layout.contact_list_content, null);
}
+ @Override
+ protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
+ super.onCreateView(inflater, container);
+
+ setVisibleScrollbarEnabled(!isLegacyCompatibilityMode());
+ }
+
private void pickEmailAddress(Uri uri) {
mListener.onPickEmailAddressAction(uri);
}
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index bfe8c53..80ddc83 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -20,7 +20,6 @@
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
-import android.database.MatrixCursor;
import android.net.Uri;
import android.net.Uri.Builder;
import android.provider.ContactsContract;
@@ -53,7 +52,6 @@
@Override
protected void addPartitions() {
-
// Partition 0: suggestions
addPartition(false, true);
@@ -69,11 +67,11 @@
public void configureLoader(CursorLoader cursorLoader, long directoryId) {
JoinContactLoader loader = (JoinContactLoader) cursorLoader;
- Builder builder = Contacts.CONTENT_URI.buildUpon();
+ final Builder builder = Contacts.CONTENT_URI.buildUpon();
builder.appendEncodedPath(String.valueOf(mTargetContactId));
builder.appendEncodedPath(AggregationSuggestions.CONTENT_DIRECTORY);
- String filter = getQueryString();
+ final String filter = getQueryString();
if (!TextUtils.isEmpty(filter)) {
builder.appendEncodedPath(Uri.encode(filter));
}
@@ -84,13 +82,22 @@
// TODO simplify projection
loader.setProjection(getProjection(false));
- Uri allContactsUri = buildSectionIndexerUri(Contacts.CONTENT_URI).buildUpon()
+ final Uri allContactsUri;
+ if (!TextUtils.isEmpty(filter)) {
+ allContactsUri = buildSectionIndexerUri(Contacts.CONTENT_FILTER_URI).buildUpon()
+ .appendEncodedPath(Uri.encode(filter))
.appendQueryParameter(
ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
.build();
+ } else {
+ allContactsUri = buildSectionIndexerUri(Contacts.CONTENT_URI).buildUpon()
+ .appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
+ .build();
+ }
loader.setUri(allContactsUri);
loader.setSelection(Contacts._ID + "!=?");
- loader.setSelectionArgs(new String[]{String.valueOf(mTargetContactId)});
+ loader.setSelectionArgs(new String[]{ String.valueOf(mTargetContactId) });
if (getSortOrder() == ContactsContract.Preferences.SORT_ORDER_PRIMARY) {
loader.setSortOrder(Contacts.SORT_KEY_PRIMARY);
} else {
@@ -120,7 +127,7 @@
@Override
public int getViewTypeCount() {
- return super.getViewTypeCount() + 1;
+ return super.getViewTypeCount();
}
@Override
@@ -173,14 +180,14 @@
protected void bindView(View itemView, int partition, Cursor cursor, int position) {
switch (partition) {
case PARTITION_SUGGESTIONS: {
- final ContactListItemView view = (ContactListItemView)itemView;
+ final ContactListItemView view = (ContactListItemView) itemView;
view.setSectionHeader(null);
bindPhoto(view, partition, cursor);
bindName(view, cursor);
break;
}
case PARTITION_ALL_CONTACTS: {
- final ContactListItemView view = (ContactListItemView)itemView;
+ final ContactListItemView view = (ContactListItemView) itemView;
bindSectionHeaderAndDivider(view, position, cursor);
bindPhoto(view, partition, cursor);
bindName(view, cursor);
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index 5b27bdf..7c6767b 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -26,6 +26,7 @@
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -103,7 +104,10 @@
configureAdapter();
getLoaderManager().initLoader(DISPLAY_NAME_LOADER, null, mLoaderCallbacks);
- getLoaderManager().initLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS,
+
+ // When this method is called, Uri to be used may be changed. We should use restartLoader()
+ // to load the parameter again.
+ getLoaderManager().restartLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS,
null, mLoaderCallbacks);
}
@@ -167,4 +171,11 @@
mTargetContactId = savedState.getLong(KEY_TARGET_CONTACT_ID);
}
}
+
+ @Override
+ public void setQueryString(String queryString, boolean delaySelection) {
+ super.setQueryString(queryString, delaySelection);
+
+ setSearchMode(!TextUtils.isEmpty(queryString));
+ }
}
diff --git a/src/com/android/contacts/list/JoinContactLoader.java b/src/com/android/contacts/list/JoinContactLoader.java
index 2f1f9b0..c43560e 100644
--- a/src/com/android/contacts/list/JoinContactLoader.java
+++ b/src/com/android/contacts/list/JoinContactLoader.java
@@ -20,6 +20,7 @@
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
+import android.util.Log;
/**
* A specialized loader for the Join Contacts UI. It executes two queries:
@@ -29,7 +30,7 @@
private String[] mProjection;
private Uri mSuggestionUri;
- private MatrixCursor mSuggestionsCursor;
+ private Cursor mSuggestionsCursor;
public JoinContactLoader(Context context) {
super(context, null, null, null, null, null);
@@ -53,28 +54,8 @@
public Cursor loadInBackground() {
// First execute the suggestions query, then call super.loadInBackground
// to load the entire list
- mSuggestionsCursor = loadSuggestions();
+ mSuggestionsCursor = getContext().getContentResolver()
+ .query(mSuggestionUri, mProjection, null, null, null);
return super.loadInBackground();
}
-
- /**
- * Loads join suggestions into a MatrixCursor.
- */
- private MatrixCursor loadSuggestions() {
- Cursor cursor = getContext().getContentResolver().query(mSuggestionUri, mProjection,
- null, null, null);
- try {
- MatrixCursor matrix = new MatrixCursor(mProjection);
- Object[] row = new Object[mProjection.length];
- while (cursor.moveToNext()) {
- for (int i = 0; i < row.length; i++) {
- row[i] = cursor.getString(i);
- }
- matrix.addRow(row);
- }
- return matrix;
- } finally {
- cursor.close();
- }
- }
}
\ No newline at end of file
diff --git a/src/com/android/contacts/list/PhoneFavoriteFragment.java b/src/com/android/contacts/list/PhoneFavoriteFragment.java
index b6e8dd6..921ff6f 100644
--- a/src/com/android/contacts/list/PhoneFavoriteFragment.java
+++ b/src/com/android/contacts/list/PhoneFavoriteFragment.java
@@ -18,6 +18,7 @@
import com.android.contacts.ContactPhotoManager;
import com.android.contacts.ContactTileLoaderFactory;
import com.android.contacts.R;
+import com.android.contacts.interactions.ImportExportDialogFragment;
import com.android.contacts.preference.ContactsPreferences;
import com.android.contacts.util.AccountFilterUtil;
@@ -32,9 +33,14 @@
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.Directory;
+import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
@@ -69,6 +75,7 @@
public interface Listener {
public void onContactSelected(Uri contactUri);
+ public void onCallNumberDirectly(String phoneNumber);
}
private class ContactTileLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -130,20 +137,29 @@
}
}
- private class ContactTileAdapterListener implements ContactTileAdapter.Listener {
+ private class ContactTileAdapterListener implements ContactTileView.Listener {
@Override
public void onContactSelected(Uri contactUri, Rect targetRect) {
if (mListener != null) {
mListener.onContactSelected(contactUri);
}
}
+
+ @Override
+ public void onCallNumberDirectly(String phoneNumber) {
+ if (mListener != null) {
+ mListener.onCallNumberDirectly(phoneNumber);
+ }
+ }
}
private class FilterHeaderClickListener implements OnClickListener {
@Override
public void onClick(View view) {
AccountFilterUtil.startAccountFilterActivityForResult(
- PhoneFavoriteFragment.this, REQUEST_CODE_ACCOUNT_FILTER);
+ PhoneFavoriteFragment.this,
+ REQUEST_CODE_ACCOUNT_FILTER,
+ mFilter);
}
}
@@ -204,7 +220,7 @@
private FrameLayout mAccountFilterHeaderContainer;
private View mAccountFilterHeader;
- private final ContactTileAdapter.Listener mContactTileAdapterListener =
+ private final ContactTileView.Listener mContactTileAdapterListener =
new ContactTileAdapterListener();
private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
new ContactTileLoaderListener();
@@ -221,6 +237,7 @@
if (savedState != null) {
mFilter = savedState.getParcelable(KEY_FILTER);
}
+ setHasOptionsMenu(true);
}
@Override
@@ -299,6 +316,8 @@
// Put photos on left for consistency with "frequent" contacts section.
mAllContactsAdapter.setPhotoPosition(ContactListItemView.PhotoPosition.LEFT);
+ mAllContactsAdapter.setUseCallableUri(true);
+
if (mFilter != null) {
mAllContactsAdapter.setFilter(mFilter);
}
@@ -317,6 +336,34 @@
}
@Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ inflater.inflate(R.menu.phone_favorite_options, menu);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_import_export:
+ // We hard-code the "contactsAreAvailable" argument because doing it properly would
+ // involve querying a {@link ProviderStatusLoader}, which we don't want to do right
+ // now in Dialtacts for (potential) performance reasons. Compare with how it is
+ // done in {@link PeopleActivity}.
+ ImportExportDialogFragment.show(getFragmentManager(), true);
+ return true;
+ case R.id.menu_accounts:
+ final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
+ intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
+ ContactsContract.AUTHORITY
+ });
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ startActivity(intent);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
public void onStart() {
super.onStart();
@@ -451,4 +498,4 @@
public void setListener(Listener listener) {
mListener = listener;
}
-}
\ No newline at end of file
+}
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index 1d077b7..2b231a7 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -22,7 +22,9 @@
import android.net.Uri;
import android.net.Uri.Builder;
import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Callable;
import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
@@ -37,7 +39,12 @@
import java.util.List;
/**
- * A cursor adapter for the {@link Phone#CONTENT_TYPE} content type.
+ * A cursor adapter for the {@link Phone#CONTENT_ITEM_TYPE} and
+ * {@link SipAddress#CONTENT_ITEM_TYPE}.
+ *
+ * By default this adapter just handles phone numbers. When {@link #setUseCallableUri(boolean)} is
+ * called with "true", this adapter starts handling SIP addresses too, by using {@link Callable}
+ * API instead of {@link Phone}.
*/
public class PhoneNumberListAdapter extends ContactEntryListAdapter {
private static final String TAG = PhoneNumberListAdapter.class.getSimpleName();
@@ -79,6 +86,8 @@
private ContactListItemView.PhotoPosition mPhotoPosition;
+ private boolean mUseCallableUri;
+
public PhoneNumberListAdapter(Context context) {
super(context);
@@ -91,40 +100,37 @@
@Override
public void configureLoader(CursorLoader loader, long directoryId) {
- Uri uri;
-
if (directoryId != Directory.DEFAULT) {
Log.w(TAG, "PhoneNumberListAdapter is not ready for non-default directory ID ("
+ "directoryId: " + directoryId + ")");
}
+ final Builder builder;
if (isSearchMode()) {
- String query = getQueryString();
- Builder builder = Phone.CONTENT_FILTER_URI.buildUpon();
+ final Uri baseUri =
+ mUseCallableUri ? Callable.CONTENT_FILTER_URI : Phone.CONTENT_FILTER_URI;
+ builder = baseUri.buildUpon();
+ final String query = getQueryString();
if (TextUtils.isEmpty(query)) {
builder.appendPath("");
} else {
builder.appendPath(query); // Builder will encode the query
}
-
builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
String.valueOf(directoryId));
- uri = builder.build();
} else {
- uri = Phone.CONTENT_URI.buildUpon().appendQueryParameter(
- ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
- .build();
+ final Uri baseUri = mUseCallableUri ? Callable.CONTENT_URI : Phone.CONTENT_URI;
+ builder = baseUri.buildUpon().appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT));
if (isSectionHeaderDisplayEnabled()) {
- uri = buildSectionIndexerUri(uri);
+ builder.appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true");
}
- configureSelection(loader, directoryId, getFilter());
+ applyFilter(loader, builder, directoryId, getFilter());
}
// Remove duplicates when it is possible.
- uri = uri.buildUpon()
- .appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true")
- .build();
- loader.setUri(uri);
+ builder.appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true");
+ loader.setUri(builder.build());
// TODO a projection that includes the search snippet
if (getContactNameDisplayOrder() == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
@@ -140,8 +146,12 @@
}
}
- private void configureSelection(
- CursorLoader loader, long directoryId, ContactListFilter filter) {
+ /**
+ * Configure {@code loader} and {@code uriBuilder} according to {@code directoryId} and {@code
+ * filter}.
+ */
+ private void applyFilter(CursorLoader loader, Uri.Builder uriBuilder, long directoryId,
+ ContactListFilter filter) {
if (filter == null || directoryId != Directory.DEFAULT) {
return;
}
@@ -156,19 +166,7 @@
break;
}
case ContactListFilter.FILTER_TYPE_ACCOUNT: {
- selection.append("(");
-
- selection.append(RawContacts.ACCOUNT_TYPE + "=?"
- + " AND " + RawContacts.ACCOUNT_NAME + "=?");
- selectionArgs.add(filter.accountType);
- selectionArgs.add(filter.accountName);
- if (filter.dataSet != null) {
- selection.append(" AND " + RawContacts.DATA_SET + "=?");
- selectionArgs.add(filter.dataSet);
- } else {
- selection.append(" AND " + RawContacts.DATA_SET + " IS NULL");
- }
- selection.append(")");
+ filter.addAccountQueryParameterToUrl(uriBuilder);
break;
}
case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS:
@@ -187,11 +185,6 @@
loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
}
- protected static Uri buildSectionIndexerUri(Uri uri) {
- return uri.buildUpon()
- .appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true").build();
- }
-
@Override
public String getContactDisplayName(int position) {
return ((Cursor) getItem(position)).getString(PhoneQuery.PHONE_DISPLAY_NAME);
@@ -227,6 +220,8 @@
protected void bindView(View itemView, int partition, Cursor cursor, int position) {
ContactListItemView view = (ContactListItemView)itemView;
+ view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
+
// Look at elements before and after this position, checking if contact IDs are same.
// If they have one same contact ID, it means they can be grouped.
//
@@ -259,7 +254,9 @@
if (isFirstEntry) {
bindName(view, cursor);
if (isQuickContactEnabled()) {
- bindQuickContact(view, partition, cursor, PhoneQuery.PHONE_PHOTO_ID,
+ // No need for photo uri here, because we can not have directory results. If we
+ // ever do, we need to add photo uri to the query
+ bindQuickContact(view, partition, cursor, PhoneQuery.PHONE_PHOTO_ID, -1,
PhoneQuery.PHONE_CONTACT_ID, PhoneQuery.PHONE_LOOKUP_KEY);
} else {
bindPhoto(view, cursor);
@@ -322,4 +319,12 @@
public ContactListItemView.PhotoPosition getPhotoPosition() {
return mPhotoPosition;
}
+
+ public void setUseCallableUri(boolean useCallableUri) {
+ mUseCallableUri = useCallableUri;
+ }
+
+ public boolean usesCallableUri() {
+ return mUseCallableUri;
+ }
}
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
index c96956b..6886e81 100644
--- a/src/com/android/contacts/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -38,6 +38,8 @@
private static final int REQUEST_CODE_ACCOUNT_FILTER = 1;
+ private static final String KEY_SHORTCUT_ACTION = "shortcutAction";
+
private OnPhoneNumberPickerActionListener mListener;
private String mShortcutAction;
@@ -55,6 +57,8 @@
/** true if the loader has started at least once. */
private boolean mLoaderStarted;
+ private boolean mUseCallableUri;
+
private ContactListItemView.PhotoPosition mPhotoPosition =
ContactListItemView.DEFAULT_PHOTO_POSITION;
@@ -62,7 +66,9 @@
@Override
public void onClick(View view) {
AccountFilterUtil.startAccountFilterActivityForResult(
- PhoneNumberPickerFragment.this, REQUEST_CODE_ACCOUNT_FILTER);
+ PhoneNumberPickerFragment.this,
+ REQUEST_CODE_ACCOUNT_FILTER,
+ mFilter);
}
}
private OnClickListener mFilterHeaderClickListener = new FilterHeaderClickListener();
@@ -127,12 +133,14 @@
}
mFilter = savedState.getParcelable(KEY_FILTER);
+ mShortcutAction = savedState.getString(KEY_SHORTCUT_ACTION);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(KEY_FILTER, mFilter);
+ outState.putString(KEY_SHORTCUT_ACTION, mShortcutAction);
}
@Override
@@ -180,11 +188,20 @@
super.startLoading();
}
+ public void setUseCallableUri(boolean useCallableUri) {
+ mUseCallableUri = useCallableUri;
+ }
+
+ public boolean usesCallableUri() {
+ return mUseCallableUri;
+ }
+
@Override
protected ContactEntryListAdapter createListAdapter() {
if (!isLegacyCompatibilityMode()) {
PhoneNumberListAdapter adapter = new PhoneNumberListAdapter(getActivity());
adapter.setDisplayPhotos(true);
+ adapter.setUseCallableUri(mUseCallableUri);
return adapter;
} else {
LegacyPhoneNumberListAdapter adapter = new LegacyPhoneNumberListAdapter(getActivity());
diff --git a/src/com/android/contacts/list/PostalAddressListAdapter.java b/src/com/android/contacts/list/PostalAddressListAdapter.java
index 41591de..2750e11 100644
--- a/src/com/android/contacts/list/PostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/PostalAddressListAdapter.java
@@ -20,10 +20,11 @@
import android.content.CursorLoader;
import android.database.Cursor;
import android.net.Uri;
+import android.net.Uri.Builder;
import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.view.View;
import android.view.ViewGroup;
@@ -69,11 +70,12 @@
@Override
public void configureLoader(CursorLoader loader, long directoryId) {
- Uri uri = buildSectionIndexerUri(StructuredPostal.CONTENT_URI)
- .buildUpon()
- .appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true")
- .build();
- loader.setUri(uri);
+ final Builder builder = StructuredPostal.CONTENT_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true");
+ if (isSectionHeaderDisplayEnabled()) {
+ builder.appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true");
+ }
+ loader.setUri(builder.build());
if (getContactNameDisplayOrder() == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) {
loader.setProjection(PostalQuery.PROJECTION_PRIMARY);
@@ -88,11 +90,6 @@
}
}
- protected static Uri buildSectionIndexerUri(Uri uri) {
- return uri.buildUpon()
- .appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true").build();
- }
-
@Override
public String getContactDisplayName(int position) {
return ((Cursor) getItem(position)).getString(PostalQuery.POSTAL_DISPLAY_NAME);
diff --git a/src/com/android/contacts/list/PostalAddressPickerFragment.java b/src/com/android/contacts/list/PostalAddressPickerFragment.java
index 85fc155..ddb8e9a 100644
--- a/src/com/android/contacts/list/PostalAddressPickerFragment.java
+++ b/src/com/android/contacts/list/PostalAddressPickerFragment.java
@@ -73,6 +73,13 @@
return inflater.inflate(R.layout.contact_list_content, null);
}
+ @Override
+ protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
+ super.onCreateView(inflater, container);
+
+ setVisibleScrollbarEnabled(!isLegacyCompatibilityMode());
+ }
+
private void pickPostalAddress(Uri uri) {
mListener.onPickPostalAddressAction(uri);
}
diff --git a/src/com/android/contacts/model/AccountType.java b/src/com/android/contacts/model/AccountType.java
index 22ea884..3cc54f1 100644
--- a/src/com/android/contacts/model/AccountType.java
+++ b/src/com/android/contacts/model/AccountType.java
@@ -25,7 +25,6 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
@@ -270,6 +269,7 @@
* {@link Comparator} to sort by {@link DataKind#weight}.
*/
private static Comparator<DataKind> sWeightComparator = new Comparator<DataKind>() {
+ @Override
public int compare(DataKind object1, DataKind object2) {
return object1.weight - object2.weight;
}
@@ -460,13 +460,12 @@
}
/**
- * Generic method of inflating a given {@link Cursor} into a user-readable
+ * Generic method of inflating a given {@link ContentValues} into a user-readable
* {@link CharSequence}. For example, an inflater could combine the multiple
* columns of {@link StructuredPostal} together using a string resource
* before presenting to the user.
*/
public interface StringInflater {
- public CharSequence inflateUsing(Context context, Cursor cursor);
public CharSequence inflateUsing(Context context, ContentValues values);
}
diff --git a/src/com/android/contacts/model/BaseAccountType.java b/src/com/android/contacts/model/BaseAccountType.java
index cd113eb..1e830e2 100644
--- a/src/com/android/contacts/model/BaseAccountType.java
+++ b/src/com/android/contacts/model/BaseAccountType.java
@@ -17,18 +17,14 @@
package com.android.contacts.model;
import com.android.contacts.R;
-import com.android.contacts.model.AccountType.DefinitionException;
+import com.android.contacts.test.NeededForTesting;
import com.android.contacts.util.DateUtils;
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
-import android.database.Cursor;
import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Event;
@@ -48,6 +44,9 @@
import android.util.Log;
import android.view.inputmethod.EditorInfo;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
import java.io.IOException;
import java.util.List;
import java.util.Locale;
@@ -79,6 +78,12 @@
protected static final int FLAGS_RELATION = EditorInfo.TYPE_CLASS_TEXT
| EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
+ // Specify the maximum number of lines that can be used to display various field types. If no
+ // value is specified for a particular type, we use the default value from {@link DataKind}.
+ protected static final int MAX_LINES_FOR_POSTAL_ADDRESS = 10;
+ protected static final int MAX_LINES_FOR_GROUP = 10;
+ protected static final int MAX_LINES_FOR_NOTE = 100;
+
private interface Tag {
static final String DATA_KIND = "DataKind";
static final String TYPE = "Type";
@@ -323,6 +328,8 @@
new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
FLAGS_POSTAL));
+ kind.maxLinesForDisplay = MAX_LINES_FOR_POSTAL_ADDRESS;
+
return kind;
}
@@ -391,6 +398,8 @@
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+ kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
+
return kind;
}
@@ -430,6 +439,8 @@
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
+ kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
+
return kind;
}
@@ -454,25 +465,7 @@
mColumnName = columnName;
}
- public CharSequence inflateUsing(Context context, Cursor cursor) {
- final int index = mColumnName != null ? cursor.getColumnIndex(mColumnName) : -1;
- final boolean validString = mStringRes > 0;
- final boolean validColumn = index != -1;
-
- final CharSequence stringValue = validString ? context.getText(mStringRes) : null;
- final CharSequence columnValue = validColumn ? cursor.getString(index) : null;
-
- if (validString && validColumn) {
- return String.format(stringValue.toString(), columnValue);
- } else if (validString) {
- return stringValue;
- } else if (validColumn) {
- return columnValue;
- } else {
- return null;
- }
- }
-
+ @Override
public CharSequence inflateUsing(Context context, ContentValues values) {
final boolean validColumn = values.containsKey(mColumnName);
final boolean validString = mStringRes > 0;
@@ -498,6 +491,7 @@
+ " mColumnName" + mColumnName;
}
+ @NeededForTesting
public String getColumnNameForTest() {
return mColumnName;
}
@@ -529,12 +523,7 @@
}
}
- public CharSequence inflateUsing(Context context, Cursor cursor) {
- final Integer type = cursor.getInt(cursor.getColumnIndex(getTypeColumn()));
- final String label = cursor.getString(cursor.getColumnIndex(getLabelColumn()));
- return getTypeLabel(context.getResources(), type, label);
- }
-
+ @Override
public CharSequence inflateUsing(Context context, ContentValues values) {
final Integer type = values.getAsInteger(getTypeColumn());
final String label = values.getAsString(getLabelColumn());
@@ -1210,6 +1199,7 @@
R.string.postal_country, FLAGS_POSTAL).setOptional(true));
}
} else {
+ kind.maxLinesForDisplay= MAX_LINES_FOR_POSTAL_ADDRESS;
kind.fieldList.add(
new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
FLAGS_POSTAL));
@@ -1344,6 +1334,7 @@
new SimpleInflater(R.string.label_notes), new SimpleInflater(Note.NOTE));
kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+ kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
throwIfList(kind);
@@ -1417,6 +1408,7 @@
R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, -1, null, null);
kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
+ kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
throwIfList(kind);
diff --git a/src/com/android/contacts/model/DataKind.java b/src/com/android/contacts/model/DataKind.java
index 857f3e4..c697e6f 100644
--- a/src/com/android/contacts/model/DataKind.java
+++ b/src/com/android/contacts/model/DataKind.java
@@ -83,8 +83,16 @@
*/
public SimpleDateFormat dateFormatWithYear;
+ /**
+ * The number of lines available for displaying this kind of data in a
+ * {@link ContactDetailFragment} (and possibly elsewhere)
+ * Defaults to 1.
+ */
+ public int maxLinesForDisplay;
+
public DataKind() {
editorLayoutResourceId = R.layout.text_fields_editor_view;
+ maxLinesForDisplay = 1;
}
public DataKind(String mimeType, int titleRes, int weight, boolean editable,
@@ -95,6 +103,7 @@
this.editable = editable;
this.typeOverallMax = -1;
this.editorLayoutResourceId = editorLayoutResourceId;
+ maxLinesForDisplay = 1;
}
@Override
diff --git a/src/com/android/contacts/model/EntityDelta.java b/src/com/android/contacts/model/EntityDelta.java
index 8244e9c..2cbfa26 100644
--- a/src/com/android/contacts/model/EntityDelta.java
+++ b/src/com/android/contacts/model/EntityDelta.java
@@ -16,6 +16,7 @@
package com.android.contacts.model;
+import com.android.contacts.test.NeededForTesting;
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
import com.google.android.collect.Sets;
@@ -183,6 +184,7 @@
* doesn't exist (may be a primary, or just a random item
* @return
*/
+ @NeededForTesting
public ValuesDelta getSuperPrimaryEntry(String mimeType, boolean forceSelection) {
final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
if (mimeEntries == null) return null;
@@ -564,6 +566,7 @@
return entry;
}
+ @NeededForTesting
public ContentValues getAfter() {
return mAfter;
}
diff --git a/src/com/android/contacts/model/EntityModifier.java b/src/com/android/contacts/model/EntityModifier.java
index 289ca54..ef5d304 100644
--- a/src/com/android/contacts/model/EntityModifier.java
+++ b/src/com/android/contacts/model/EntityModifier.java
@@ -103,19 +103,28 @@
/**
* Ensure that at least one of the given {@link DataKind} exists in the
* given {@link EntityDelta} state, and try creating one if none exist.
+ * @return The child (either newly created or the first existing one), or null if the
+ * account doesn't support this {@link DataKind}.
*/
- public static void ensureKindExists(
+ public static ValuesDelta ensureKindExists(
EntityDelta state, AccountType accountType, String mimeType) {
final DataKind kind = accountType.getKindForMimetype(mimeType);
final boolean hasChild = state.getMimeEntriesCount(mimeType, true) > 0;
- if (!hasChild && kind != null) {
- // Create child when none exists and valid kind
- final ValuesDelta child = insertChild(state, kind);
- if (kind.mimeType.equals(Photo.CONTENT_ITEM_TYPE)) {
- child.setFromTemplate(true);
+ if (kind != null) {
+ if (hasChild) {
+ // Return the first entry.
+ return state.getMimeEntries(mimeType).get(0);
+ } else {
+ // Create child when none exists and valid kind
+ final ValuesDelta child = insertChild(state, kind);
+ if (kind.mimeType.equals(Photo.CONTENT_ITEM_TYPE)) {
+ child.setFromTemplate(true);
+ }
+ return child;
}
}
+ return null;
}
/**
diff --git a/src/com/android/contacts/model/ExchangeAccountType.java b/src/com/android/contacts/model/ExchangeAccountType.java
index e5491d2..21a30f8 100644
--- a/src/com/android/contacts/model/ExchangeAccountType.java
+++ b/src/com/android/contacts/model/ExchangeAccountType.java
@@ -169,8 +169,8 @@
kind.typeColumn = Phone.TYPE;
kind.typeList = Lists.newArrayList();
- kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE).setSpecificMax(1));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
kind.typeList.add(buildPhoneType(Phone.TYPE_WORK).setSpecificMax(2));
kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true)
.setSpecificMax(1));
diff --git a/src/com/android/contacts/model/FallbackAccountType.java b/src/com/android/contacts/model/FallbackAccountType.java
index d81f2f5..6ce7a43 100644
--- a/src/com/android/contacts/model/FallbackAccountType.java
+++ b/src/com/android/contacts/model/FallbackAccountType.java
@@ -17,6 +17,7 @@
package com.android.contacts.model;
import com.android.contacts.R;
+import com.android.contacts.test.NeededForTesting;
import android.content.Context;
import android.util.Log;
@@ -63,6 +64,7 @@
* In order to build {@link DataKind}s with the same resource package name,
* {@code resPackageName} is injectable.
*/
+ @NeededForTesting
static AccountType createForTest(Context context, String resPackageName) {
return new FallbackAccountType(context, resPackageName);
}
diff --git a/src/com/android/contacts/preference/DisplayOrderPreference.java b/src/com/android/contacts/preference/DisplayOrderPreference.java
index fea01c8..bedce48 100644
--- a/src/com/android/contacts/preference/DisplayOrderPreference.java
+++ b/src/com/android/contacts/preference/DisplayOrderPreference.java
@@ -18,6 +18,7 @@
import com.android.contacts.R;
+import android.app.AlertDialog.Builder;
import android.content.Context;
import android.preference.ListPreference;
import android.provider.ContactsContract;
@@ -80,4 +81,11 @@
}
return true;
}
+
+ @Override
+ // UX recommendation is not to show cancel button on such lists.
+ protected void onPrepareDialogBuilder(Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ builder.setNegativeButton(null, null);
+ }
}
diff --git a/src/com/android/contacts/preference/SortOrderPreference.java b/src/com/android/contacts/preference/SortOrderPreference.java
index 81b034c..2ac9557 100644
--- a/src/com/android/contacts/preference/SortOrderPreference.java
+++ b/src/com/android/contacts/preference/SortOrderPreference.java
@@ -18,6 +18,7 @@
import com.android.contacts.R;
+import android.app.AlertDialog.Builder;
import android.content.Context;
import android.preference.ListPreference;
import android.provider.ContactsContract;
@@ -80,4 +81,11 @@
}
return true;
}
+
+ @Override
+ // UX recommendation is not to show cancel button on such lists.
+ protected void onPrepareDialogBuilder(Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ builder.setNegativeButton(null, null);
+ }
}
diff --git a/src/com/android/contacts/quickcontact/Action.java b/src/com/android/contacts/quickcontact/Action.java
index b2d869d..3a283fb 100644
--- a/src/com/android/contacts/quickcontact/Action.java
+++ b/src/com/android/contacts/quickcontact/Action.java
@@ -58,4 +58,7 @@
* row
*/
public long getDataId();
+
+ /** Returns the presence of this item or -1 if it was never set */
+ public int getPresence();
}
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index 266fd02..e839cda 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -21,14 +21,14 @@
import com.android.contacts.model.AccountType.EditType;
import com.android.contacts.model.DataKind;
import com.android.contacts.util.Constants;
-import com.android.contacts.util.StructuredPostalUtils;
import com.android.contacts.util.PhoneCapabilityTester;
+import com.android.contacts.util.StructuredPostalUtils;
import android.content.ContentUris;
+import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
-import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.net.WebAddress;
@@ -59,6 +59,7 @@
private Intent mAlternateIntent;
private int mAlternateIconDescriptionRes;
private int mAlternateIconRes;
+ private int mPresence = -1;
private Uri mDataUri;
private long mDataId;
@@ -67,7 +68,8 @@
/**
* Create an action from common {@link Data} elements.
*/
- public DataAction(Context context, String mimeType, DataKind kind, long dataId, Cursor cursor) {
+ public DataAction(Context context, String mimeType, DataKind kind, long dataId,
+ ContentValues entryValues) {
mContext = context;
mKind = kind;
mMimeType = mimeType;
@@ -75,9 +77,8 @@
// Determine type for subtitle
mSubtitle = "";
if (kind.typeColumn != null) {
- final int typeColumnIndex = cursor.getColumnIndex(kind.typeColumn);
- if (typeColumnIndex != -1) {
- final int typeValue = cursor.getInt(typeColumnIndex);
+ if (entryValues.containsKey(kind.typeColumn)) {
+ final int typeValue = entryValues.getAsInteger(kind.typeColumn);
// get type string
for (EditType type : kind.typeList) {
@@ -87,8 +88,7 @@
mSubtitle = context.getString(type.labelRes);
} else {
// Custom type. Read it from the database
- mSubtitle = cursor.getString(cursor.getColumnIndexOrThrow(
- type.customColumn));
+ mSubtitle = entryValues.getAsString(type.customColumn);
}
break;
}
@@ -96,12 +96,11 @@
}
}
- if (getAsInt(cursor, Data.IS_SUPER_PRIMARY) != 0) {
- mIsPrimary = true;
- }
+ final Integer superPrimary = entryValues.getAsInteger(Data.IS_SUPER_PRIMARY);
+ mIsPrimary = superPrimary != null && superPrimary != 0;
if (mKind.actionBody != null) {
- mBody = mKind.actionBody.inflateUsing(context, cursor);
+ mBody = mKind.actionBody.inflateUsing(context, entryValues);
}
mDataId = dataId;
@@ -113,11 +112,11 @@
// Handle well-known MIME-types with special care
if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
if (PhoneCapabilityTester.isPhone(mContext)) {
- final String number = getAsString(cursor, Phone.NUMBER);
+ final String number = entryValues.getAsString(Phone.NUMBER);
if (!TextUtils.isEmpty(number)) {
- final Intent phoneIntent = hasPhone ? new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts(Constants.SCHEME_TEL, number, null)) : null;
+ final Intent phoneIntent = hasPhone ? ContactsUtils.getCallIntent(number)
+ : null;
final Intent smsIntent = hasSms ? new Intent(Intent.ACTION_SENDTO,
Uri.fromParts(Constants.SCHEME_SMSTO, number, null)) : null;
@@ -136,10 +135,10 @@
}
} else if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)) {
if (PhoneCapabilityTester.isSipPhone(mContext)) {
- final String address = getAsString(cursor, SipAddress.SIP_ADDRESS);
+ final String address = entryValues.getAsString(SipAddress.SIP_ADDRESS);
if (!TextUtils.isEmpty(address)) {
final Uri callUri = Uri.fromParts(Constants.SCHEME_SIP, address, null);
- mIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED, callUri);
+ mIntent = ContactsUtils.getCallIntent(callUri);
// Note that this item will get a SIP-specific variant
// of the "call phone" icon, rather than the standard
// app icon for the Phone app (which we show for
@@ -149,14 +148,14 @@
}
}
} else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final String address = getAsString(cursor, Email.DATA);
+ final String address = entryValues.getAsString(Email.DATA);
if (!TextUtils.isEmpty(address)) {
final Uri mailUri = Uri.fromParts(Constants.SCHEME_MAILTO, address, null);
mIntent = new Intent(Intent.ACTION_SENDTO, mailUri);
}
} else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final String url = getAsString(cursor, Website.URL);
+ final String url = entryValues.getAsString(Website.URL);
if (!TextUtils.isEmpty(url)) {
WebAddress webAddress = new WebAddress(url);
mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress.toString()));
@@ -164,21 +163,21 @@
} else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
final boolean isEmail = Email.CONTENT_ITEM_TYPE.equals(
- getAsString(cursor, Data.MIMETYPE));
- if (isEmail || isProtocolValid(cursor)) {
+ entryValues.getAsString(Data.MIMETYPE));
+ if (isEmail || isProtocolValid(entryValues)) {
final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK :
- getAsInt(cursor, Im.PROTOCOL);
+ entryValues.getAsInteger(Im.PROTOCOL);
if (isEmail) {
// Use Google Talk string when using Email, and clear data
// Uri so we don't try saving Email as primary.
- mSubtitle = context.getText(R.string.chat_gtalk);
+ mSubtitle = Im.getProtocolLabel(context.getResources(), Im.PROTOCOL_GOOGLE_TALK,
+ null);
mDataUri = null;
}
- String host = getAsString(cursor, Im.CUSTOM_PROTOCOL);
- String data = getAsString(cursor,
- isEmail ? Email.DATA : Im.DATA);
+ String host = entryValues.getAsString(Im.CUSTOM_PROTOCOL);
+ String data = entryValues.getAsString(isEmail ? Email.DATA : Im.DATA);
if (protocol != Im.PROTOCOL_CUSTOM) {
// Try bringing in a well-known host for specific protocols
host = ContactsUtils.lookupProviderNameFromId(protocol);
@@ -192,7 +191,8 @@
// If the address is also available for a video chat, we'll show the capability
// as a secondary action.
- final int chatCapability = getAsInt(cursor, Data.CHAT_CAPABILITY);
+ final Integer chatCapabilityObj = entryValues.getAsInteger(Im.CHAT_CAPABILITY);
+ final int chatCapability = chatCapabilityObj == null ? 0 : chatCapabilityObj;
final boolean isVideoChatCapable =
(chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0;
final boolean isAudioChatCapable =
@@ -211,7 +211,8 @@
}
}
} else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final String postalAddress = getAsString(cursor, StructuredPostal.FORMATTED_ADDRESS);
+ final String postalAddress =
+ entryValues.getAsString(StructuredPostal.FORMATTED_ADDRESS);
if (!TextUtils.isEmpty(postalAddress)) {
mIntent = StructuredPostalUtils.getViewPostalAddressIntent(postalAddress);
}
@@ -227,25 +228,22 @@
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
- /** Read {@link String} from the given {@link Cursor}. */
- private static String getAsString(Cursor cursor, String columnName) {
- final int index = cursor.getColumnIndex(columnName);
- return cursor.getString(index);
+ @Override
+ public int getPresence() {
+ return mPresence;
}
- /** Read {@link Integer} from the given {@link Cursor}. */
- private static int getAsInt(Cursor cursor, String columnName) {
- final int index = cursor.getColumnIndex(columnName);
- return cursor.getInt(index);
+ public void setPresence(int presence) {
+ mPresence = presence;
}
- private boolean isProtocolValid(Cursor cursor) {
- final int columnIndex = cursor.getColumnIndex(Im.PROTOCOL);
- if (cursor.isNull(columnIndex)) {
+ private boolean isProtocolValid(ContentValues entryValues) {
+ final String protocol = entryValues.getAsString(Im.PROTOCOL);
+ if (protocol == null) {
return false;
}
try {
- Integer.valueOf(cursor.getString(columnIndex));
+ Integer.valueOf(protocol);
} catch (NumberFormatException e) {
return false;
}
diff --git a/src/com/android/contacts/quickcontact/FloatingChildLayout.java b/src/com/android/contacts/quickcontact/FloatingChildLayout.java
index 5358aca..f1a0fe1 100644
--- a/src/com/android/contacts/quickcontact/FloatingChildLayout.java
+++ b/src/com/android/contacts/quickcontact/FloatingChildLayout.java
@@ -66,8 +66,8 @@
mChild.setDuplicateParentStateEnabled(true);
// this will be expanded in showChild()
- mChild.setScaleX(0.0f);
- mChild.setScaleY(0.0f);
+ mChild.setScaleX(0.5f);
+ mChild.setScaleY(0.5f);
mChild.setAlpha(0.0f);
}
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 2c62fe4..b603e42 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -17,44 +17,42 @@
package com.android.contacts.quickcontact;
import com.android.contacts.Collapser;
+import com.android.contacts.ContactLoader;
import com.android.contacts.ContactPhotoManager;
import com.android.contacts.R;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.DataKind;
import com.android.contacts.util.DataStatus;
-import com.android.contacts.util.NotifyingAsyncQueryHandler;
-import com.android.contacts.util.NotifyingAsyncQueryHandler.AsyncQueryListener;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
+import android.app.LoaderManager.LoaderCallbacks;
import android.content.ActivityNotFoundException;
import android.content.ContentUris;
+import android.content.ContentValues;
import android.content.Context;
+import android.content.Entity;
+import android.content.Entity.NamedContentValues;
import android.content.Intent;
+import android.content.Loader;
import android.content.pm.PackageManager;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.DisplayPhoto;
import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsContract.RawContacts;
import android.support.v13.app.FragmentPagerAdapter;
@@ -74,7 +72,6 @@
import android.widget.TextView;
import android.widget.Toast;
-import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -96,8 +93,6 @@
@SuppressWarnings("deprecation")
private static final String LEGACY_AUTHORITY = android.provider.Contacts.AUTHORITY;
- private NotifyingAsyncQueryHandler mHandler;
-
private Uri mLookupUri;
private String[] mExcludeMimes;
private List<String> mSortedActionMimeTypes = Lists.newArrayList();
@@ -147,8 +142,8 @@
private static final List<String> TRAILING_MIMETYPES = Lists.newArrayList(
StructuredPostal.CONTENT_ITEM_TYPE, Website.CONTENT_ITEM_TYPE);
- /** Id for the background handler that loads the data */
- private static final int HANDLER_ID_DATA = 1;
+ /** Id for the background loader */
+ private static final int LOADER_ID = 0;
@Override
protected void onCreate(Bundle icicle) {
@@ -190,8 +185,6 @@
mListPager.setAdapter(new ViewPagerAdapter(getFragmentManager()));
mListPager.setOnPageChangeListener(new PageChangeListener());
- mHandler = new NotifyingAsyncQueryHandler(this, mQueryListener);
-
show();
}
@@ -225,16 +218,7 @@
mPhotoContainer = findViewById(R.id.photo_container);
setHeaderNameText(R.id.name, R.string.missing_name);
- // Start background query for data, but only select photo rows when they
- // directly match the super-primary PHOTO_ID.
- final Uri dataUri = Uri.withAppendedPath(lookupUri, Contacts.Data.CONTENT_DIRECTORY);
- mHandler.cancelOperation(HANDLER_ID_DATA);
-
- // Select all data items of the contact (except for photos, where we only select the display
- // photo)
- mHandler.startQuery(HANDLER_ID_DATA, lookupUri, dataUri, DataQuery.PROJECTION, Data.MIMETYPE
- + "!=? OR (" + Data.MIMETYPE + "=? AND " + Data._ID + "=" + Contacts.PHOTO_ID
- + ")", new String[] { Photo.CONTENT_ITEM_TYPE, Photo.CONTENT_ITEM_TYPE }, null);
+ getLoaderManager().initLoader(LOADER_ID, null, mLoaderCallbacks);
}
private boolean handleOutsideTouch() {
@@ -248,7 +232,7 @@
private void hide(boolean withAnimation) {
// cancel any pending queries
- mHandler.cancelOperation(HANDLER_ID_DATA);
+ getLoaderManager().destroyLoader(LOADER_ID);
if (withAnimation) {
mFloatingLayout.hideChild(new Runnable() {
@@ -268,47 +252,6 @@
hide(true);
}
- private final AsyncQueryListener mQueryListener = new AsyncQueryListener() {
- @Override
- public synchronized void onQueryComplete(int token, Object cookie, Cursor cursor) {
- try {
- if (isFinishing()) {
- hide(false);
- return;
- } else if (cursor == null || cursor.getCount() == 0) {
- Toast.makeText(QuickContactActivity.this, R.string.invalidContactMessage,
- Toast.LENGTH_LONG).show();
- hide(false);
- return;
- }
-
- bindData(cursor);
-
- if (TRACE_LAUNCH) {
- android.os.Debug.stopMethodTracing();
- }
-
- // Data bound and ready, pull curtain to show. Put this on the Handler to ensure
- // that the layout passes are completed
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mFloatingLayout.showChild(new Runnable() {
- @Override
- public void run() {
- mHasFinishedAnimatingIn = true;
- }
- });
- }
- });
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- }
- };
-
/** Assign this string to the view if it is not empty. */
private void setHeaderNameText(int id, int resId) {
setHeaderNameText(id, getText(resId));
@@ -325,35 +268,6 @@
}
/**
- * Assign this string to the view (if found in {@link #mPhotoContainer}), or hiding this view
- * if there is no string.
- */
- private void setHeaderText(int id, int resId) {
- setHeaderText(id, getText(resId));
- }
-
- /**
- * Assign this string to the view (if found in {@link #mPhotoContainer}), or hiding this view
- * if there is no string.
- */
- private void setHeaderText(int id, CharSequence value) {
- final View view = mPhotoContainer.findViewById(id);
- if (view instanceof TextView) {
- ((TextView)view).setText(value);
- view.setVisibility(TextUtils.isEmpty(value) ? View.GONE : View.VISIBLE);
- }
- }
-
- /** Assign this image to the view, if found in {@link #mPhotoContainer}. */
- private void setHeaderImage(int id, Drawable drawable) {
- final View view = mPhotoContainer.findViewById(id);
- if (view instanceof ImageView) {
- ((ImageView)view).setImageDrawable(drawable);
- view.setVisibility(drawable == null ? View.GONE : View.VISIBLE);
- }
- }
-
- /**
* Check if the given MIME-type appears in the list of excluded MIME-types
* that the most-recent caller requested.
*/
@@ -368,9 +282,9 @@
}
/**
- * Handle the result from the {@link #TOKEN_DATA} query.
+ * Handle the result from the ContactLoader
*/
- private void bindData(Cursor cursor) {
+ private void bindData(ContactLoader.Result data) {
final ResolveCache cache = ResolveCache.getInstance(this);
final Context context = this;
@@ -379,90 +293,63 @@
mDefaultsMap.clear();
- final DataStatus status = new DataStatus();
final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
context.getApplicationContext());
final ImageView photoView = (ImageView) mPhotoContainer.findViewById(R.id.photo);
+ final byte[] photo = data.getPhotoBinaryData();
+ if (photo != null) {
+ photoView.setImageBitmap(BitmapFactory.decodeByteArray(photo, 0, photo.length));
+ } else {
+ photoView.setImageResource(
+ ContactPhotoManager.getDefaultAvatarResId(true, false));
+ }
- Bitmap photoBitmap = null;
- while (cursor.moveToNext()) {
- // Handle any social status updates from this row
- status.possibleUpdate(cursor);
+ for (Entity entity : data.getEntities()) {
+ final ContentValues entityValues = entity.getEntityValues();
+ final String accountType = entityValues.getAsString(RawContacts.ACCOUNT_TYPE);
+ final String dataSet = entityValues.getAsString(RawContacts.DATA_SET);
+ for (NamedContentValues subValue : entity.getSubValues()) {
+ final ContentValues entryValues = subValue.values;
+ final String mimeType = entryValues.getAsString(Data.MIMETYPE);
- final String mimeType = cursor.getString(DataQuery.MIMETYPE);
+ // Skip this data item if MIME-type excluded
+ if (isMimeExcluded(mimeType)) continue;
- // Skip this data item if MIME-type excluded
- if (isMimeExcluded(mimeType)) continue;
+ final long dataId = entryValues.getAsLong(Data._ID);
+ final Integer primary = entryValues.getAsInteger(Data.IS_PRIMARY);
+ final boolean isPrimary = primary != null && primary != 0;
+ final Integer superPrimary = entryValues.getAsInteger(Data.IS_SUPER_PRIMARY);
+ final boolean isSuperPrimary = superPrimary != null && superPrimary != 0;
- final long dataId = cursor.getLong(DataQuery._ID);
- final String accountType = cursor.getString(DataQuery.ACCOUNT_TYPE);
- final String dataSet = cursor.getString(DataQuery.DATA_SET);
- final boolean isPrimary = cursor.getInt(DataQuery.IS_PRIMARY) != 0;
- final boolean isSuperPrimary = cursor.getInt(DataQuery.IS_SUPER_PRIMARY) != 0;
+ final DataKind kind =
+ accountTypes.getKindOrFallback(accountType, dataSet, mimeType);
- // Handle photos included as data row
- if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final int displayPhotoColumnIndex = cursor.getColumnIndex(Photo.PHOTO_FILE_ID);
- final boolean hasDisplayPhoto = !cursor.isNull(displayPhotoColumnIndex);
- if (hasDisplayPhoto) {
- final long displayPhotoId = cursor.getLong(displayPhotoColumnIndex);
- final Uri displayPhotoUri = ContentUris.withAppendedId(
- DisplayPhoto.CONTENT_URI, displayPhotoId);
- // Fetch and JPEG uncompress on the background thread
- new AsyncTask<Void, Void, Bitmap>() {
- @Override
- protected Bitmap doInBackground(Void... params) {
- try {
- AssetFileDescriptor fd = getContentResolver()
- .openAssetFileDescriptor(displayPhotoUri, "r");
- return BitmapFactory.decodeStream(fd.createInputStream());
- } catch (IOException e) {
- Log.e(TAG, "Error getting display photo. Ignoring, as we already " +
- "have the thumbnail", e);
- return null;
- }
+ if (kind != null) {
+ // Build an action for this data entry, find a mapping to a UI
+ // element, build its summary from the cursor, and collect it
+ // along with all others of this MIME-type.
+ final Action action = new DataAction(context, mimeType, kind, dataId,
+ entryValues);
+ final boolean wasAdded = considerAdd(action, cache);
+ if (wasAdded) {
+ // Remember the default
+ if (isSuperPrimary || (isPrimary && (mDefaultsMap.get(mimeType) == null))) {
+ mDefaultsMap.put(mimeType, action);
}
-
- @Override
- protected void onPostExecute(Bitmap result) {
- if (result == null) return;
- photoView.setImageBitmap(result);
- }
- }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
- }
- final int photoColumnIndex = cursor.getColumnIndex(Photo.PHOTO);
- final byte[] photoBlob = cursor.getBlob(photoColumnIndex);
- if (photoBlob != null) {
- photoBitmap = BitmapFactory.decodeByteArray(photoBlob, 0, photoBlob.length);
- }
- continue;
- }
-
- final DataKind kind = accountTypes.getKindOrFallback(accountType, dataSet, mimeType);
-
- if (kind != null) {
- // Build an action for this data entry, find a mapping to a UI
- // element, build its summary from the cursor, and collect it
- // along with all others of this MIME-type.
- final Action action = new DataAction(context, mimeType, kind, dataId, cursor);
- final boolean wasAdded = considerAdd(action, cache);
- if (wasAdded) {
- // Remember the default
- if (isSuperPrimary || (isPrimary && (mDefaultsMap.get(mimeType) == null))) {
- mDefaultsMap.put(mimeType, action);
}
}
- }
- // Handle Email rows with presence data as Im entry
- final boolean hasPresence = !cursor.isNull(DataQuery.PRESENCE);
- if (hasPresence && Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final DataKind imKind = accountTypes.getKindOrFallback(accountType, dataSet,
- Im.CONTENT_ITEM_TYPE);
- if (imKind != null) {
- final DataAction action = new DataAction(context, Im.CONTENT_ITEM_TYPE, imKind,
- dataId, cursor);
- considerAdd(action, cache);
+ // Handle Email rows with presence data as Im entry
+ final DataStatus status = data.getStatuses().get(dataId);
+ if (status != null && Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ final DataKind imKind = accountTypes.getKindOrFallback(accountType, dataSet,
+ Im.CONTENT_ITEM_TYPE);
+ if (imKind != null) {
+ final DataAction action = new DataAction(context, Im.CONTENT_ITEM_TYPE,
+ imKind, dataId, entryValues);
+ action.setPresence(status.getPresence());
+ considerAdd(action, cache);
+ }
}
}
}
@@ -472,20 +359,7 @@
Collapser.collapseList(actionChildren);
}
- if (cursor.moveToLast()) {
- // Read contact name from last data row
- final String name = cursor.getString(DataQuery.DISPLAY_NAME);
- setHeaderNameText(R.id.name, name);
- }
-
- if (photoView != null) {
- // Place photo when discovered in data, otherwise show generic avatar
- if (photoBitmap != null) {
- photoView.setImageBitmap(photoBitmap);
- } else {
- photoView.setImageResource(ContactPhotoManager.getDefaultAvatarResId(true, false));
- }
- }
+ setHeaderNameText(R.id.name, data.getDisplayName());
// All the mime-types to add.
final Set<String> containedTypes = new HashSet<String>(mActions.keySet());
@@ -515,6 +389,7 @@
}
// Add buttons for each mimetype
+ mTrack.removeAllViews();
for (String mimeType : mSortedActionMimeTypes) {
final View actionView = inflateAction(mimeType, cache, mTrack);
mTrack.addView(actionView);
@@ -574,6 +449,61 @@
listFragment.setListener(mListFragmentListener);
}
+ private LoaderCallbacks<ContactLoader.Result> mLoaderCallbacks =
+ new LoaderCallbacks<ContactLoader.Result>() {
+ @Override
+ public void onLoaderReset(Loader<ContactLoader.Result> loader) {
+ }
+
+ @Override
+ public void onLoadFinished(Loader<ContactLoader.Result> loader, ContactLoader.Result data) {
+ if (isFinishing()) {
+ hide(false);
+ return;
+ }
+ if (data.isError()) {
+ // This shouldn't ever happen, so throw an exception. The {@link ContactLoader}
+ // should log the actual exception.
+ throw new IllegalStateException("Failed to load contact", data.getException());
+ }
+ if (data.isNotFound()) {
+ Log.i(TAG, "No contact found: " + ((ContactLoader)loader).getLookupUri());
+ Toast.makeText(QuickContactActivity.this, R.string.invalidContactMessage,
+ Toast.LENGTH_LONG).show();
+ hide(false);
+ return;
+ }
+
+ bindData(data);
+
+ if (TRACE_LAUNCH) {
+ android.os.Debug.stopMethodTracing();
+ }
+
+ // Data bound and ready, pull curtain to show. Put this on the Handler to ensure
+ // that the layout passes are completed
+ new Handler().post(new Runnable() {
+ @Override
+ public void run() {
+ mFloatingLayout.showChild(new Runnable() {
+ @Override
+ public void run() {
+ mHasFinishedAnimatingIn = true;
+ }
+ });
+ }
+ });
+ }
+
+ @Override
+ public Loader<ContactLoader.Result> onCreateLoader(int id, Bundle args) {
+ if (mLookupUri == null) {
+ Log.wtf(TAG, "Lookup uri wasn't initialized. Loader was started too early");
+ }
+ return new ContactLoader(getApplicationContext(), mLookupUri);
+ }
+ };
+
/** A type (e.g. Call/Addresses was clicked) */
private final OnClickListener mTypeViewClickListener = new OnClickListener() {
@Override
@@ -653,53 +583,4 @@
new Handler().post(startAppRunnable);
}
};
-
- private interface DataQuery {
- final String[] PROJECTION = new String[] {
- Data._ID,
-
- RawContacts.ACCOUNT_TYPE,
- RawContacts.DATA_SET,
- Contacts.STARRED,
- Contacts.DISPLAY_NAME,
-
- Data.STATUS,
- Data.STATUS_RES_PACKAGE,
- Data.STATUS_ICON,
- Data.STATUS_LABEL,
- Data.STATUS_TIMESTAMP,
- Data.PRESENCE,
- Data.CHAT_CAPABILITY,
-
- Data.RES_PACKAGE,
- Data.MIMETYPE,
- Data.IS_PRIMARY,
- Data.IS_SUPER_PRIMARY,
- Data.RAW_CONTACT_ID,
-
- Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5,
- Data.DATA6, Data.DATA7, Data.DATA8, Data.DATA9, Data.DATA10, Data.DATA11,
- Data.DATA12, Data.DATA13, Data.DATA14, Data.DATA15,
- };
-
- final int _ID = 0;
-
- final int ACCOUNT_TYPE = 1;
- final int DATA_SET = 2;
- final int STARRED = 3;
- final int DISPLAY_NAME = 4;
-
- final int STATUS = 5;
- final int STATUS_RES_PACKAGE = 6;
- final int STATUS_ICON = 7;
- final int STATUS_LABEL = 8;
- final int STATUS_TIMESTAMP = 9;
- final int PRESENCE = 10;
- final int CHAT_CAPABILITY = 11;
-
- final int RES_PACKAGE = 12;
- final int MIMETYPE = 13;
- final int IS_PRIMARY = 14;
- final int IS_SUPER_PRIMARY = 15;
- }
}
diff --git a/src/com/android/contacts/quickcontact/QuickContactListFragment.java b/src/com/android/contacts/quickcontact/QuickContactListFragment.java
index c6187e9..117480a 100644
--- a/src/com/android/contacts/quickcontact/QuickContactListFragment.java
+++ b/src/com/android/contacts/quickcontact/QuickContactListFragment.java
@@ -16,14 +16,14 @@
package com.android.contacts.quickcontact;
+import com.android.contacts.ContactPresenceIconUtil;
import com.android.contacts.R;
import android.app.Fragment;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -31,7 +31,7 @@
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
-import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
import android.widget.ListView;
import android.widget.TextView;
@@ -41,7 +41,7 @@
public class QuickContactListFragment extends Fragment {
private ListView mListView;
private List<Action> mActions;
- private LinearLayout mFragmentContainer;
+ private RelativeLayout mFragmentContainer;
private Listener mListener;
public QuickContactListFragment() {
@@ -50,7 +50,7 @@
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
- mFragmentContainer = (LinearLayout) inflater.inflate(R.layout.quickcontact_list_fragment,
+ mFragmentContainer = (RelativeLayout) inflater.inflate(R.layout.quickcontact_list_fragment,
container, false);
mListView = (ListView) mFragmentContainer.findViewById(R.id.list);
mListView.setItemsCanFocus(true);
@@ -111,6 +111,8 @@
final ImageView alternateActionButton = (ImageView) resultView.findViewById(
R.id.secondary_action_button);
final View alternateActionDivider = resultView.findViewById(R.id.vertical_divider);
+ final ImageView presenceIconView =
+ (ImageView) resultView.findViewById(R.id.presence_icon);
actionsContainer.setOnClickListener(mPrimaryActionClickListener);
actionsContainer.setTag(action);
@@ -143,6 +145,14 @@
text2.setVisibility(View.VISIBLE);
}
}
+ final Drawable presenceIcon = ContactPresenceIconUtil.getPresenceIcon(
+ getActivity(), action.getPresence());
+ if (presenceIcon != null) {
+ presenceIconView.setImageDrawable(presenceIcon);
+ presenceIconView.setVisibility(View.VISIBLE);
+ } else {
+ presenceIconView.setVisibility(View.GONE);
+ }
return resultView;
}
});
diff --git a/src/com/android/contacts/util/AccountFilterUtil.java b/src/com/android/contacts/util/AccountFilterUtil.java
index 955c195..d63db55 100644
--- a/src/com/android/contacts/util/AccountFilterUtil.java
+++ b/src/com/android/contacts/util/AccountFilterUtil.java
@@ -118,22 +118,26 @@
*
* @param activity
* @param requestCode requestCode for {@link Activity#startActivityForResult(Intent, int)}
+ * @param currentFilter currently-selected filter, so that it can be displayed as activated.
*/
public static void startAccountFilterActivityForResult(
- Activity activity, int requestCode) {
+ Activity activity, int requestCode, ContactListFilter currentFilter) {
final Intent intent = new Intent(activity, AccountFilterActivity.class);
+ intent.putExtra(AccountFilterActivity.KEY_EXTRA_CURRENT_FILTER, currentFilter);
activity.startActivityForResult(intent, requestCode);
}
/**
- * Very similar to {@link #startAccountFilterActivityForResult(Activity, int)} but uses
- * Fragment instead.
+ * Very similar to
+ * {@link #startAccountFilterActivityForResult(Activity, int, ContactListFilter)}
+ * but uses Fragment instead.
*/
public static void startAccountFilterActivityForResult(
- Fragment fragment, int requestCode) {
+ Fragment fragment, int requestCode, ContactListFilter currentFilter) {
final Activity activity = fragment.getActivity();
if (activity != null) {
final Intent intent = new Intent(activity, AccountFilterActivity.class);
+ intent.putExtra(AccountFilterActivity.KEY_EXTRA_CURRENT_FILTER, currentFilter);
fragment.startActivityForResult(intent, requestCode);
} else {
Log.w(TAG, "getActivity() returned null. Ignored");
diff --git a/src/com/android/contacts/vcard/CancelActivity.java b/src/com/android/contacts/vcard/CancelActivity.java
index c890607..5dafa53 100644
--- a/src/com/android/contacts/vcard/CancelActivity.java
+++ b/src/com/android/contacts/vcard/CancelActivity.java
@@ -87,17 +87,13 @@
protected Dialog onCreateDialog(int id, Bundle bundle) {
switch (id) {
case R.id.dialog_cancel_confirmation: {
- final String title;
final String message;
if (mType == VCardService.TYPE_IMPORT) {
- title = getString(R.string.cancel_import_confirmation_title);
message = getString(R.string.cancel_import_confirmation_message, mDisplayName);
} else {
- title = getString(R.string.cancel_export_confirmation_title);
message = getString(R.string.cancel_export_confirmation_message, mDisplayName);
}
final AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setTitle(title)
.setMessage(message)
.setPositiveButton(android.R.string.ok, new RequestCancelListener())
.setOnCancelListener(mCancelListener)
diff --git a/src/com/android/contacts/vcard/ExportVCardActivity.java b/src/com/android/contacts/vcard/ExportVCardActivity.java
index c36cc38..f38c9df 100644
--- a/src/com/android/contacts/vcard/ExportVCardActivity.java
+++ b/src/com/android/contacts/vcard/ExportVCardActivity.java
@@ -235,7 +235,6 @@
case R.id.dialog_sdcard_not_found: {
mProcessOngoing = false;
return new AlertDialog.Builder(this)
- .setTitle(R.string.no_sdcard_title)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(R.string.no_sdcard_message)
.setPositiveButton(android.R.string.ok, this).create();
diff --git a/src/com/android/contacts/vcard/ImportVCardActivity.java b/src/com/android/contacts/vcard/ImportVCardActivity.java
index 18b9cc1..2dc92af 100644
--- a/src/com/android/contacts/vcard/ImportVCardActivity.java
+++ b/src/com/android/contacts/vcard/ImportVCardActivity.java
@@ -901,10 +901,9 @@
}
case R.id.dialog_searching_vcard: {
if (mProgressDialogForScanVCard == null) {
- String title = getString(R.string.searching_vcard_title);
String message = getString(R.string.searching_vcard_message);
mProgressDialogForScanVCard =
- ProgressDialog.show(this, title, message, true, false);
+ ProgressDialog.show(this, "", message, true, false);
mProgressDialogForScanVCard.setOnCancelListener(mVCardScanThread);
mVCardScanThread.start();
}
@@ -912,7 +911,6 @@
}
case R.id.dialog_sdcard_not_found: {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setTitle(R.string.no_sdcard_title)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(R.string.no_sdcard_message)
.setOnCancelListener(mCancelListener)
@@ -922,7 +920,6 @@
case R.id.dialog_vcard_not_found: {
final String message = getString(R.string.import_failure_no_vcard_file);
AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setTitle(R.string.scanning_sdcard_failed_title)
.setMessage(message)
.setOnCancelListener(mCancelListener)
.setPositiveButton(android.R.string.ok, mCancelListener);
@@ -954,7 +951,6 @@
String message = (getString(R.string.scanning_sdcard_failed_message,
getString(R.string.fail_reason_io_error)));
AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setTitle(R.string.scanning_sdcard_failed_title)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(message)
.setOnCancelListener(mCancelListener)
diff --git a/src/com/android/contacts/vcard/NfcImportVCardActivity.java b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
index d182cfd..c3a55d2 100644
--- a/src/com/android/contacts/vcard/NfcImportVCardActivity.java
+++ b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
@@ -154,25 +154,20 @@
if (!NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Log.w(TAG, "Unknowon intent " + intent);
finish();
- }
-
- NdefMessage msg = (NdefMessage) intent.getParcelableArrayExtra(
- NfcAdapter.EXTRA_NDEF_MESSAGES)[0];
- NdefRecord records[] = msg.getRecords();
- if (records == null || records.length == 0) {
- Log.w(TAG, "No records " + intent);
- finish();
- }
-
- NdefRecord record = records[0];
- String type = new String(record.getType(), Charset.forName("UTF8"));
- if (record.getTnf() != NdefRecord.TNF_MIME_MEDIA ||
- (!"text/x-vcard".equalsIgnoreCase(type) && !"text/vcard".equals(type))) {
- Log.w(TAG, "Not a vcard");
- //setStatus(getString(R.string.fail_reason_not_supported));
return;
}
- mRecord = record;
+
+ String type = intent.getType();
+ if (type == null ||
+ (!"text/x-vcard".equals(type) && !"text/vcard".equals(type))) {
+ Log.w(TAG, "Not a vcard");
+ //setStatus(getString(R.string.fail_reason_not_supported));
+ finish();
+ return;
+ }
+ NdefMessage msg = (NdefMessage) intent.getParcelableArrayExtra(
+ NfcAdapter.EXTRA_NDEF_MESSAGES)[0];
+ mRecord = msg.getRecords()[0];
final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
diff --git a/src/com/android/contacts/widget/CompositeListAdapter.java b/src/com/android/contacts/widget/CompositeListAdapter.java
index 692e073..610b97f 100644
--- a/src/com/android/contacts/widget/CompositeListAdapter.java
+++ b/src/com/android/contacts/widget/CompositeListAdapter.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.widget;
+import com.android.contacts.test.NeededForTesting;
import com.google.common.annotations.VisibleForTesting;
import android.database.DataSetObserver;
@@ -27,7 +28,11 @@
* A general purpose adapter that is composed of multiple sub-adapters. It just
* appends them in the order they are added. It listens to changes from all
* sub-adapters and propagates them to its own listeners.
+ *
+ * This class not used for now -- but let's keep running the test in case we want to revive it...
+ * (So NeededForTesting)
*/
+@NeededForTesting
public class CompositeListAdapter extends BaseAdapter {
private static final int INITIAL_CAPACITY = 2;
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 6ea42d6..2806830 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -119,6 +119,9 @@
android:name="android.provider.CONTACTS_STRUCTURE"
android:resource="@xml/test_basic_contacts" />
</service>
+
+ <service android:name=".QueryService" />
+ <service android:name=".PhoneNumberTestService" />
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
diff --git a/tests/res/drawable/ic_contact_picture.png b/tests/res/drawable/ic_contact_picture.png
index 3a338e8..6876777 100644
--- a/tests/res/drawable/ic_contact_picture.png
+++ b/tests/res/drawable/ic_contact_picture.png
Binary files differ
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index 19ebde3..c3cbc10 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -23,7 +23,7 @@
<!-- List modes -->
<item>LIST_DEFAULT</item>
<item>LIST_ALL_CONTACTS_ACTION</item>
- <item>LIST_CONTACTS_WITH_PHONES_ACTION</item>
+ <item>LIST_CONTACTS_WITH_PHONES_ACTION (deprecated)</item>
<item>LIST_STARRED_ACTION</item>
<item>LIST_FREQUENT_ACTION</item>
<item>LIST_STREQUENT_ACTION</item>
diff --git a/tests/src/com/android/contacts/activities/PeopleActivityTest.java b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
index 66c2c5a..ea7c3dc 100644
--- a/tests/src/com/android/contacts/activities/PeopleActivityTest.java
+++ b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
@@ -48,7 +48,7 @@
import android.provider.ContactsContract.ProviderStatus;
import android.provider.Settings;
import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.Smoke;
+import android.test.suitebuilder.annotation.SmallTest;
import android.widget.TextView;
/**
@@ -64,7 +64,7 @@
* -w com.android.contacts.tests/android.test.InstrumentationTestRunner
*
*/
-@Smoke
+@SmallTest
public class PeopleActivityTest
extends ActivityInstrumentationTestCase2<PeopleActivity>
{
diff --git a/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java b/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
index 9cac8fe..89c0a99 100644
--- a/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
@@ -619,14 +619,14 @@
/** Asserts that the number and label text view contains the given text. */
private void assertNumberAndLabelAre(CallLogListItemViews views, CharSequence number,
- CharSequence numberLabel) {
+ CharSequence label) {
assertEquals(View.VISIBLE, views.phoneCallDetailsViews.numberView.getVisibility());
- final CharSequence expectedText;
- if (numberLabel == null) {
- expectedText = number;
- } else {
- expectedText = numberLabel + " " + number;
+ assertEquals(number, views.phoneCallDetailsViews.numberView.getText().toString());
+
+ assertEquals(label == null ? View.GONE : View.VISIBLE,
+ views.phoneCallDetailsViews.labelView.getVisibility());
+ if (label != null) {
+ assertEquals(label, views.phoneCallDetailsViews.labelView.getText().toString());
}
- assertEquals(expectedText, views.phoneCallDetailsViews.numberView.getText().toString());
}
}
diff --git a/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java b/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
index 19b14d9..131af96 100644
--- a/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
+++ b/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
@@ -21,6 +21,7 @@
import com.google.common.collect.Lists;
import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
import java.util.ArrayList;
@@ -33,6 +34,7 @@
/**
* Unit tests for {@link StreamItemAdapter}.
*/
+@SmallTest
public class StreamItemAdapterTest extends AndroidTestCase {
private StreamItemAdapter mAdapter;
private FakeOnClickListener mListener;
diff --git a/tests/src/com/android/contacts/format/PrefixHighligherTest.java b/tests/src/com/android/contacts/format/PrefixHighligherTest.java
index a0c0ff3..668330b 100644
--- a/tests/src/com/android/contacts/format/PrefixHighligherTest.java
+++ b/tests/src/com/android/contacts/format/PrefixHighligherTest.java
@@ -17,11 +17,13 @@
package com.android.contacts.format;
import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
import android.widget.TextView;
/**
* Unit tests for {@link PrefixHighlighter}.
*/
+@SmallTest
public class PrefixHighligherTest extends AndroidTestCase {
private static final int TEST_PREFIX_HIGHLIGHT_COLOR = 0xFF0000;
/** The HTML code used to mark the start of the highlighted part. */
diff --git a/tests/src/com/android/contacts/format/SpannedTestUtils.java b/tests/src/com/android/contacts/format/SpannedTestUtils.java
index 625c6aa..646a7ec 100644
--- a/tests/src/com/android/contacts/format/SpannedTestUtils.java
+++ b/tests/src/com/android/contacts/format/SpannedTestUtils.java
@@ -16,6 +16,7 @@
package com.android.contacts.format;
+import android.test.suitebuilder.annotation.SmallTest;
import android.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
@@ -26,6 +27,7 @@
/**
* Utility class to check the value of spanned text in text views.
*/
+@SmallTest
public class SpannedTestUtils {
/**
* Checks that the text contained in the text view matches the given HTML text.
diff --git a/tests/src/com/android/contacts/format/TestTextWithHighlightingFactory.java b/tests/src/com/android/contacts/format/TestTextWithHighlightingFactory.java
index f2848d0..2deaef3 100644
--- a/tests/src/com/android/contacts/format/TestTextWithHighlightingFactory.java
+++ b/tests/src/com/android/contacts/format/TestTextWithHighlightingFactory.java
@@ -21,10 +21,12 @@
import android.database.CharArrayBuffer;
import android.graphics.Typeface;
+import android.test.suitebuilder.annotation.SmallTest;
import android.text.SpannableStringBuilder;
import android.text.style.StyleSpan;
/** A factory for {@link TextWithHighlighting} that wraps its parts in italics. */
+@SmallTest
public final class TestTextWithHighlightingFactory implements TextWithHighlightingFactory {
/** A {@link TextWithHighlighting} implementation that wraps its parts in italics. */
private final static class TestTextWithHighlighting extends SpannableStringBuilder
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index 2c4b74c..b37d24f 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -35,7 +35,7 @@
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Contacts.Entity;
import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.Smoke;
+import android.test.suitebuilder.annotation.SmallTest;
/**
* Tests for {@link ContactDeletionInteraction}.
@@ -47,7 +47,7 @@
* adb shell am instrument \
* -w com.android.contacts.tests/android.test.InstrumentationTestRunner
*/
-@Smoke
+@SmallTest
public class ContactDeletionInteractionTest
extends ActivityInstrumentationTestCase2<FragmentTestActivity> {
diff --git a/tests/src/com/android/contacts/interactions/PhoneNumberInteractionTest.java b/tests/src/com/android/contacts/interactions/PhoneNumberInteractionTest.java
index e0b443a..2da8859 100644
--- a/tests/src/com/android/contacts/interactions/PhoneNumberInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/PhoneNumberInteractionTest.java
@@ -29,11 +29,12 @@
import android.net.Uri;
import android.os.AsyncTask;
import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.Smoke;
+import android.test.suitebuilder.annotation.SmallTest;
import java.util.ArrayList;
import java.util.List;
@@ -48,7 +49,7 @@
* adb shell am instrument \
* -w com.android.contacts.tests/android.test.InstrumentationTestRunner
*/
-@Smoke
+@SmallTest
public class PhoneNumberInteractionTest extends InstrumentationTestCase {
static {
@@ -89,7 +90,8 @@
public void testSendSmsWhenOnlyOneNumberAvailable() {
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
expectQuery(contactUri)
- .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null);
+ .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null,
+ Phone.CONTENT_ITEM_TYPE);
TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
mContext, InteractionType.SMS, null);
@@ -107,7 +109,8 @@
public void testSendSmsWhenDataIdIsProvided() {
Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, 1);
expectQuery(dataUri, true /* isDataUri */ )
- .returnRow(1, "987", 0, null, null, Phone.TYPE_HOME, null);
+ .returnRow(1, "987", 0, null, null, Phone.TYPE_HOME, null,
+ Phone.CONTENT_ITEM_TYPE);
TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
mContext, InteractionType.SMS, null);
@@ -125,8 +128,10 @@
public void testSendSmsWhenThereIsPrimaryNumber() {
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
expectQuery(contactUri)
- .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null)
- .returnRow(2, "456", 1, null, null, Phone.TYPE_HOME, null);
+ .returnRow(
+ 1, "123", 0, null, null, Phone.TYPE_HOME, null, Phone.CONTENT_ITEM_TYPE)
+ .returnRow(
+ 2, "456", 1, null, null, Phone.TYPE_HOME, null, Phone.CONTENT_ITEM_TYPE);
TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
mContext, InteractionType.SMS, null);
@@ -164,8 +169,10 @@
public void testCallNumberWhenThereAreDuplicates() {
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
expectQuery(contactUri)
- .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null)
- .returnRow(2, "123", 0, null, null, Phone.TYPE_WORK, null);
+ .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null,
+ Phone.CONTENT_ITEM_TYPE)
+ .returnRow(2, "123", 0, null, null, Phone.TYPE_WORK, null,
+ Phone.CONTENT_ITEM_TYPE);
TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
mContext, InteractionType.PHONE_CALL, null);
@@ -180,11 +187,31 @@
assertEquals("tel:123", intent.getDataString());
}
+ public void testCallWithSip() {
+ Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
+ expectQuery(contactUri)
+ .returnRow(1, "example@example.com", 0, null, null, Phone.TYPE_HOME, null,
+ SipAddress.CONTENT_ITEM_TYPE);
+ TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
+ mContext, InteractionType.PHONE_CALL, null);
+
+ interaction.startInteraction(contactUri);
+ interaction.getLoader().waitForLoader();
+
+ Intent intent = mContext.getIntentForStartActivity();
+ assertNotNull(intent);
+
+ assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
+ assertEquals("sip:example%40example.com", intent.getDataString());
+ }
+
public void testShowDisambigDialogForCalling() {
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
expectQuery(contactUri)
- .returnRow(1, "123", 0, "account", null, Phone.TYPE_HOME, "label")
- .returnRow(2, "456", 0, null, null, Phone.TYPE_WORK, null);
+ .returnRow(1, "123", 0, "account", null, Phone.TYPE_HOME, "label",
+ Phone.CONTENT_ITEM_TYPE)
+ .returnRow(2, "456", 0, null, null, Phone.TYPE_WORK, null,
+ Phone.CONTENT_ITEM_TYPE);
TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
mContext, InteractionType.PHONE_CALL, null);
@@ -224,7 +251,9 @@
RawContacts.ACCOUNT_TYPE,
RawContacts.DATA_SET,
Phone.TYPE,
- Phone.LABEL)
- .withSelection("mimetype='vnd.android.cursor.item/phone_v2' AND data1 NOT NULL");
+ Phone.LABEL,
+ Phone.MIMETYPE)
+ .withSelection("mimetype IN ('vnd.android.cursor.item/phone_v2',"
+ + " 'vnd.android.cursor.item/sip_address') AND data1 NOT NULL");
}
}
diff --git a/tests/src/com/android/contacts/tests/PhoneNumberTestService.java b/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
new file mode 100644
index 0000000..894e66e
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.tests;
+
+import com.android.i18n.phonenumbers.NumberParseException;
+import com.android.i18n.phonenumbers.PhoneNumberUtil;
+import com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
+import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
+
+import android.app.IntentService;
+import android.content.Context;
+import android.content.Intent;
+import android.location.CountryDetector;
+import android.telephony.PhoneNumberUtils;
+import android.util.Log;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * A service to test various phone number formatters.
+ *
+ Usage:
+ adb shell am startservice -e n PHONE_NUMBER \
+ [-e c OPTIONAL COUNTRY CODE] \
+ com.android.contacts.tests/.PhoneNumberTestService
+
+ Example:
+
+ adb shell am startservice -e n '6502530000' \
+ com.android.contacts.tests/.PhoneNumberTestService
+ */
+public class PhoneNumberTestService extends IntentService {
+ private static final String TAG = "phonenumber";
+
+ private static final String EXTRA_PHONE_NUMBER = "n";
+ private static final String EXTRA_COUNTRY_CODE = "c";
+
+ public PhoneNumberTestService() {
+ super("PhoneNumberTestService");
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+ final String number = intent.getStringExtra(EXTRA_PHONE_NUMBER);
+ final String country = intent.getStringExtra(EXTRA_COUNTRY_CODE);
+ final String defaultCountry = getCurrentCountryCode();
+
+ Log.i(TAG, "Input phone number: " + number);
+ Log.i(TAG, "Input country code: " + country);
+ Log.i(TAG, "Current country code: " + defaultCountry);
+
+ // Dump for the given country, the current country, US, GB and JP.
+ Set<String> countries = new LinkedHashSet<String>();
+ if (country != null) countries.add(country);
+ countries.add(defaultCountry);
+ countries.add("US");
+ countries.add("GB");
+ countries.add("JP");
+
+ for (String c : countries) {
+ dump(number, c);
+ }
+ }
+
+ private void dump(String number, String country) {
+ Log.i(TAG, "Result for: " + number + " / " +country);
+ dump_PhoneNumberUtils_formatNumberToE164(number, country);
+ dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.E164);
+ dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.INTERNATIONAL);
+ dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.NATIONAL);
+ dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.RFC3966);
+ }
+
+ private void dump_PhoneNumberUtils_formatNumberToE164(String number, String country) {
+ Log.i(TAG, " formatNumberToE164(" + number + ", " + country
+ + ") = " + PhoneNumberUtils.formatNumberToE164(number, country));
+ }
+
+ private void dump_PhoneNumberUtil_format(String number, String country,
+ PhoneNumberFormat format) {
+ String formatted;
+ boolean isValid = false;
+ try {
+ final PhoneNumberUtil util = PhoneNumberUtil.getInstance();
+ final PhoneNumber pn = util.parse(number, country);
+ isValid = util.isValidNumber(pn);
+ formatted = util.format(pn, format);
+ } catch (NumberParseException e) {
+ formatted = "Error: " + e.toString();
+ }
+ Log.i(TAG, " PhoneNumberUtil.format(parse(" + number + ", " + country + "), " + format
+ + ") = " + formatted + (isValid ? " (valid)" : " (invalid)"));
+ }
+
+ private String getCurrentCountryCode() {
+ final CountryDetector countryDetector =
+ (CountryDetector) getSystemService(Context.COUNTRY_DETECTOR);
+ return countryDetector.detectCountry().getCountryIso();
+ }
+}
+
diff --git a/tests/src/com/android/contacts/tests/QueryService.java b/tests/src/com/android/contacts/tests/QueryService.java
new file mode 100644
index 0000000..04a95c5
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/QueryService.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.tests;
+
+import android.app.IntentService;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.text.TextUtils;
+import android.util.Log;
+
+/**
+ * A service that executes a query specified by an intent and dump the result on logcat. Use the
+ * "am" command to launch it.
+ *
+ Usage:
+ adb shell am startservice -d URI \
+ [-e p OPTIONAL PROJECTION] [-e s OPTIONAL SELECTION] [-e s OPTIONAL ORDER BY] \
+ com.android.contacts.tests/.QueryService
+
+ Example:
+
+ adb shell am startservice -d content://com.android.contacts/directories \
+ -e p accountName,accountType -e s 'accountName NOT NULL' -e o '_id' \
+ com.android.contacts.tests/.QueryService
+ */
+public class QueryService extends IntentService {
+ private static final String TAG = "contactsquery";
+
+ private static final String EXTRA_PROJECTION = "p";
+ private static final String EXTRA_SELECTION = "s";
+ private static final String EXTRA_ORDER = "o";
+ private static final String NULL_STRING = "*null*";
+ private static final String SEPARATOR = "|";
+
+ public QueryService() {
+ super("ContactsQueryService");
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+ final Uri uri = intent.getData();
+ // Unfortunately "am" doesn't support string arrays...
+ final String projection = intent.getStringExtra(EXTRA_PROJECTION);
+ final String selection = intent.getStringExtra(EXTRA_SELECTION);
+ final String order = intent.getStringExtra(EXTRA_ORDER);
+
+ Log.i(TAG, "URI: " + uri);
+ Log.i(TAG, "Projection: " + projection);
+ Log.i(TAG, "Selection: " + selection);
+
+ try {
+ Cursor c = getContentResolver().query(uri, parseProjection(projection), selection, null,
+ order);
+ if (c == null) {
+ Log.i(TAG, "(no results)");
+ return;
+ }
+ StringBuilder sb = new StringBuilder();
+ try {
+ Log.i(TAG, "Result count: " + c.getCount());
+
+ final int columnCount = c.getColumnCount();
+
+ sb.setLength(0);
+ for (int i = 0; i < columnCount; i++) {
+ add(sb, c.getColumnName(i));
+ }
+ Log.i(TAG, sb.toString());
+
+ c.moveToPosition(-1);
+ while (c.moveToNext()) {
+ sb.setLength(0);
+ for (int i = 0; i < columnCount; i++) {
+ add(sb, c.getString(i));
+ }
+ Log.i(TAG, sb.toString());
+ }
+ } finally {
+ c.close();
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Exeption while executing query", e);
+ }
+ }
+
+ private StringBuilder add(StringBuilder sb, String s) {
+ if (sb.length() > 0) {
+ sb.append(SEPARATOR);
+ }
+ sb.append(s == null ? NULL_STRING : s);
+ return sb;
+ }
+
+ private static String[] parseProjection(String projectionString) {
+ if (TextUtils.isEmpty(projectionString)) {
+ return null; // all columns
+ }
+ final String[] columns = projectionString.split(",");
+ if (columns.length == 0) {
+ return null; // all columns
+ }
+ return columns;
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 555b339..0d9383f 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -290,11 +290,15 @@
break;
}
case ACTION_SEARCH_EMAIL: {
- Toast.makeText(this, "Unsupported", Toast.LENGTH_SHORT).show();
+ Intent intent = new Intent(Intent.ACTION_SEARCH);
+ intent.putExtra(Insert.EMAIL, "a");
+ startSearchResultActivity(intent);
break;
}
case ACTION_SEARCH_PHONE: {
- Toast.makeText(this, "Unsupported", Toast.LENGTH_SHORT).show();
+ Intent intent = new Intent(Intent.ACTION_SEARCH);
+ intent.putExtra(Insert.PHONE, "800");
+ startSearchResultActivity(intent);
break;
}
case SEARCH_SUGGESTION_CLICKED_CALL_BUTTON: {
diff --git a/tests/src/com/android/contacts/tests/mocks/MockContactPhotoManager.java b/tests/src/com/android/contacts/tests/mocks/MockContactPhotoManager.java
index 51c665f..67b7c0c 100644
--- a/tests/src/com/android/contacts/tests/mocks/MockContactPhotoManager.java
+++ b/tests/src/com/android/contacts/tests/mocks/MockContactPhotoManager.java
@@ -18,6 +18,7 @@
import com.android.contacts.ContactPhotoManager;
+import android.graphics.Bitmap;
import android.net.Uri;
import android.widget.ImageView;
@@ -56,6 +57,10 @@
}
@Override
+ public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
+ }
+
+ @Override
public void preloadPhotosInBackground() {
}
}