merge ics-mr0
Change-Id: I0d13daafacf6724d0a742711db8526208f6e66a8
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 219ff67..2877820 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -56,19 +56,6 @@
android:hardwareAccelerated="true"
>
- <!-- A list of recent calls -->
- <activity android:name=".activities.CallLogActivity"
- android:label="@string/recentCallsIconLabel"
- android:theme="@style/DialtactsTheme"
- android:uiOptions="splitActionBarWhenNarrow"
- >
- <intent-filter>
- <action android:name="com.android.phone.action.RECENT_CALLS" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
- </intent-filter>
- </activity>
-
<!-- Intercept Dialer Intents for devices without a phone.
This activity should have the same intent filters as the DialtactsActivity,
so that its capturing the same events. Omit android.intent.category.LAUNCHER, because we
@@ -133,7 +120,7 @@
android:screenOrientation="nosensor"
android:enabled="@*android:bool/config_voice_capable"
android:taskAffinity="android.task.contacts.phone"
- android:windowSoftInputMode="stateAlwaysHidden">
+ android:windowSoftInputMode="stateAlwaysHidden|adjustNothing">
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
@@ -182,6 +169,11 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.TAB" />
</intent-filter>
+ <intent-filter android:label="@string/recentCallsIconLabel">
+ <action android:name="com.android.phone.action.RECENT_CALLS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.TAB" />
+ </intent-filter>
</activity>
<!-- The main Contacts activity with the contact list, favorites, and groups. -->
@@ -274,7 +266,7 @@
android:theme="@style/ContactPickerTheme"
android:launchMode="singleTop"
android:clearTaskOnLaunch="true"
- >
+ android:uiOptions="splitActionBarWhenNarrow">
<intent-filter>
<action android:name="android.intent.action.INSERT_OR_EDIT" />
<category android:name="android.intent.category.DEFAULT" />
@@ -330,6 +322,18 @@
android:exported="true"
/>
+ <!-- Backwards compatibility: "Call log" from Gingerbread and earlier -->
+ <activity-alias android:name="RecentCallsListActivity"
+ android:targetActivity=".activities.DialtactsActivity"
+ android:exported="true"
+ />
+
+ <!-- Backwards compatibility: "Call log" from ICS -->
+ <activity-alias android:name=".activities.CallLogActivity"
+ android:targetActivity=".activities.DialtactsActivity"
+ android:exported="true"
+ />
+
<!-- An activity for joining contacts -->
<activity android:name=".activities.JoinContactActivity"
android:theme="@style/JoinContactActivityTheme"
@@ -409,26 +413,6 @@
</intent-filter>
</activity>
- <!-- Flushes the QuickContact IntentCache -->
- <receiver android:name=".quickcontact.PackageIntentReceiver">
- <intent-filter>
- <action android:name="android.intent.action.PACKAGE_ADDED" />
- <data android:scheme="package" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.PACKAGE_REPLACED" />
- <data android:scheme="package" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.PACKAGE_REMOVED" />
- <data android:scheme="package" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.PACKAGE_CHANGED" />
- <data android:scheme="package" />
- </intent-filter>
- </receiver>
-
<activity-alias android:name="ContactShortcut"
android:targetActivity=".activities.ContactSelectionActivity"
android:label="@string/shortcutContact"
@@ -567,37 +551,6 @@
android:theme="@android:style/Theme.Translucent">
</activity>
- <!-- LIVE FOLDERS -->
- <activity
- android:name=".ContactsLiveFolders$AllContacts"
- android:label="@string/liveFolderAll"
- android:icon="@mipmap/ic_launcher_folder_live_contacts">
- <intent-filter>
- <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <activity
- android:name=".ContactsLiveFolders$StarredContacts"
- android:label="@string/liveFolderFavorites"
- android:icon="@mipmap/ic_launcher_folder_live_contacts_starred">
- <intent-filter>
- <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
- <activity
- android:name=".ContactsLiveFolders$PhoneContacts"
- android:label="@string/liveFolderPhone"
- android:icon="@mipmap/ic_launcher_folder_live_contacts_phone">
- <intent-filter>
- <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
-
<!-- vCard related -->
<activity android:name=".vcard.ImportVCardActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
diff --git a/res/drawable-hdpi/ic_contact_picture_180_holo_dark.png b/res/drawable-hdpi/ic_contact_picture_180_holo_dark.png
index 278c121..a17da61 100644
--- a/res/drawable-hdpi/ic_contact_picture_180_holo_dark.png
+++ b/res/drawable-hdpi/ic_contact_picture_180_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_180_holo_light.png b/res/drawable-hdpi/ic_contact_picture_180_holo_light.png
index 0ce49fe..38e4c30 100644
--- a/res/drawable-hdpi/ic_contact_picture_180_holo_light.png
+++ b/res/drawable-hdpi/ic_contact_picture_180_holo_light.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_holo_dark.png b/res/drawable-hdpi/ic_contact_picture_holo_dark.png
index de9157e..314fa00 100644
--- a/res/drawable-hdpi/ic_contact_picture_holo_dark.png
+++ b/res/drawable-hdpi/ic_contact_picture_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_holo_light.png b/res/drawable-hdpi/ic_contact_picture_holo_light.png
index 2eef7b5..4c0e35e 100644
--- a/res/drawable-hdpi/ic_contact_picture_holo_light.png
+++ b/res/drawable-hdpi/ic_contact_picture_holo_light.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_live_contacts.png b/res/drawable-hdpi/ic_launcher_folder_live_contacts.png
deleted file mode 100644
index 84babe2..0000000
--- a/res/drawable-hdpi/ic_launcher_folder_live_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_live_contacts_phone.png b/res/drawable-hdpi/ic_launcher_folder_live_contacts_phone.png
deleted file mode 100644
index 004e849..0000000
--- a/res/drawable-hdpi/ic_launcher_folder_live_contacts_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_live_contacts_starred.png b/res/drawable-hdpi/ic_launcher_folder_live_contacts_starred.png
deleted file mode 100644
index 73b4fa5..0000000
--- a/res/drawable-hdpi/ic_launcher_folder_live_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_see_contacts_holo_dark.png b/res/drawable-hdpi/ic_see_contacts_holo_dark.png
deleted file mode 100644
index 8e2182f..0000000
--- a/res/drawable-hdpi/ic_see_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_unheard_voicemail_holo_dark.png b/res/drawable-hdpi/ic_unheard_voicemail_holo_dark.png
deleted file mode 100644
index 4f48e77..0000000
--- a/res/drawable-hdpi/ic_unheard_voicemail_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_180_holo_dark.png b/res/drawable-mdpi/ic_contact_picture_180_holo_dark.png
index cc5dd09..acba333 100644
--- a/res/drawable-mdpi/ic_contact_picture_180_holo_dark.png
+++ b/res/drawable-mdpi/ic_contact_picture_180_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_180_holo_light.png b/res/drawable-mdpi/ic_contact_picture_180_holo_light.png
index 77539d3..0b52683 100644
--- a/res/drawable-mdpi/ic_contact_picture_180_holo_light.png
+++ b/res/drawable-mdpi/ic_contact_picture_180_holo_light.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_holo_dark.png b/res/drawable-mdpi/ic_contact_picture_holo_dark.png
index fb365c4..6876777 100644
--- a/res/drawable-mdpi/ic_contact_picture_holo_dark.png
+++ b/res/drawable-mdpi/ic_contact_picture_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_holo_light.png b/res/drawable-mdpi/ic_contact_picture_holo_light.png
index 6c7cb61..ead9718 100644
--- a/res/drawable-mdpi/ic_contact_picture_holo_light.png
+++ b/res/drawable-mdpi/ic_contact_picture_holo_light.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_folder_live_contacts.png b/res/drawable-mdpi/ic_launcher_folder_live_contacts.png
deleted file mode 100644
index d49cc7b..0000000
--- a/res/drawable-mdpi/ic_launcher_folder_live_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_folder_live_contacts_phone.png b/res/drawable-mdpi/ic_launcher_folder_live_contacts_phone.png
deleted file mode 100644
index 0127f84..0000000
--- a/res/drawable-mdpi/ic_launcher_folder_live_contacts_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_folder_live_contacts_starred.png b/res/drawable-mdpi/ic_launcher_folder_live_contacts_starred.png
deleted file mode 100644
index 8d56b31..0000000
--- a/res/drawable-mdpi/ic_launcher_folder_live_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_see_contacts_holo_dark.png b/res/drawable-mdpi/ic_see_contacts_holo_dark.png
deleted file mode 100644
index ef1d2df..0000000
--- a/res/drawable-mdpi/ic_see_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_unheard_voicemail_holo_dark.png b/res/drawable-mdpi/ic_unheard_voicemail_holo_dark.png
deleted file mode 100644
index 8992be2..0000000
--- a/res/drawable-mdpi/ic_unheard_voicemail_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_180_holo_dark.png b/res/drawable-xhdpi/ic_contact_picture_180_holo_dark.png
index b8ee922..c4c001e 100644
--- a/res/drawable-xhdpi/ic_contact_picture_180_holo_dark.png
+++ b/res/drawable-xhdpi/ic_contact_picture_180_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_180_holo_light.png b/res/drawable-xhdpi/ic_contact_picture_180_holo_light.png
index 9727b45..f6fd172 100644
--- a/res/drawable-xhdpi/ic_contact_picture_180_holo_light.png
+++ b/res/drawable-xhdpi/ic_contact_picture_180_holo_light.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_holo_dark.png b/res/drawable-xhdpi/ic_contact_picture_holo_dark.png
index 9fa0698..ddf797f 100644
--- a/res/drawable-xhdpi/ic_contact_picture_holo_dark.png
+++ b/res/drawable-xhdpi/ic_contact_picture_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_holo_light.png b/res/drawable-xhdpi/ic_contact_picture_holo_light.png
index 1a2bfde..05a65f6 100644
--- a/res/drawable-xhdpi/ic_contact_picture_holo_light.png
+++ b/res/drawable-xhdpi/ic_contact_picture_holo_light.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_folder_live_contacts.png b/res/drawable-xhdpi/ic_launcher_folder_live_contacts.png
deleted file mode 100644
index 99bb9f8..0000000
--- a/res/drawable-xhdpi/ic_launcher_folder_live_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_folder_live_contacts_phone.png b/res/drawable-xhdpi/ic_launcher_folder_live_contacts_phone.png
deleted file mode 100644
index fd416b8..0000000
--- a/res/drawable-xhdpi/ic_launcher_folder_live_contacts_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher_folder_live_contacts_starred.png b/res/drawable-xhdpi/ic_launcher_folder_live_contacts_starred.png
deleted file mode 100644
index ff9e326..0000000
--- a/res/drawable-xhdpi/ic_launcher_folder_live_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_see_contacts_holo_dark.png b/res/drawable-xhdpi/ic_see_contacts_holo_dark.png
deleted file mode 100644
index 279fff9..0000000
--- a/res/drawable-xhdpi/ic_see_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_unheard_voicemail_holo_dark.png b/res/drawable-xhdpi/ic_unheard_voicemail_holo_dark.png
deleted file mode 100644
index 75e771c..0000000
--- a/res/drawable-xhdpi/ic_unheard_voicemail_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/quickcontact_list_item_background.xml b/res/drawable/quickcontact_list_item_background.xml
deleted file mode 100644
index afb3947..0000000
--- a/res/drawable/quickcontact_list_item_background.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_window_focused="false"
- android:drawable="@drawable/list_background_holo" />
- <item
- android:state_focused="true"
- android:state_pressed="true"
- android:drawable="@drawable/list_pressed_holo" />
- <item
- android:state_focused="false"
- android:state_pressed="true"
- android:drawable="@drawable/list_pressed_holo" />
- <item
- android:state_focused="true"
- android:drawable="@drawable/list_focused_holo" />
- <item
- android:drawable="@color/quickcontact_list_background" />
-</selector>
diff --git a/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml b/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml
index 6ce811f..b9a9dbd 100644
--- a/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml
+++ b/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml
@@ -33,11 +33,12 @@
android:layout_height="@dimen/detail_contact_photo_size" />
<LinearLayout
- android:layout_width="match_parent"
+ android:layout_width="0dip"
android:layout_height="match_parent"
+ android:layout_weight="1"
android:orientation="vertical"
android:paddingLeft="16dip"
- android:paddingRight="16dip">
+ android:paddingRight="4dip">
<TextView
android:id="@+id/name"
@@ -55,14 +56,9 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary" />
- <CheckBox
- android:id="@+id/star"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:contentDescription="@string/description_star"
- style="?android:attr/starStyle" />
-
</LinearLayout>
+ <include
+ layout="@layout/favorites_star" />
+
</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml b/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml
index be82d88..6ef4651 100644
--- a/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml
+++ b/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml
@@ -25,12 +25,24 @@
android:layout_height="wrap_content"
android:orientation="vertical">
- <TextView
- android:id="@+id/name"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textSize="@dimen/detail_header_name_text_size" />
+ android:paddingRight="16dip">
+
+ <TextView
+ android:id="@+id/name"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textSize="@dimen/detail_header_name_text_size"
+ android:paddingRight="16dip" />
+
+ <include
+ layout="@layout/favorites_star" />
+
+ </LinearLayout>
<TextView
android:id="@+id/company"
@@ -39,12 +51,4 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary" />
- <CheckBox
- android:id="@+id/star"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="top"
- android:contentDescription="@string/description_star"
- style="?android:attr/starStyle" />
-
</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-sw580dp-w1000dp/group_detail_fragment.xml b/res/layout-sw580dp-w1000dp/group_detail_fragment.xml
deleted file mode 100644
index 45419a8..0000000
--- a/res/layout-sw580dp-w1000dp/group_detail_fragment.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/group_detail"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/panel_content">
-
- <!-- Static header containing the group title, size, and group source (if applicable) -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:paddingLeft="@dimen/group_detail_border_padding"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/group_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingTop="12dip"
- android:paddingLeft="8dip"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/group_size"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingBottom="12dip"
- android:paddingLeft="8dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorSecondary" />
-
- </LinearLayout>
-
- <FrameLayout
- android:id="@+id/group_source_view_container"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:paddingRight="@dimen/group_detail_border_padding" />
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="@color/people_app_theme_color"
- android:layout_marginLeft="@dimen/group_detail_border_padding"
- android:layout_marginRight="@dimen/group_detail_border_padding" />
-
- <!-- List of group members -->
- <ListView android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginLeft="@dimen/group_detail_border_padding"
- android:layout_marginRight="@dimen/group_detail_border_padding"
- android:cacheColorHint="#00000000"
- android:fadingEdge="none"
- android:divider="@null" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-sw580dp-w1000dp/updates_header_contact.xml b/res/layout-sw580dp-w1000dp/updates_header_contact.xml
index da63d20..fc4471b 100644
--- a/res/layout-sw580dp-w1000dp/updates_header_contact.xml
+++ b/res/layout-sw580dp-w1000dp/updates_header_contact.xml
@@ -16,9 +16,23 @@
<!--
This is a header entry in the contact updates list.
- This is empty because there is no header in this case.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="0dip"/>
+ android:layout_height="wrap_content"
+ android:focusable="false">
+
+ <TextView
+ style="?android:attr/listSeparatorTextViewStyle"
+ android:layout_height="32dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:background="@drawable/list_section_divider_holo_custom"
+ android:text="@string/recent_updates"
+ android:textColor="@color/people_app_theme_color"
+ android:textAllCaps="true"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+</FrameLayout>
diff --git a/res/layout-sw580dp/contact_picker.xml b/res/layout-sw580dp/contact_picker.xml
new file mode 100644
index 0000000..d4ee224
--- /dev/null
+++ b/res/layout-sw580dp/contact_picker.xml
@@ -0,0 +1,52 @@
+<?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
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ class="com.android.contacts.widget.FullHeightLinearLayout"
+ style="@style/ContactPickerLayout"
+ android:orientation="vertical"
+ android:layout_height="match_parent">
+ <view
+ class="android.widget.SearchView"
+ android:id="@+id/search_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="0dip"
+ android:layout_marginRight="32dip"
+ android:iconifiedByDefault="false" />
+ <!-- will contain an appropriate contacts list -->
+ <FrameLayout
+ android:id="@+id/list_container"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1" />
+
+ <LinearLayout
+ style="?android:attr/buttonBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip">
+ <Button
+ android:id="@+id/new_contact"
+ style="?android:attr/buttonBarButtonStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAllCaps="true"
+ android:text="@string/pickerNewContactText" />
+ </LinearLayout>
+</view>
diff --git a/res/layout-sw580dp/detail_header_contact_with_updates.xml b/res/layout-sw580dp/detail_header_contact_with_updates.xml
index 6b6f02b..fa6f301 100644
--- a/res/layout-sw580dp/detail_header_contact_with_updates.xml
+++ b/res/layout-sw580dp/detail_header_contact_with_updates.xml
@@ -26,7 +26,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:layout_marginTop="30dip">
+ android:layout_marginTop="30dip"
+ android:paddingBottom="8dip">
<!-- Add a first item that gives us enough space to show the carousel -->
<view
@@ -43,12 +44,26 @@
</view>
- <TextView
- android:id="@+id/name"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textSize="@dimen/detail_header_name_text_size" />
+ android:orientation="horizontal"
+ android:paddingTop="8dip"
+ android:paddingRight="8dip">
+
+ <TextView
+ android:id="@+id/name"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingRight="24dip"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textSize="@dimen/detail_header_name_text_size" />
+
+ <include
+ layout="@layout/favorites_star" />
+
+ </LinearLayout>
<TextView
android:id="@+id/company"
@@ -57,12 +72,4 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary" />
- <CheckBox
- android:id="@+id/star"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="top"
- android:contentDescription="@string/description_star"
- style="?android:attr/starStyle" />
-
</LinearLayout>
diff --git a/res/layout-sw580dp/detail_header_contact_without_updates.xml b/res/layout-sw580dp/detail_header_contact_without_updates.xml
index 995e8f7..a55764d 100644
--- a/res/layout-sw580dp/detail_header_contact_without_updates.xml
+++ b/res/layout-sw580dp/detail_header_contact_without_updates.xml
@@ -23,7 +23,8 @@
xmlns:ex="http://schemas.android.com/apk/res/com.android.contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:paddingBottom="8dip">
<!-- Ensure that the contact photo for a contact WITHOUT social updates is the same width and
height as a contact WITH social updates (where the photo is 2/3 of the screen width). -->
@@ -57,12 +58,26 @@
</view>
- <TextView
- android:id="@+id/name"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textSize="@dimen/detail_header_name_text_size" />
+ android:orientation="horizontal"
+ android:paddingTop="8dip"
+ android:paddingRight="8dip">
+
+ <TextView
+ android:id="@+id/name"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingRight="24dip"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textSize="@dimen/detail_header_name_text_size" />
+
+ <include
+ layout="@layout/favorites_star" />
+
+ </LinearLayout>
<TextView
android:id="@+id/company"
@@ -71,12 +86,4 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorSecondary" />
- <CheckBox
- android:id="@+id/star"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="top"
- android:contentDescription="@string/description_star"
- style="?android:attr/starStyle" />
-
</LinearLayout>
diff --git a/res/layout/join_contact_picker_section.xml b/res/layout-sw580dp/favorites_star.xml
similarity index 60%
copy from res/layout/join_contact_picker_section.xml
copy to res/layout-sw580dp/favorites_star.xml
index 260ea2d..7959df3 100644
--- a/res/layout/join_contact_picker_section.xml
+++ b/res/layout-sw580dp/favorites_star.xml
@@ -14,20 +14,19 @@
limitations under the License.
-->
-<LinearLayout
+<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:minHeight="50dip">
- <TextView
- android:id="@+id/text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="?attr/list_item_header_text_indent"
- android:minHeight="16dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:gravity="center_vertical" />
+ <CheckBox
+ android:id="@+id/star"
+ android:duplicateParentState="true"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_vertical"
+ android:contentDescription="@string/description_star"
+ style="?android:attr/starStyle"/>
- <View style="@style/SectionDivider" />
-</LinearLayout>
+</FrameLayout>
diff --git a/res/layout-sw580dp/group_detail_fragment.xml b/res/layout-sw580dp/group_detail_fragment.xml
index fbe695b..8a4ce86 100644
--- a/res/layout-sw580dp/group_detail_fragment.xml
+++ b/res/layout-sw580dp/group_detail_fragment.xml
@@ -21,44 +21,66 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/background_primary"
+ android:background="@drawable/panel_content"
android:paddingLeft="@dimen/group_detail_border_padding"
android:paddingRight="@dimen/group_detail_border_padding">
- <TextView
- android:id="@+id/group_title"
+ <!-- Static header containing the group title, size, and group source (if applicable) -->
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingLeft="8dip"
- android:paddingTop="12dip"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textStyle="bold" />
+ android:orientation="horizontal" >
- <TextView
- android:id="@+id/group_size"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="8dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorTertiary" />
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingLeft="8dip"
+ android:orientation="vertical" >
+
+ <TextView
+ android:id="@+id/group_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:paddingTop="12dip"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/group_size"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="end"
+ android:paddingBottom="12dip"
+ android:textAppearance="@style/GroupMembershipSizeTextAppearance"
+ android:textColor="?android:attr/textColorSecondary" />
+
+ </LinearLayout>
+
+ <FrameLayout
+ android:id="@+id/group_source_view_container"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent" />
+
+ </LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dip"
- android:background="@color/people_app_theme_color"
- android:layout_marginTop="12dip" />
+ android:background="@color/people_app_theme_color" />
- <FrameLayout
- android:id="@+id/group_source_view_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical" />
-
+ <!-- List of group members -->
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:cacheColorHint="#00000000"
+ android:cacheColorHint="@android:color/black"
android:fadingEdge="none"
android:divider="@null" />
+ <include
+ layout="@layout/group_detail_fragment_empty_view"/>
+
</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-sw580dp/group_source_button.xml b/res/layout-sw580dp/group_source_button.xml
index e0fe4a9..43c85e9 100644
--- a/res/layout-sw580dp/group_source_button.xml
+++ b/res/layout-sw580dp/group_source_button.xml
@@ -34,7 +34,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:duplicateParentState="true"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
+ android:textSize="14sp"
+ style="@android:style/Widget.Holo.ActionBar.TabText"/>
<ImageView
android:id="@android:id/icon"
diff --git a/res/layout-sw580dp/list_separator.xml b/res/layout-sw580dp/list_separator.xml
index a53bd6b..34e8d79 100644
--- a/res/layout-sw580dp/list_separator.xml
+++ b/res/layout-sw580dp/list_separator.xml
@@ -17,12 +17,6 @@
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/title"
- style="?android:attr/listSeparatorTextViewStyle"
- android:layout_height="32dip"
+ style="@style/ContactListSeparatorTextViewStyle"
android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:background="@drawable/list_section_divider_holo_custom"
- android:textColor="@color/people_app_theme_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:ellipsize="end" />
\ No newline at end of file
+ android:paddingRight="8dip" />
diff --git a/res/layout-sw580dp/updates_header_contact.xml b/res/layout-sw580dp/updates_header_contact.xml
index 5192134..00e3d1b 100644
--- a/res/layout-sw580dp/updates_header_contact.xml
+++ b/res/layout-sw580dp/updates_header_contact.xml
@@ -16,21 +16,41 @@
<!--
This is a header entry in the contact updates list.
- Add a first item that gives us enough space to show the carousel
-->
-<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"
- android:paddingBottom="8dip"
- ex:ratio="0.66"
- ex:direction="widthToHeight">
+ android:orientation="vertical">
- <!-- Put a dummy view here because the ProportionalLayout requires one -->
- <FrameLayout
+ <!-- This blank view pushes the other content down because of the tab carousel -->
+ <view
+ class="com.android.contacts.widget.ProportionalLayout"
android:layout_width="match_parent"
- android:layout_height="match_parent"/>
+ android:layout_height="wrap_content"
+ android:paddingBottom="8dip"
+ ex:ratio="0.66"
+ ex:direction="widthToHeight">
-</view>
+ <!-- Put a dummy view here because the ProportionalLayout requires one -->
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+ </view>
+
+ <!-- "Recent updates" header text -->
+ <TextView
+ style="?android:attr/listSeparatorTextViewStyle"
+ android:layout_height="32dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:background="@drawable/list_section_divider_holo_custom"
+ android:text="@string/recent"
+ android:textColor="@color/people_app_theme_color"
+ android:textAllCaps="true"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout-w470dp/contact_detail_fragment.xml b/res/layout-w470dp/contact_detail_fragment.xml
index 211af3b..415bb56 100644
--- a/res/layout-w470dp/contact_detail_fragment.xml
+++ b/res/layout-w470dp/contact_detail_fragment.xml
@@ -35,8 +35,7 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_above="@id/contact_quick_fix"
- android:layout_height="match_parent"
- android:background="@color/background_primary" >
+ android:layout_height="match_parent" >
<ImageView android:id="@+id/photo"
android:scaleType="centerCrop"
diff --git a/res/layout-w470dp/updates_header_contact.xml b/res/layout-w470dp/updates_header_contact.xml
index da63d20..5b068cd 100644
--- a/res/layout-w470dp/updates_header_contact.xml
+++ b/res/layout-w470dp/updates_header_contact.xml
@@ -16,9 +16,24 @@
<!--
This is a header entry in the contact updates list.
- This is empty because there is no header in this case.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="0dip"/>
+ android:layout_height="32dip"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip"
+ android:focusable="false">
+
+ <TextView
+ style="?android:attr/listSeparatorTextViewStyle"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:background="@drawable/list_section_divider_holo_custom"
+ android:text="@string/recent_updates"
+ android:textColor="@color/people_app_theme_color"
+ android:textAllCaps="true"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+</FrameLayout>
diff --git a/res/layout/account_filter_header.xml b/res/layout/account_filter_header.xml
index 4d45d25..26207f0 100644
--- a/res/layout/account_filter_header.xml
+++ b/res/layout/account_filter_header.xml
@@ -22,7 +22,6 @@
android:id="@+id/account_filter_header_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="?attr/list_item_header_height"
android:orientation="vertical"
android:paddingTop="@dimen/contact_browser_list_top_margin"
android:layout_marginLeft="@dimen/contact_browser_list_header_left_margin"
@@ -31,17 +30,6 @@
android:visibility="gone">
<TextView
android:id="@+id/account_filter_header"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"
- android:textStyle="bold"
- android:textAllCaps="true"
- android:paddingLeft="@dimen/contact_browser_list_item_text_indent"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary" />
- <View
- android:id="@+id/account_filter_header_bottom_divider"
- android:layout_height="1dip"
- style="@style/SectionDivider" />
+ style="@style/ContactListSeparatorTextViewStyle"
+ android:paddingLeft="@dimen/contact_browser_list_item_text_indent" />
</LinearLayout>
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index 4768bf6..777c7af 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -129,20 +129,11 @@
<TextView
android:id="@+id/call_log_header"
- style="?android:attr/listSeparatorTextViewStyle"
+ style="@style/ContactListSeparatorTextViewStyle"
android:layout_marginLeft="@dimen/call_log_outer_margin"
android:layout_marginRight="@dimen/call_log_outer_margin"
android:paddingTop="@dimen/call_log_inner_margin"
- android:paddingBottom="@dimen/call_log_inner_margin"
- android:background="@drawable/list_section_divider_holo_custom"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textStyle="bold"
- android:textColor="?attr/call_log_header_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:ellipsize="end"
- android:focusable="true"
- />
+ android:paddingBottom="@dimen/call_log_inner_margin" />
<View
android:id="@+id/call_log_divider"
diff --git a/res/layout/carousel_updates_tab.xml b/res/layout/carousel_updates_tab.xml
index 91a72d3..d471d93 100644
--- a/res/layout/carousel_updates_tab.xml
+++ b/res/layout/carousel_updates_tab.xml
@@ -56,7 +56,7 @@
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/detail_update_tab_text_color"
android:textStyle="bold"
- android:maxLines="3"/>
+ android:maxLines="@integer/updates_tab_snippet_max_lines"/>
<View
android:id="@+id/alpha_overlay"
diff --git a/res/layout/contact_detail_fragment.xml b/res/layout/contact_detail_fragment.xml
index 873d8ca..08b1aad 100644
--- a/res/layout/contact_detail_fragment.xml
+++ b/res/layout/contact_detail_fragment.xml
@@ -25,7 +25,6 @@
android:layout_height="0px"
android:layout_weight="1"
android:fadingEdge="none"
- android:background="@color/background_primary"
android:divider="@null"/>
<ScrollView android:id="@android:id/empty"
diff --git a/res/layout/contact_detail_updates_fragment.xml b/res/layout/contact_detail_updates_fragment.xml
index 4c056a8..30f09b9 100644
--- a/res/layout/contact_detail_updates_fragment.xml
+++ b/res/layout/contact_detail_updates_fragment.xml
@@ -20,5 +20,4 @@
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/background_primary"
android:divider="@null"/>
diff --git a/res/layout/contacts_list_content.xml b/res/layout/contact_list_content.xml
similarity index 100%
rename from res/layout/contacts_list_content.xml
rename to res/layout/contact_list_content.xml
diff --git a/res/layout/contact_list_filter_custom.xml b/res/layout/contact_list_filter_custom.xml
index a4fe48e..40d9c78 100644
--- a/res/layout/contact_list_filter_custom.xml
+++ b/res/layout/contact_list_filter_custom.xml
@@ -26,7 +26,8 @@
android:layout_height="0dip"
android:layout_weight="1"
android:layout_marginLeft="@dimen/contact_filter_left_margin"
- android:layout_marginRight="@dimen/contact_filter_right_margin" />
+ android:layout_marginRight="@dimen/contact_filter_right_margin"
+ android:overScrollMode="always" />
<View
android:layout_width="match_parent"
diff --git a/res/layout/contact_picker.xml b/res/layout/contact_picker.xml
index 96bf334..49be858 100644
--- a/res/layout/contact_picker.xml
+++ b/res/layout/contact_picker.xml
@@ -34,26 +34,4 @@
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
-
- <View
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
- android:background="?android:attr/dividerHorizontal" />
-
- <LinearLayout
- style="?android:attr/buttonBarStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="16dip"
- android:paddingRight="16dip">
- <Button
- style="?android:attr/buttonBarButtonStyle"
- android:id="@+id/cancel"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@android:string/cancel" />
- </LinearLayout>
</view>
diff --git a/res/layout/contact_tile_frequent_phone.xml b/res/layout/contact_tile_frequent_phone.xml
index d3f64e4..aa2d9a8 100644
--- a/res/layout/contact_tile_frequent_phone.xml
+++ b/res/layout/contact_tile_frequent_phone.xml
@@ -67,8 +67,9 @@
android:id="@+id/contact_tile_phone_number"
android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_weight="5"
+ android:layout_weight="?attr/list_item_data_width_weight"
android:textSize="14sp"
+ android:ellipsize="marquee"
android:textColor="@color/dialtacts_secondary_text_color"
android:layout_marginLeft="8dip"
android:singleLine="true"
@@ -78,9 +79,9 @@
android:id="@+id/contact_tile_phone_type"
android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_weight="3"
+ android:layout_weight="?attr/list_item_label_width_weight"
android:textSize="12sp"
- android:ellipsize="end"
+ android:ellipsize="marquee"
android:singleLine="true"
android:textAllCaps="true"
android:textColor="@color/dialtacts_secondary_text_color"
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
index 1f74c26..45f40f6 100644
--- a/res/layout/dialpad.xml
+++ b/res/layout/dialpad.xml
@@ -20,7 +20,7 @@
android:id="@+id/dialpad"
android:layout_width="match_parent"
android:layout_height="0px"
- android:layout_weight="0.650"
+ android:layout_weight="@integer/dialpad_layout_weight_dialpad"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dialpad_vertical_margin"
android:paddingLeft="5dip"
diff --git a/res/layout/dialpad_additional_buttons.xml b/res/layout/dialpad_additional_buttons.xml
index 836187e..392f97a 100644
--- a/res/layout/dialpad_additional_buttons.xml
+++ b/res/layout/dialpad_additional_buttons.xml
@@ -19,7 +19,7 @@
android:id="@+id/dialpadAdditionalButtons"
android:layout_width="match_parent"
android:layout_height="0px"
- android:layout_weight="0.150"
+ android:layout_weight="@integer/dialpad_layout_weight_additional_buttons"
android:layout_gravity="center_horizontal"
android:background="@drawable/dialpad_background"
android:orientation="horizontal">
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index 22e9a18..2785af0 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -28,7 +28,7 @@
android:id="@+id/digits_container"
android:layout_width="match_parent"
android:layout_height="0px"
- android:layout_weight="0.200"
+ android:layout_weight="@integer/dialpad_layout_weight_digits"
android:layout_marginTop="@dimen/dialpad_vertical_margin"
android:gravity="center"
android:background="@drawable/dialpad_background" >
diff --git a/res/layout/directory_header.xml b/res/layout/directory_header.xml
index a1516ef..a2adf48 100644
--- a/res/layout/directory_header.xml
+++ b/res/layout/directory_header.xml
@@ -20,7 +20,9 @@
style="@style/DirectoryHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="?attr/list_item_header_height"
+ 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:paddingLeft="?attr/list_item_padding_left"
android:paddingRight="?attr/list_item_padding_right">
<TextView
@@ -32,7 +34,7 @@
android:layout_centerVertical="true"
android:layout_marginLeft="8dip"
android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
+ android:textColor="@color/people_app_theme_color"
android:singleLine="true"
android:textStyle="bold"
android:textAllCaps="true" />
@@ -55,12 +57,8 @@
android:layout_marginLeft="8dip"
android:layout_marginRight="8dip"
android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
+ android:textColor="@color/people_app_theme_color"
android:singleLine="true"
android:textStyle="bold"
android:textAllCaps="true" />
- <View
- android:id="@+id/contact_filter_header_bottom_divider"
- style="@style/SectionDivider"
- android:layout_below="@id/display_name" />
</RelativeLayout>
diff --git a/res/layout/edit_kind_title.xml b/res/layout/edit_kind_title.xml
index f178876..1cd6833 100644
--- a/res/layout/edit_kind_title.xml
+++ b/res/layout/edit_kind_title.xml
@@ -20,20 +20,13 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="32dip"
+ android:layout_height="wrap_content"
android:paddingLeft="8dip"
android:paddingRight="8dip"
android:focusable="false">
-
<TextView
android:id="@+id/kind_title"
- style="?android:attr/listSeparatorTextViewStyle"
+ style="@style/ContactListSeparatorTextViewStyle"
android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:background="@drawable/list_section_divider_holo_custom"
- android:textColor="@color/people_app_theme_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:ellipsize="end" />
-
-</FrameLayout>
\ No newline at end of file
+ android:paddingRight="8dip" />
+</FrameLayout>
diff --git a/res/layout/call_log_activity.xml b/res/layout/fragment_test.xml
similarity index 85%
rename from res/layout/call_log_activity.xml
rename to res/layout/fragment_test.xml
index b391795..af281eb 100644
--- a/res/layout/call_log_activity.xml
+++ b/res/layout/fragment_test.xml
@@ -18,8 +18,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
>
- <fragment class="com.android.contacts.calllog.CallLogFragment"
- android:id="@+id/call_log_fragment"
+ <!-- Placeholder to load the fragment under test. -->
+ <fragment android:id="@+id/fragment"
+ android:name="com.android.contacts.test.EmptyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
diff --git a/res/layout/group_detail_fragment.xml b/res/layout/group_detail_fragment.xml
index 2b020c9..735b29d 100644
--- a/res/layout/group_detail_fragment.xml
+++ b/res/layout/group_detail_fragment.xml
@@ -43,6 +43,9 @@
android:scrollbarStyle="outsideOverlay"
android:divider="@null"/>
+ <include
+ layout="@layout/group_detail_fragment_empty_view"/>
+
<!--
Shadow overlay over the list of group members (since we have a fake stacked
action bar)
diff --git a/res/layout/group_detail_fragment_empty_view.xml b/res/layout/group_detail_fragment_empty_view.xml
new file mode 100644
index 0000000..89a6cf8
--- /dev/null
+++ b/res/layout/group_detail_fragment_empty_view.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingTop="24dip"
+ android:visibility="gone">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:text="@string/emptyGroup"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textColor="?android:attr/textColorSecondary"/>
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:text="@string/addPeopleToGroup"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary"/>
+
+</LinearLayout>
diff --git a/res/layout/join_contact_picker.xml b/res/layout/join_contact_picker.xml
index ffea137..ea0deaf 100644
--- a/res/layout/join_contact_picker.xml
+++ b/res/layout/join_contact_picker.xml
@@ -33,18 +33,4 @@
android:layout_marginLeft="?attr/contact_browser_list_padding_left"
android:layout_marginRight="?attr/contact_browser_list_padding_right"
android:background="?android:attr/dividerHorizontal" />
-
- <LinearLayout
- style="?android:attr/buttonBarStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="?attr/contact_browser_list_padding_left"
- android:layout_marginRight="?attr/contact_browser_list_padding_right">
- <Button
- style="?android:attr/buttonBarButtonStyle"
- android:id="@+id/cancel"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@android:string/cancel"/>
- </LinearLayout>
</view>
diff --git a/res/layout/join_contact_picker_list_content.xml b/res/layout/join_contact_picker_list_content.xml
index 1535539..40137e2 100644
--- a/res/layout/join_contact_picker_list_content.xml
+++ b/res/layout/join_contact_picker_list_content.xml
@@ -19,17 +19,18 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="8dip"
+ android:paddingTop="16dip"
android:orientation="vertical">
<TextView
android:id="@+id/join_contact_blurb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingLeft="16dip"
- android:paddingRight="16dip"
+ android:layout_marginLeft="@dimen/contact_browser_list_header_left_margin"
+ android:layout_marginRight="@dimen/contact_browser_list_header_right_margin"
+ android:paddingLeft="?attr/list_item_header_text_indent"
android:maxLines="2"
- android:textAppearance="?android:attr/textAppearanceMedium" />
+ android:textAppearance="?android:attr/textAppearanceSmall" />
<FrameLayout
android:id="@+id/pinned_header_list_layout"
diff --git a/res/layout/join_contact_picker_section.xml b/res/layout/join_contact_picker_section_header.xml
similarity index 83%
rename from res/layout/join_contact_picker_section.xml
rename to res/layout/join_contact_picker_section_header.xml
index 260ea2d..50dac70 100644
--- a/res/layout/join_contact_picker_section.xml
+++ b/res/layout/join_contact_picker_section_header.xml
@@ -14,6 +14,7 @@
limitations under the License.
-->
+<!-- Layout used for "Join contacts" screen's section headers. -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
@@ -24,9 +25,13 @@
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:minHeight="32dip"
android:paddingLeft="?attr/list_item_header_text_indent"
- android:minHeight="16dip"
android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textAllCaps="true"
+ android:textStyle="bold"
+ android:singleLine="true"
+ android:ellipsize="end"
android:gravity="center_vertical" />
<View style="@style/SectionDivider" />
diff --git a/res/layout/join_contact_picker_show_all.xml b/res/layout/join_contact_picker_show_all.xml
deleted file mode 100644
index d332649..0000000
--- a/res/layout/join_contact_picker_show_all.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <View
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?android:attr/dividerHorizontal" />
-
- <TextView
- android:id="@+id/text"
- android:layout_height="48dip"
- android:layout_width="match_parent"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:gravity="center_vertical"
- android:text="@string/showAllContactsJoinItem" />
-
- <View
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="?android:attr/dividerHorizontal" />
-</LinearLayout>
diff --git a/res/layout/list_separator.xml b/res/layout/list_separator.xml
index 3ffaca7..d94e18c 100644
--- a/res/layout/list_separator.xml
+++ b/res/layout/list_separator.xml
@@ -17,20 +17,13 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="32dip"
+ android:layout_height="wrap_content"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:focusable="false">
-
<TextView
android:id="@+id/title"
- style="?android:attr/listSeparatorTextViewStyle"
+ style="@style/ContactListSeparatorTextViewStyle"
android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:background="@drawable/list_section_divider_holo_custom"
- android:textColor="@color/people_app_theme_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:ellipsize="end" />
-
+ android:paddingRight="8dip" />
</FrameLayout>
diff --git a/res/layout/phone_favorite_account_filter_header.xml b/res/layout/phone_favorite_account_filter_header.xml
deleted file mode 100644
index d63382a..0000000
--- a/res/layout/phone_favorite_account_filter_header.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Layout showing the type of account filter in phone favorite screen.
-
- Note: This xml is based on account_filter_header.xml and list_separator.xml.
- Some configurations (e.g. padding) are from account_filter_header.xml, while
- some other configurations (e.g. background, height, text style) are from
- list_separator.xml. See also bug 5432231. -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/account_filter_header_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="32dip"
- android:paddingTop="@dimen/contact_browser_list_top_margin"
- 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"
- android:visibility="gone">
- <TextView
- android:id="@+id/account_filter_header"
- style="?android:attr/listSeparatorTextViewStyle"
- android:singleLine="true"
- android:ellipsize="end"
- android:textStyle="bold"
- android:textAllCaps="true"
- android:textColor="@color/people_app_theme_color"
- android:paddingLeft="@dimen/contact_browser_list_item_text_indent"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:background="@drawable/list_section_divider_holo_custom" />
-</FrameLayout>
diff --git a/res/layout/status_bar_ongoing_event_progress_bar.xml b/res/layout/status_bar_ongoing_event_progress_bar.xml
deleted file mode 100644
index e3edf95..0000000
--- a/res/layout/status_bar_ongoing_event_progress_bar.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- /
-TODO: This is copied from DownloadProvider, and looks similar to Bluetooth's.
- It might be better to have this in framework.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@android:drawable/status_bar_item_app_background"
- >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- >
- <LinearLayout
- android:layout_width="40dp"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:paddingTop="8dp"
- android:focusable="true"
- >
- <ImageView
- android:id="@+id/status_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:src="@android:drawable/sym_def_app_icon"
- />
- <TextView android:id="@+id/status_progress_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#ff000000"
- android:singleLine="true"
- android:textSize="14sp"
- android:layout_gravity="center_horizontal" />
- </LinearLayout>
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:focusable="true">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:focusable="true"
- android:layout_alignParentTop="true"
- android:paddingTop="10dp">
- <TextView android:id="@+id/status_description"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="?android:attr/textColorPrimary"
- android:singleLine="true"
- android:textSize="18sp"
- android:paddingLeft="5dp" />
- </LinearLayout>
- <ProgressBar
- android:id="@+id/status_progress_bar"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:paddingBottom="8dp"
- android:paddingRight="25dp" />
- </RelativeLayout>
- </LinearLayout>
-
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:src="@android:drawable/divider_horizontal_bright"
- />
-</LinearLayout>
-
diff --git a/res/layout/updates_header_contact.xml b/res/layout/updates_header_contact.xml
index d401f05..774fa7b 100644
--- a/res/layout/updates_header_contact.xml
+++ b/res/layout/updates_header_contact.xml
@@ -16,20 +16,48 @@
<!--
This is a header entry in the contact updates list.
- Add a first item that gives us enough space to show the carousel
-->
-<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">
+ android:orientation="vertical">
- <!-- Put a dummy view here because the ProportionalLayout requires one -->
+ <!-- This blank view pushes the other content down because of the tab carousel -->
+ <view
+ class="com.android.contacts.widget.ProportionalLayout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ ex:ratio="0.5"
+ ex:direction="widthToHeight">
+
+ <!-- Put a dummy view here because the ProportionalLayout requires one -->
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+ </view>
+
+ <!-- "Recent" header text -->
<FrameLayout
android:layout_width="match_parent"
- android:layout_height="match_parent"/>
+ android:layout_height="32dip"
+ android:paddingLeft="16dip"
+ android:paddingRight="16dip"
+ android:focusable="false">
-</view>
+ <TextView
+ style="?android:attr/listSeparatorTextViewStyle"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:background="@drawable/list_section_divider_holo_custom"
+ android:text="@string/recent"
+ android:textColor="@color/people_app_theme_color"
+ android:textAllCaps="true"
+ android:singleLine="true"
+ android:ellipsize="end" />
+
+ </FrameLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/menu-sw580dp-w720dp/view_contact.xml b/res/menu-sw580dp-w720dp/view_contact.xml
index 24b8ac1..734e6b2 100644
--- a/res/menu-sw580dp-w720dp/view_contact.xml
+++ b/res/menu-sw580dp-w720dp/view_contact.xml
@@ -23,14 +23,14 @@
android:showAsAction="always" />
<item
- android:id="@+id/menu_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
- android:title="@string/menu_deleteContact" />
-
- <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_contact.xml b/res/menu-sw580dp/view_contact.xml
index 807bfc9..1279601 100644
--- a/res/menu-sw580dp/view_contact.xml
+++ b/res/menu-sw580dp/view_contact.xml
@@ -22,14 +22,14 @@
android:alphabeticShortcut="e" />
<item
- android:id="@+id/menu_delete"
- android:icon="@drawable/ic_menu_trash_holo_light"
- android:title="@string/menu_deleteContact" />
-
- <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/values-long-land/dimens.xml b/res/menu/contact_picker_options.xml
similarity index 70%
copy from res/values-long-land/dimens.xml
copy to res/menu/contact_picker_options.xml
index 2046eb0..89196ba 100644
--- a/res/values-long-land/dimens.xml
+++ b/res/menu/contact_picker_options.xml
@@ -13,7 +13,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<resources>
- <dimen name="dialpad_digits_margin_bottom">30dip</dimen>
- <dimen name="dialpad_digits_text_size">34sp</dimen>
-</resources>
+<!-- Used with DialtactsActivity's search mode. -->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:id="@+id/create_new_contact"
+ android:title="@string/pickerNewContactText"
+ android:showAsAction="ifRoom" />
+</menu>
diff --git a/res/mipmap-hdpi/ic_launcher_folder_live_contacts.png b/res/mipmap-hdpi/ic_launcher_folder_live_contacts.png
deleted file mode 100644
index 84babe2..0000000
--- a/res/mipmap-hdpi/ic_launcher_folder_live_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-hdpi/ic_launcher_folder_live_contacts_phone.png b/res/mipmap-hdpi/ic_launcher_folder_live_contacts_phone.png
deleted file mode 100644
index 004e849..0000000
--- a/res/mipmap-hdpi/ic_launcher_folder_live_contacts_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-hdpi/ic_launcher_folder_live_contacts_starred.png b/res/mipmap-hdpi/ic_launcher_folder_live_contacts_starred.png
deleted file mode 100644
index 73b4fa5..0000000
--- a/res/mipmap-hdpi/ic_launcher_folder_live_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_folder_live_contacts.png b/res/mipmap-mdpi/ic_launcher_folder_live_contacts.png
deleted file mode 100644
index d49cc7b..0000000
--- a/res/mipmap-mdpi/ic_launcher_folder_live_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_folder_live_contacts_phone.png b/res/mipmap-mdpi/ic_launcher_folder_live_contacts_phone.png
deleted file mode 100644
index 0127f84..0000000
--- a/res/mipmap-mdpi/ic_launcher_folder_live_contacts_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_folder_live_contacts_starred.png b/res/mipmap-mdpi/ic_launcher_folder_live_contacts_starred.png
deleted file mode 100644
index 8d56b31..0000000
--- a/res/mipmap-mdpi/ic_launcher_folder_live_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_folder_live_contacts.png b/res/mipmap-xhdpi/ic_launcher_folder_live_contacts.png
deleted file mode 100644
index 99bb9f8..0000000
--- a/res/mipmap-xhdpi/ic_launcher_folder_live_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_folder_live_contacts_phone.png b/res/mipmap-xhdpi/ic_launcher_folder_live_contacts_phone.png
deleted file mode 100644
index fd416b8..0000000
--- a/res/mipmap-xhdpi/ic_launcher_folder_live_contacts_phone.png
+++ /dev/null
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_folder_live_contacts_starred.png b/res/mipmap-xhdpi/ic_launcher_folder_live_contacts_starred.png
deleted file mode 100644
index ff9e326..0000000
--- a/res/mipmap-xhdpi/ic_launcher_folder_live_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/values-af-w470dp/strings.xml b/res/values-af-w470dp/strings.xml
deleted file mode 100644
index be3a350..0000000
--- a/res/values-af-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Onlangse opdaterings"</string>
-</resources>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 84862f1..61cb732 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Gunstelinge"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Foon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Oproeprekord"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Alle kontakte"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Gesterde kontakte"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakte met foonnommers"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Stuur teksboodskap"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Bel <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Redigeer nommer voor oproep"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Jy het nie enige kontakte om te wys nie. (As jy sopas \'n rekening bygevoeg het, kan dit \'n paar minute neem om kontakte te sinkroniseer.)"\n\n"Om kontakte by te voeg, druk "<font fgcolor="#ffffffff"><b>"Kieslys"</b></font>" en raak:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Rekeninge"</b></font>" om \'n rekening met kontakte by te voeg of op te stel wat jy met die tablet kan sinkroniseer"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Vertoonopsies"</b></font>" om te verander watter kontakte sigbaar is"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuwe kontak"</b></font>" om \'n nuwe kontak van meet af te skep"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Invoer/uitvoer "</b></font>"om kontakte van jou SD-kaart in te voer"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Jy het nie enige kontakte om te wys nie. (As jy sopas \'n rekening bygevoeg het, kan dit \'n paar minute neem om kontakte te sinkroniseer.)"\n\n"Om kontakte by te voeg, druk "<font fgcolor="#ffffffff"><b>"Kieslys"</b></font>" en raak:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Rekeninge"</b></font>" om \'n rekening met kontakte by te voeg of op te stel wat jy met die foon kan sinkroniseer"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Vertoonopsies"</b></font>" om te verander watter kontakte sigbaar is"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuwe kontak"</b></font>" om \'n splinternuwe kontak te skep"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Invoer/uitvoer"</b></font>" om kontakte van jou SD-kaart in te voer"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Jy het nie enige gunstelinge nie."\n\n" Om \'n kontak by jou lys gunstelinge te voeg:"\n\n" "<li>"Raak die "<b>"Kontakte"</b>"-oortjie"\n</li>" "\n<li>"Raak die kontak wat jy by jou gunstelinge wil voeg"\n</li>" "\n<li>"Raak die ster langs die kontak se naam"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Alle kontakte"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Gester"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Fone"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gebruik raak-nommerbord"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Keer terug na oproep wat besig is"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Voeg oproep by"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Gebeure"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Verhouding"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Groepe"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Skep kontak onder rekening"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Skep groep onder rekening"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Verwyder sinkroniseergroep"</string>
diff --git a/res/values-am-w470dp/strings.xml b/res/values-am-w470dp/strings.xml
deleted file mode 100644
index f15a298..0000000
--- a/res/values-am-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"የቅርብ ጊዜ አዘምን"</string>
-</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 7e7858c..234529c 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"ተወዳጆች"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"ስልክ"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"ምዝግብ ማስታወሻ"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"ሁሉም እውቅያዎች"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"ባለኮከብ ዕውቂያዎች"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"ዕውቂያዎችከስልክ ቁጥሮች ጋር"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"የፅሁፍ መልዕክት ላክ"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"ጥሪ <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ከመደወል በፊት ቁጥር አርትዕ"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"ለማሳየት ምንም ዕውቂያዎች የልዎትም።(መለያ ካከሉ፣ዕውቂያዎችን ለማሳመር ጥቂት ደቂቃዎች ይፈጃል።)"\n\n"ዕውቂያዎች ለማከል፣"<font fgcolor="#ffffffff"><b>"ምናሌ ይጫኑ"</b></font>\n\n<li><font fgcolor="#ffffffff"><b>"መለያዎች"</b></font>"ለማከል ወይም መለያዎች ን ከዕውቂያዎች ጋርለማወቃር ወደ ጡባዊው ማስመርይችላሉ፡ይንኩ።"\n</li>\n<li><font fgcolor="#ffffffff"><b>" አማራጮች"</b></font>"የትኞቹ ዕውቂያዎች እንደሚታዩለመለወጥአሳይ"\n</li>\n<li><font fgcolor="#ffffffff"><b>"አዲስ ዕውቂያ"</b></font>"አዲስ ዕውቂያ ከባዶ ለመፍጠር"\n</li>\n<li><font fgcolor="#ffffffff"><b>"አስመጣ/ላክ"</b></font>"ከ SD ካርድዎ ዕውቂያዎች ለማስመጣት"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"ለማሳየት ምንም ዕውቂያዎች የልዎትም።(መለያ ካከሉ፣ዕውቂያዎችን ለማሳመር ጥቂት ደቂቃዎች ይፈጃል።)"\n\n"ዕውቂያዎች ለማከል፣"<font fgcolor="#ffffffff"><b>"ምናሌ ይጫኑ"</b></font>"እና"\n\n<li><font fgcolor="#ffffffff"><b>"መለያዎች"</b></font>"ለማከል ወይም መለያዎችን ከዕውቂያዎች ጋር ለማወቃር ወደ ስልኩ ማሳመር ይችላሉ፡ይንኩ።"\n</li>\n<li><font fgcolor="#ffffffff"><b>"አማራጮች"</b></font>"የትኞቹ ዕውቂያዎች እንደሚታዩ ለመለወጥ አሳይ"\n</li>\n<li><font fgcolor="#ffffffff"><b>"አዲስ ዕውቂያ"</b></font>"አዲስ ዕውቂያ ከባዶ ለመፍጠር"\n</li>\n<li><font fgcolor="#ffffffff"><b>"አስገባ/ላክ"</b></font>"ከSIM ወይም SD ካርድ ዕውቂያዎች ለማስገባት"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"ምንም ተፈላጊዎች ምርጫ የልዎትም። "\n\n"ዕውቂያዎችዎን ወደ ተፈላጊ ዝርዝር ውስጥ ለማከል፡"\n\n<li>" የዕውቂያዎች"<b>" ትር"</b>" ይንኩ"\n</li>\n<li>" ወደ ተፈላጊዎች ምርጫ ለማከል የፈለጉትን ዕውቂያ ይንኩ"\n</li>\n<li>" ከዕውቂያ ዎች ስም ቀጥሎ ያለውን ኮከብ ይንኩ"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"ሁሉም እውቅያዎች"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"ኮከብ የተደረገባቸው"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"ስልኮች"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"የድምፅ ቁልፍ ሰሌዳን ንካ"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"በመካሄድ ላይ ወዳለው ጥሪ ተመለስ"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"ጥሪ ያክሉ"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"ክስተቶች"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"ግንኙነት"</string>
<string name="groupsLabel" msgid="8573535366319059326">"ቡድኖች"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"በመለያ ስር ዕውቂያ ፍጠር"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"በመለያ ስር ቡድን ፍጠር"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"የአሳምር ቡድን አስወግድ"</string>
diff --git a/res/values-ar-w470dp/strings.xml b/res/values-ar-w470dp/strings.xml
deleted file mode 100644
index dcb653d..0000000
--- a/res/values-ar-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"التحديثات الأخيرة"</string>
-</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index f99e7d7..6bc6cf4 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"المفضلة"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"الهاتف"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"سجل المكالمات"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"جميع جهات الاتصال"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"جهات الاتصال المميّزة بنجمة"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"جهات الاتصال التي تشتمل على أرقام هواتف"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"إرسال رسالة نصية"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"الاتصال بـ <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"تعديل الرقم قبل الاتصال"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"ليست لديك أية جهات اتصال لعرضها. (إذا أضفت حسابًا لتوك، فيمكن أن تستغرق مزامنة جهات الاتصال بضع دقائق.)"\n\n"لإضافة جهات اتصال، اضغط على "<font fgcolor="#ffffffff"><b>"القائمة"</b></font>" والمس:"\n" "\n<li><font fgcolor="#ffffffff"><b>"الحسابات"</b></font>" لإضافة أو تهيئة حساب ما به جهات الاتصال التي يمكنك مزامنتها إلى الجهاز اللوحي"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"خيارات العرض"</b></font>" لتغيير جهات الاتصال التي يمكن رؤيتها"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"جهة اتصال جديدة"</b></font>" لإنشاء جهة اتصال جديدة من البداية"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"استيراد/تصدير"</b></font>" لاستيراد جهات اتصال من بطاقة SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"ليست لديك أية جهات اتصال لعرضها. (إذا أضفت حسابًا لتوك، فيمكن أن تستغرق مزامنة جهات الاتصال بضع دقائق.)"\n\n"لإضافة جهات اتصال، اضغط على "<font fgcolor="#ffffffff"><b>"القائمة"</b></font>" والمس:"\n" "\n<li><font fgcolor="#ffffffff"><b>"الحسابات"</b></font>" لإضافة أو تهيئة حساب ما به جهات الاتصال التي يمكنك مزامنتها إلى الهاتف"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"خيارات العرض"</b></font>" لتغيير جهات الاتصال التي يمكن رؤيتها"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"جهة اتصال جديدة"</b></font>" لإنشاء جهة اتصال جديدة من البداية"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"استيراد/تصدير"</b></font>" لاستيراد جهات اتصال من بطاقة SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"ليس لديك أي عناصر في المفضلة."\n\n"لإضافة جهة اتصال إلى قائمة المفضلة:"\n\n" "<li>"المس علامة التبويب "<b>"جهات الاتصال"</b>\n</li>" "\n<li>"المس جهة الاتصال التي تريد إضافتها إلى المفضلة"\n</li>" "\n<li>"المس علامة النجمة إلى جانب اسم جهة الاتصال"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"جميع جهات الاتصال"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"مميّزة بنجمة"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"الهواتف"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"استخدام لوحة مفاتيح نغمات باللمس"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"عودة إلى المكالمة الجارية"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"إضافة مكالمة"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"الأحداث"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"العلاقة"</string>
<string name="groupsLabel" msgid="8573535366319059326">"المجموعات"</string>
- <string name="type_short_home" msgid="7770424864090605384">"د"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"جوال"</string>
- <string name="type_short_work" msgid="4925330752504537861">"أربعاء"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"ط"</string>
- <string name="type_short_other" msgid="5669407180177236769">"ض"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"إنشاء جهة اتصال ضمن حساب"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"إنشاء مجموعة ضمن حساب"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"إزالة مجموعة متزامنة"</string>
diff --git a/res/values-bg-w470dp/strings.xml b/res/values-bg-w470dp/strings.xml
deleted file mode 100644
index 42340bf..0000000
--- a/res/values-bg-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Скорошни актуализации"</string>
-</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 92ee5ce..1df2441 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Любими"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Телефон"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Списък на обажданията"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Всички контакти"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Контакти със звезда"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Контакти с тел. номера"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Изпращане на SMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Обаждане на <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Редактиране на номер преди обаждане"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Нямате контакти за показване. (Ако току-що сте добавили профил, синхронизирането им може да отнеме няколко минути.)"\n\n"За добавяне на контакти натиснете "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и докоснете:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Профили"</b></font>", за да добавите или конфигурирате профил с контакти, които можете да синхронизирате с таблета;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Опции за показване"</b></font>", за да промените кои контакти са видими;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Нов контакт"</b></font>", за да създадете съвсем нов контакт;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импортиране/Експортиране"</b></font>", за да импортирате контакти от своята SD карта."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Нямате контакти за показване. (Ако току-що сте добавили профил, синхронизирането им може да отнеме няколко минути.)"\n\n"За добавяне на контакти натиснете "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и докоснете:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Профили"</b></font>", за да добавите или конфигурирате профил с контакти, които можете да синхронизирате с телефона;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Опции за показване"</b></font>", за да промените кои контакти са видими;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Нов контакт"</b></font>", за да създадете съвсем нов контакт;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импортиране/Експортиране"</b></font>", за да импортирате контакти от своята SD карта."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Нямате любими контакти."\n\n"За добавяне на контакт към любими:"\n\n" "<li>"Докоснете раздела "<b>"Контакти"</b>\n</li>" "\n<li>"Докоснете желания контакт"\n</li>" "\n<li>"Докоснете звездата до името му"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Всички контакти"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Със звезда"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Телефони"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Използване на тонова клавиатура"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Назад към текущото обаждане"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Добавяне на обаждане"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Събития"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Отношение"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Групи"</string>
- <string name="type_short_home" msgid="7770424864090605384">"Д"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"М"</string>
- <string name="type_short_work" msgid="4925330752504537861">"О"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"П"</string>
- <string name="type_short_other" msgid="5669407180177236769">"Д"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Създаване на контакт в профил"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Създаване на група в профил"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Премахване на група за синхронизиране"</string>
diff --git a/res/values-ca-w470dp/strings.xml b/res/values-ca-w470dp/strings.xml
deleted file mode 100644
index de22b9d..0000000
--- a/res/values-ca-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Actualitzacions recents"</string>
-</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index a8062a9..bf08114 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferits"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telèfon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Registre de trucades"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Tots els contactes"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contactes destacats"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contactes amb números de telèfon"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Envia un missatge de text"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Truca a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Edita el número abans de trucar"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"No tens contactes per mostrar. (Si acabes d\'afegir un compte, és possible que la sincronització dels contactes trigui una mica.)"\n\n"Per afegir contactes, prem "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" i toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" per afegir o configurar un compte amb contactes que pots sincronitzar a la tauleta"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcions de visualització"</b></font>" per modificar quins contactes són visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nou contacte"</b></font>" per crear un contacte nou des de zero"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/Exporta"</b></font>" per importar contactes de la teva targeta SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"No tens contactes per mostrar. (Si acabes d\'afegir un compte, és possible que la sincronització dels contactes trigui una mica.)"\n\n"Per afegir contactes, prem "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" i toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" per afegir o configurar un compte amb contactes que pots sincronitzar amb el telèfon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcions de visualització"</b></font>" per modificar quins contactes són visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nou contacte"</b></font>" per crear un contacte nou des de zero"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/Exporta"</b></font>" per importar contactes de la teva targeta SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"No teniu preferits."\n\n"Per afegir un contacte a la llista de preferits:"\n\n" "<li>"Toqueu la pestanya"<b>"Contactes"</b>" "\n</li>" "\n<li>"Toqueu el contacte que voleu afegir als preferits"\n</li>" "\n<li>"Toqueu l\'estrella que hi ha al costat del nom del contacte"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Tots els contactes"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Destacats"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telèfons"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilitza el teclat de tons"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Torna a la trucada en curs"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Afegeix una trucada"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Esdeveniments"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relació"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grups"</string>
- <string name="type_short_home" msgid="7770424864090605384">"C"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"F"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"C"</string>
- <string name="type_short_other" msgid="5669407180177236769">"A"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Crea el contacte en un compte"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Creació d\'un grup al compte"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Elimina el grup de sincronització"</string>
diff --git a/res/values-cs-w470dp/strings.xml b/res/values-cs-w470dp/strings.xml
deleted file mode 100644
index e7012d7..0000000
--- a/res/values-cs-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Poslední aktualizace"</string>
-</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 4f02c8c..94f7e80 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Oblíbené"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Hovory"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Všechny kontakty"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Kontakty označené hvězdičkou"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakty s telefonním číslem"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Odeslat textovou zprávu"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Volat kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Před voláním upravit číslo"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nemáte žádné kontakty, které by bylo možné zobrazit. (Pokud jste právě přidali účet, může synchronizace kontaktů trvat několik minut.)"\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotkněte se položky:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", pokud chcete přidat nebo nakonfigurovat účet a kontakty v něm synchronizovat s tabletem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti zobrazení"</b></font>", pokud chcete změnit, které kontakty budou zobrazeny;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit úplně nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovat nebo exportovat"</b></font>", pokud chcete importovat kontakty z karty SD."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nemáte žádné kontakty, které by bylo možné zobrazit. (Pokud jste právě přidali účet, může synchronizace kontaktů trvat několik minut.)"\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotkněte se položky:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", pokud chcete přidat nebo nakonfigurovat účet a kontakty v něm synchronizovat s telefonem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti zobrazení"</b></font>", pokud chcete změnit, které kontakty budou zobrazeny;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit úplně nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovat nebo exportovat"</b></font>", pokud chcete importovat kontakty z karty SD."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nemáte žádné oblíbené kontakty."\n\n"Přidání kontaktu do seznamu oblíbených:"\n\n" "<li>"Dotkněte se karty "<b>"Kontakty"</b>"."\n</li>" "\n<li>"Dotkněte se kontaktu, který chcete přidat mezi oblíbené."\n</li>" "\n<li>"Dotkněte se hvězdičky vedle jména kontaktu."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Všechny kontakty"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Označené hvězdičkou"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefony"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Použít dotykovou tónovou klávesnici"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Návrat k probíhajícímu hovoru"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Přidat hovor"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Události"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Vztah"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Skupiny"</string>
- <string name="type_short_home" msgid="7770424864090605384">"D"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"P"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Vytvořit kontakt na základě účtu"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Vytvořit skupinu v účtu"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Odstranit synchronizovanou skupinu"</string>
diff --git a/res/values-da-w470dp/strings.xml b/res/values-da-w470dp/strings.xml
deleted file mode 100644
index 192334c..0000000
--- a/res/values-da-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Seneste opdateringer"</string>
-</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index d8d67e3..683a5b0 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorit"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Opk.liste"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Alle kontakter"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Stjernemarkerede kontakter"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakter med telefonnumre"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Send sms"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Ring til <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Rediger nummer inden opkald"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Du har ingen kontaktpersoner. (Hvis du lige har tilføjet en konto, kan det tage et par minutter at synkronisere kontaktpersoner)."\n\n"Hvis du vil tilføje kontaktpersoner, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontaktpersoner, som du kan synkronisere til tabletcomputeren"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsindstillinger"</b></font>" for at ændre, hvilke kontaktpersoner der er synlige"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontaktperson"</b></font>" for at oprette en helt ny kontaktperson"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>" for at importere kontaktpersoner fra dit SD-kort"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Du har ingen kontaktpersoner. (Hvis du lige har tilføjet en konto, kan det tage et par minutter at synkronisere kontaktpersoner)."\n\n"Hvis du vil tilføje kontaktpersoner, skal du trykke på "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" og "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>" for at tilføje eller konfigurere en konto med kontaktpersoner, som du kan synkronisere til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsindstillinger"</b></font>" for at ændre, hvilke kontaktpersoner der er synlige"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontaktperson"</b></font>" for at oprette en ny kontaktperson fra bunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>" for at importere kontaktpersoner fra dit SD-kort"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har ingen favoritter."\n\n"Sådan føjer du en kontaktperson til din liste over favoritter:"\n\n" "<li>"Tryk på fanen "<b>"Kontaktpersoner"</b>\n</li>" "\n<li>"Tryk på den kontaktperson, du ønsker at føje til dine foretrukne"\n</li>" "\n<li>"Tryk på stjerne ud for kontaktpersonens navn"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Alle kontakter"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Stjernemarkerede"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoner"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Brug touch-tone-tastatur"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Vend tilbage til igangværende opkald"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Tilføj opk."</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Begivenheder"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Forhold"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupper"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"O"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Opret kontakt under konto"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Opret gruppe på konto"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Fjern synkroniseringsgruppe"</string>
diff --git a/res/values-de-w470dp/strings.xml b/res/values-de-w470dp/strings.xml
deleted file mode 100644
index 98fbc22..0000000
--- a/res/values-de-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Neueste Aktualisierungen"</string>
-</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 0e4425e..4fe3c48 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriten"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Anrufe"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Alle Kontakte"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Markierte Kontakte"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakte mit Telefonnummern"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"SMS/MMS senden"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> anrufen"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Nr. vor Anruf bearbeiten"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Es können keine Kontakte angezeigt werden. Wenn Sie gerade ein Konto hinzugefügt haben, kann die Kontaktsynchronisierung etwas dauern."\n\n"Zum Hinzufügen von Kontakten drücken Sie auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und tippen dann auf "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto hinzuzufügen oder mit Kontakten für die Synchronisierung mit dem Tablet zu konfigurieren"\n" "</li>\n<li><font fgcolor="#ffffffff"><b>"Anzeigeoptionen"</b></font>", um zu ändern, welche Kontakte angezeigt werden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen Kontakt neu zu erstellen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>", um Kontakte von Ihrer SD-Karte zu importieren"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Es können keine Kontakte angezeigt werden. Wenn Sie gerade ein Konto hinzugefügt haben, kann die Kontaktsynchronisierung etwas dauern."\n\n"Zum Hinzufügen von Kontakten drücken Sie auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und berühren dann "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konten"</b></font>", um ein Konto hinzuzufügen oder mit Kontakten für die Synchronisierung mit dem Telefon zu konfigurieren."\n" "</li>\n<li><font fgcolor="#ffffffff"><b>"Anzeigeoptionen"</b></font>", um zu ändern, welche Kontakte angezeigt werden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen Kontakt neu zu erstellen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Es sind keine Favoriten vorhanden."\n\n"So fügen Sie einen Kontakt zu Ihrer Favoritenliste hinzu:"\n\n" "<li>"Berühren Sie den Tab "<b>"Kontakte"</b>"."\n</li>" "\n<li>"Berühren Sie den Kontakt, den Sie zu Ihren Favoriten hinzufügen möchten."\n</li>" "\n<li>"Berühren Sie den Stern neben dem Kontaktnamen."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Alle Kontakte"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Markiert"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Nummern"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Telefontastatur verwenden"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Zurück zum aktuellen Anruf"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Anruf hinzufügen"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Termine"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Beziehung"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Gruppen"</string>
- <string name="type_short_home" msgid="7770424864090605384">"P"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"A"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"S"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Neuen Kontakt unter Konto erstellen"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Konto für Gruppenerstellung"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Synchronisierungsgruppe entfernen"</string>
diff --git a/res/values-el-w470dp/strings.xml b/res/values-el-w470dp/strings.xml
deleted file mode 100644
index defd3a8..0000000
--- a/res/values-el-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Πρόσφατες ενημερώσεις"</string>
-</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index b2f5ca2..1915cd1 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Αγαπ."</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Τηλέφωνο"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Αρχείο"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Όλες οι επαφές"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Επαφές με αστέρι"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Επαφές με αριθμούς τηλεφώνου"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Αποστολή μηνύματος κειμένου"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Κλήση <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Επεξεργασία αριθμού πριν την κλήση"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Δεν έχετε επαφές προς προβολή. (Αν προσθέσατε κάποιον λογαριασμό μόλις τώρα, θα χρειαστούν λίγα λεπτά έως ότου γίνει ο συγχρονισμός.)"\n\n"Για την προσθήκη επαφών, πατήστε "<font fgcolor="#ffffffff"><b>"Μενού"</b></font>" και αγγίξτε την επιλογή:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Λογαριασμοί"</b></font>" για την προσθήκη ή διαμόρφωση λογαριασμού με επαφές τις οποίες μπορείτε να συγχρονίσετε στο tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Προβολή επιλογών"</b></font>" για να αλλάξετε τις επαφές που είναι ορατές"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Νέα επαφή"</b></font>" για δημιουργία νέας επαφής από το μηδέν"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Εισαγωγή/Εξαγωγή"</b></font>" για την εισαγωγή επαφών από την κάρτα SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Δεν έχετε επαφές προς προβολή. (Αν προσθέσατε κάποιον λογαριασμό μόλις τώρα, θα χρειαστούν λίγα λεπτά έως ότου γίνει ο συγχρονισμός.)"\n\n"Για την προσθήκη επαφών, πατήστε "<font fgcolor="#ffffffff"><b>"Μενού"</b></font>" και αγγίξτε την επιλογή:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Λογαριασμοί"</b></font>" για την προσθήκη ή διαμόρφωση λογαριασμού με επαφές τις οποίες μπορείτε να συγχρονίσετε στο τηλέφωνο"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Προβολή επιλογών"</b></font>" για να αλλάξετε τις επαφές που είναι ορατές"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Νέα επαφή"</b></font>" για δημιουργία νέας επαφής από το μηδέν"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Εισαγωγή/Εξαγωγή"</b></font>" για την εισαγωγή επαφών από την κάρτα SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Δεν έχετε αγαπημένα."\n\n"Για προσθήκη επαφής στη λίστα των αγαπημένων σας:"\n\n" "<li>"Αγγίξτε την καρτέλα "<b>"Επαφές"</b>\n</li>" "\n<li>"Αγγίξτε το όνομα της επαφής που θέλετε να προσθέσετε στα αγαπημένα σας"\n</li>" "\n<li>"Αγγίξτε το αστέρι πλάι στο όνομα της επαφής"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Όλες οι επαφές"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Με αστέρι"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Τηλέφωνα"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Χρησιμοποιήστε το πληκτρολόγιο αφής ηχητικών τόνων"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Επιστροφή στην κλήση που βρίσκεται σε εξέλιξη"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Προσθήκη κλήσης"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Συμβάντα"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Σχέση"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Ομάδες"</string>
- <string name="type_short_home" msgid="7770424864090605384">"Ο"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"Κ"</string>
- <string name="type_short_work" msgid="4925330752504537861">"Ε"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"Β"</string>
- <string name="type_short_other" msgid="5669407180177236769">"Α"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Δημιουργία επαφής στον λογαριασμό"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Δημιουργία ομάδας στο λογαριασμό"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Κατάργηση ομάδας συγχρονισμού"</string>
diff --git a/res/values-en-rGB-w470dp/strings.xml b/res/values-en-rGB-w470dp/strings.xml
deleted file mode 100644
index 0666e45..0000000
--- a/res/values-en-rGB-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Recent updates"</string>
-</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index c95149b..950d628 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Phone"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Call log"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"All contacts"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Starred contacts"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contacts with phone numbers"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Send text message"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Call <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Edit number before call"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"You don\'t have any contacts to display. (If you\'ve just added an account, it can take a few minutes to sync contacts.)"\n\n"To add contacts, press "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" and touch:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Accounts"</b></font>" to add or configure an account with contacts that you can sync to the tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Display options"</b></font>" to change which contacts are visible"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"New contact"</b></font>" to create a new contact from scratch"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>" to import contacts from your SD card"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"You don\'t have any contacts to display. (If you\'ve just added an account, it can take a few minutes to sync contacts.)"\n\n"To add contacts, press "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" and touch:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Accounts"</b></font>" to add or configure an account with contacts whom you can sync to the phone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Display options"</b></font>" to change which contacts are visible"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"New contact"</b></font>" to create a new contact from scratch"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>" to import contacts from your SD card"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"You don\'t have any favourites."\n\n"To add a contact to your list of favourites:"\n\n" "<li>"Touch the "<b>"Contacts"</b>" tab"\n</li>" "\n<li>"Touch the contact that you want to add to your favourites"\n</li>" "\n<li>"Touch the star next to the contact\'s name"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"All contacts"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Starred"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Phones"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Use touch tone keypad"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Return to call in progress"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Add call"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Events"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relationship"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Groups"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Create contact under account"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Create group under account"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Remove sync group"</string>
diff --git a/res/values-es-rUS-w470dp/strings.xml b/res/values-es-rUS-w470dp/strings.xml
deleted file mode 100644
index f8263d4..0000000
--- a/res/values-es-rUS-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Actualizaciones recientes"</string>
-</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 6a5be2f..f4e32cd 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Teléfono"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Llamadas"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Todos los contactos"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contactos marcados con estrella"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contactos con números de teléfono"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Enviar mensaje de texto"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Editar número antes de llamar"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar algunos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en el tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos desde tu tarjeta SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"No tienes ningún contacto para mostrar. (Si has agregado una cuenta, la sincronización de contactos puede demorar algunos minutos)."\n\n"Para agregar contactos, presiona "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para agregar y configurar una cuenta con contactos que puedes sincronizar en el teléfono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mostrar opciones"</b></font>" para cambiar los contactos que sean visibles"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear tú mismo un contacto nuevo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos desde tu tarjeta SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"No tienes ningún favorito."\n\n"Para agregar un contacto a tu lista de favoritos:"\n\n<li>"toca la pestaña "<b>"Contactos"</b>" "\n</li>" "\n<li>"toca el contacto que deseas agregar a tus favoritos"\n</li>" "\n<li>"toca el asterisco situado junto al nombre del contacto"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Todos los contactos"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Marcado con asterisco"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Teléfonos"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usar teclado de tonos del teléfono"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Regresar a la llamada en curso"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Agreg. Llam."</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Eventos"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relación"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupos"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"Lun."</string>
- <string name="type_short_work" msgid="4925330752504537861">"Mié."</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"Oct."</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Crear contacto según la cuenta"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Crear un grupo en la cuenta"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Eliminar grupo de sincronización"</string>
diff --git a/res/values-es-w470dp/strings.xml b/res/values-es-w470dp/strings.xml
deleted file mode 100644
index f8263d4..0000000
--- a/res/values-es-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Actualizaciones recientes"</string>
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 495d69d..cdf1b65 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -80,7 +80,7 @@
<string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear contacto nuevo"</string>
<string name="phoneLabelsGroup" msgid="6468091477851199285">"Teléfono"</string>
<string name="emailLabelsGroup" msgid="8389931313045344406">"Correo"</string>
- <string name="imLabelsGroup" msgid="3898238486262614027">"Nombre de chat"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"MI"</string>
<string name="postalLabelsGroup" msgid="3487738141112589324">"Dirección"</string>
<string-array name="otherLabels">
<item msgid="8287841928119937597">"Organización"</item>
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Teléfono"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Llamadas"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Todos los contactos"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contactos destacados"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contactos con números de teléfono"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Enviar un mensaje de texto"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Editar número antes de llamar"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización de contactos puede tardar unos minutos."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar con el tablet,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto, o"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"No tienes contactos. Si acabas de añadir una cuenta, la sincronización puede tardar."\n\n"Para añadir contactos, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y toca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Cuentas"</b></font>" para añadir o configurar una cuenta con contactos que puedes sincronizar,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opciones de visualización"</b></font>" para modificar los contactos visibles,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un nuevo contacto,"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/exportar"</b></font>" para importar contactos desde la tarjeta SD"\n</li>"."</string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"No tienes favoritos."\n\n"Para añadir un contacto a tu lista de favoritos, sigue estos pasos:"\n\n" "<li>"Toca en la pestaña "<b>"Contactos"</b>"."\n</li>" "\n<li>"Selecciona el contacto que quieras añadir a tus favoritos."\n</li>" "\n<li>"Toca la estrella situada junto al nombre del contacto."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Todos los contactos"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Destacados"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Teléfonos"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usar teclado táctil"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Volver a la llamada en curso"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Añadir llamada"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Eventos"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relación"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupos"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Crear contacto en la cuenta"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Crear grupo en cuenta"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Eliminar grupo de sincronización"</string>
@@ -401,7 +390,7 @@
<string name="name_phonetic_given" msgid="6853570431394449191">"Nombre fonético"</string>
<string name="name_phonetic_middle" msgid="8643721493320405200">"Segundo nombre fonético"</string>
<string name="name_phonetic_family" msgid="462095502140180305">"Apellido fonético"</string>
- <string name="name_phonetic" msgid="4259595234312430484">"Transcripción fonética nombre"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Transcripción fonética del nombre"</string>
<string name="connections" msgid="8098440723172028350">"Conexiones"</string>
<string name="add_connection_button" msgid="4861308615789601727">"Añadir conexión"</string>
<string name="recent_updates" msgid="2062236709538790412">"Reciente"</string>
@@ -423,7 +412,7 @@
<string name="take_new_photo" msgid="7341354729436576304">"Hacer una foto nueva"</string>
<string name="pick_photo" msgid="448886509158039462">"Seleccionar foto de la galería"</string>
<string name="pick_new_photo" msgid="7962368009197147617">"Seleccionar nueva foto de la galería"</string>
- <string name="locale_change_in_progress" msgid="7583992153091537467">"La lista de contactos se está actualizando para reflejar el cambio de idioma."</string>
+ <string name="locale_change_in_progress" msgid="7583992153091537467">"Se está actualizando la lista de contactos con el cambio de idioma."</string>
<string name="upgrade_in_progress" msgid="474511436863451061">"La lista de contactos se está actualizando."</string>
<string name="upgrade_out_of_memory" msgid="6153384328042175667">"Los contactos se están actualizando. "\n\n"Este proceso requiere aproximadamente <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> Mb de espacio de almacenamiento interno."\n\n"Elige una de las siguientes opciones:"</string>
<string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Desinstalar algunas aplicaciones"</string>
@@ -477,7 +466,7 @@
<string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Añadir al contacto"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Cerrar"</string>
<string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7356532842767854606">"Introducir año"</string>
+ <string name="date_year_toggle" msgid="7356532842767854606">"Introducir un año"</string>
<string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
<string name="social_widget_loading" msgid="3697996166985327861">"Cargando..."</string>
<string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear contacto nuevo"</string>
diff --git a/res/values-fa-w470dp/strings.xml b/res/values-fa-w470dp/strings.xml
deleted file mode 100644
index 3aba993..0000000
--- a/res/values-fa-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"بهروزرسانیهای اخیر"</string>
-</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f5ba67d..de7a72f 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"موارد دلخواه"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"تلفن"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"گزارش تماس"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"همه مخاطبین"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"مخاطبین ستاره دار"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"مخاطبین دارای شماره تلفن"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"ارسال پیام متنی"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"تماس با <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ویرایش شماره قبل از تماس"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"شما مخاطبی برای نمایش ندارید. (در صورتی که اکنون یک حساب اضافه کرده اید، همگام سازی مخاطبین چند دقیقه طول می کشد.)"\n\n"برای افزودن مخاطبین، "<font fgcolor="#ffffffff"><b>"منو"</b></font>" را فشار داده و این موارد را لمس کنید:"\n" "\n<li><font fgcolor="#ffffffff"><b>"حساب ها"</b></font>" برای افزودن یا پیکربندی یک حساب با مخاطبینی که می توانید در رایانه لوحی همگام سازی کنید"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"گزینه های نمایش"</b></font>" برای تغییر مخاطبینی که قابل رؤیت هستند"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"مخاطب جدید"</b></font>" برای ایجاد یک مخاطب جدید از ابتدا"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"وارد کردن/صادر کردن"</b></font>" برای وارد کردن مخاطبان از کارت SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"شما مخاطبی برای نمایش ندارید. (در صورتی که اکنون یک حساب اضافه کرده باشید، همگام سازی مخاطبین چند دقیقه طول می کشد.)"\n\n"برای افزودن مخاطب، "<font fgcolor="#ffffffff"><b>"منو"</b></font>" را فشار داده و این موارد را لمس کنید:"\n" "\n<li><font fgcolor="#ffffffff"><b>"حساب ها"</b></font>" برای افزودن یا پیکربندی یک حساب با مخاطبینی که می توانید در تلفن همگام سازی کنید"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"گزینه های نمایش"</b></font>" برای تغییر مخاطبینی که قابل رؤیت هستند"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"مخاطب جدید"</b></font>" جهت ایجاد یک مخاطب جدید از ابتدا"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"وارد کردن/صادر کردن"</b></font>"برای وارد کردن مخاطبان از کارت SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"شما هیچ مورد دلخواهی ندارید."\n\n"برای افزودن یک مخاطب به لیست موارد دلخواه خود: "\n\n" "<li>"برگه "<b>"مخاطبین"</b>\n</li>" را لمس کنید"\n<li>"مخاطبی را که می خواهید به لیست موارد دلخواه خود اضافه کنید لمس کنید"\n</li>" "\n<li>"ستاره واقع در کنار نام مخاطب را لمس کنید"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"همه مخاطبین"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"ستاره دار"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"تلفن ها"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"استفاده از صفحه کلید لمسی"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"برگشت به تماس در حال انجام"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"افزودن تماس"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"رویدادها"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"رابطه"</string>
<string name="groupsLabel" msgid="8573535366319059326">"گروه ها"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"p"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"ایجاد مخاطبین تحت حساب"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"ایجاد گروه تحت حساب کاربری"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"حذف گروه همگام سازی"</string>
diff --git a/res/values-fi-w470dp/strings.xml b/res/values-fi-w470dp/strings.xml
deleted file mode 100644
index 2516eb5..0000000
--- a/res/values-fi-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Uusimmat päivitykset"</string>
-</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 9948142..96e6d65 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Suosikit"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Puhelin"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Puheluloki"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Kaikki yhteystiedot"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Tähdelliset yhteystiedot"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Yhteystiedot, joissa on puhelinnumero"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Lähetä tekstiviesti"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Soita: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Muokkaa numeroa ennen puhelua"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Ei näytettäviä yhteystietoja. (Jos lisäsit tilin äskettäin, yhteystietojen synkronointi voi kestää muutaman minuutin.)"\n\n"Lisää yhteystietoja painamalla "<font fgcolor="#ffffffff"><b>"Valikko"</b></font>" ja koskettamalla "\n" "\n<li><font fgcolor="#ffffffff"><b>"Tilit"</b></font>" lisätäksesi tilin tai muokataksesi tiliä, jonka yhteystiedot voit synkronoida tablet-laitteen kanssa"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Näyttövalinnat"</b></font>" muuttaaksesi sitä, mitkä yhteystiedot ovat näkyvissä"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Uudet yhteystiedot"</b></font>" luodaksesi uudet yhteystiedot alusta alkaen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Tuo/vie"</b></font>" tuodaksesi yhteystietoja SD-kortiltasi"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Ei näytettäviä yhteystietoja. (Jos lisäsit tilin äskettäin, yhteystietojen synkronointi voi kestää muutaman minuutin.)"\n\n"Lisää yhteystietoja painamalla "<font fgcolor="#ffffffff"><b>"Valikko"</b></font>" ja koskettamalla "\n" "\n<li><font fgcolor="#ffffffff"><b>"Tilit"</b></font>" lisätäksesi tilin tai muokataksesi tiliä, jonka yhteystiedot voit synkronoida puhelimen kanssa"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Näyttövalinnat"</b></font>" muuttaaksesi sitä, mitkä yhteystiedot ovat näkyvissä"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Uudet yhteystiedot"</b></font>" luodaksesi uudet yhteystiedot alusta alkaen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Tuo/vie"</b></font>" tuodaksesi yhteystietoja SD-kortiltasi"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Sinulla ei ole suosikkeja."\n\n"Yhteystiedon lisääminen suosikkeihin:"\n\n" "<li>"Kosketa "<b>"Yhteystiedot"</b>"-välilehteä"\n</li>" "\n<li>"Kosketa yhteystietoa, jonka haluat lisätä suosikkeihisi"\n</li>" "\n<li>"Kosketa yhteystiedon nimen vieressä näkyvää tähteä"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Kaikki yhteystiedot"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Tähdelliset"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Puhelinnumerot"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Käytä näppäimistöä"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Palaa käynnissä olevaan puheluun"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Lisää puhelu"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Tapahtumat"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Suhde"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Ryhmät"</string>
- <string name="type_short_home" msgid="7770424864090605384">"K"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"T"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"H"</string>
- <string name="type_short_other" msgid="5669407180177236769">"T"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Luo yhteystieto tilissä"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Luo ryhmä tilissä"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Poista synkronointiryhmä"</string>
diff --git a/res/values-fr-w470dp/strings.xml b/res/values-fr-w470dp/strings.xml
deleted file mode 100644
index 8308393..0000000
--- a/res/values-fr-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Mises à jour récentes"</string>
-</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index d5039f3..196d573 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoris"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Tél."</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Appels"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Tous les contacts"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contacts suivis"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contacts avec numéro de téléphone"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Envoyer un SMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Appeler <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Modifier le numéro avant d\'effectuer l\'appel"</string>
@@ -161,18 +158,15 @@
<string name="simContacts_title" msgid="27341688347689769">"Contacts de carte SIM"</string>
<string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Vous n\'avez aucun contact à afficher. Si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes."</string>
<string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Vous n\'avez aucun contact à afficher."</string>
- <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:560 in java.io.StringReader@431b9fb1) -->
- <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:567 in java.io.StringReader@4a913fe2) -->
+ <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:560 in java.io.StringReader@2d3bad12) -->
+ <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:567 in java.io.StringReader@28df8ff1) -->
<string name="noContactsHelpTextWithSync" product="tablet" msgid="2364665535969139880">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>", puis sur :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts vers la tablette ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier les paramètres de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SIM ou SD."\n</li></string>
<string name="noContactsHelpTextWithSync" product="default" msgid="3017521127042216243">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier le paramètre de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SIM ou SD."\n</li></string>
- <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:565 in java.io.StringReader@5f934ad) -->
- <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:571 in java.io.StringReader@2bf14ceb) -->
+ <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:565 in java.io.StringReader@6d632c2d) -->
+ <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /b read: font (position:END_TAG </font>@1:571 in java.io.StringReader@9e97676) -->
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>", puis sur :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts vers la tablette ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier les paramètres de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SD."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Vous n\'avez aucun contact à afficher (si vous venez d\'ajouter un compte, la synchronisation des contacts peut prendre quelques minutes)."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Comptes"</b></font>" pour ajouter ou configurer un compte dont vous pourrez synchroniser les contacts sur le téléphone ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Options d\'affichage"</b></font>" pour modifier le paramètre de visibilité des contacts ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Exporter"</b></font>" pour importer des contacts depuis votre carte SD."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Vous ne disposez d\'aucun favoris."\n\n"Pour ajouter un contact à la liste de favoris :"\n\n" "<li>"Appuyez sur l\'onglet "<b>"Contacts"</b>"."\n</li>" "\n<li>"Appuyez sur le contact à ajouter à vos favoris."\n</li>" "\n<li>"Appuyez sur l\'étoile en regard du nom du contact."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Tous les contacts"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Suivis"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Téléphones"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utiliser le clavier DTMF"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Reprendre l\'appel en cours"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Autre appel"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Événements"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relation"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Groupes"</string>
- <string name="type_short_home" msgid="7770424864090605384">"D"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"B"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"T"</string>
- <string name="type_short_other" msgid="5669407180177236769">"A"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Créer un contact sous le compte"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Sélectionner le compte associé au groupe"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Supprimer le groupe de synchronisation"</string>
diff --git a/res/values-hi-w470dp/strings.xml b/res/values-hi-w470dp/strings.xml
deleted file mode 100644
index bf258c6..0000000
--- a/res/values-hi-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"हाल ही के अपडेट"</string>
-</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index aed2f1b..f1159a2 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"पसंदीदा"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"फ़ोन"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"कॉल लॉग"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"सभी संपर्क"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"तारांकित संपर्क"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"फ़ोन नंबर वाले संपर्क"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"पाठ संदेश भेजें"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> को कॉल करें"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"कॉल करने से पहले नंबर संपादित करें"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"प्रदर्शन के लिए आपके पास कोई भी संपर्क नहीं है. (यदि आपने अभी कोई खाता जोड़ा हो, तो संपर्कों को सिंक करने में कुछ मिनट लग सकते हैं.)"\n\n"संपर्कों को जोड़ने के लिए,"<font fgcolor="#ffffffff"><b>"मेनू"</b></font>" दबाएं और आप टेबलेट से सिंक कर सकें ऐसे संपर्कों वाले किसी खाते को जोड़ने या कॉन्फ़िगर करने के लिए "\n" "\n<li><font fgcolor="#ffffffff"><b>"खाते"</b></font>" स्पर्श करें"\n</li>" "\n<li>"कौन से संपर्क दिखाई दें यह बदलने के लिए "<font fgcolor="#ffffffff"><b>"प्रदर्शन विकल्प"</b></font>" स्पर्श करें"\n</li>" "\n<li>"कोई नया संपर्क शुरुआत से बनाने के लिए "<font fgcolor="#ffffffff"><b>"नया संपर्क"</b></font>" स्पर्श करें"\n</li>" "\n<li>"अपने सिम या SD कार्ड से संपर्कों को आयात करने के लिए "<font fgcolor="#ffffffff"><b>"आयात/निर्यात"</b></font>" स्पर्श करें"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"प्रदर्शन के लिए आपके पास कोई भी संपर्क नहीं है. (यदि आपने अभी कोई खाता जोड़ा हो, तो संपर्कों को सिंक करने में कुछ मिनट लग सकते हैं.)"\n\n"संपर्कों को जोड़ने के लिए, "<font fgcolor="#ffffffff"><b>"मेनू"</b></font>" दबाएं और आप फ़ोन से सिंक कर सकें ऐसे संपर्कों वाले किसी खाते को जोड़ने या कॉन्फ़िगर करने के लिए "\n" "\n<li><font fgcolor="#ffffffff"><b>"खाते"</b></font>" स्पर्श करें"\n</li>" "\n<li>"कौन से संपर्क दिखाई दें यह बदलने के लिए "<font fgcolor="#ffffffff"><b>"प्रदर्शन विकल्प"</b></font>" स्पर्श करें"\n</li>" "\n<li>"कोई नया संपर्क शुरुआत से बनाने के लिए "<font fgcolor="#ffffffff"><b>"नया संपर्क"</b></font>" स्पर्श करें"\n</li>" "\n<li>"अपने सिम या SD कार्ड से संपर्कों को आयात करने के लिए "<font fgcolor="#ffffffff"><b>"आयात/निर्यात"</b></font>" स्पर्श करें"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"आपके पास कोई भी पसंदीदा नहीं है."\n\n"अपने पसंदीदा की सूची में कोई संपर्क जोड़ने के लिए:"\n\n" "<li>" "<b>"संपर्क"</b>" टैब स्पर्श करें"\n</li>" "\n<li>"उस संपर्क को स्पर्श करें जिसे आप अपने पसंदीदा में जोड़ना चाहते हैं"\n</li>" "\n<li>"संपर्क के नाम के पास वाले तारे को स्पर्श करें"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"सभी संपर्क"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"तारांकित"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Phones"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"टच टोन कीपैड का उपयोग करें"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"कॉल पर लौटना प्रगति पर है"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"कॉल जोड़ें"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"ईवेंट"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"संबंध"</string>
<string name="groupsLabel" msgid="8573535366319059326">"समूह"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"खाते के तहत संपर्क बनाएं"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"खाते के तहत समूह बनाएं"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"सिंक समूह निकालें"</string>
@@ -560,7 +549,7 @@
<string name="external_profile_title" msgid="8034998767621359438">"मेरी <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफ़ाइल"</string>
<string name="toast_displaying_all_contacts" msgid="2737388783898593875">"सभी संपर्क प्रदर्शित कर रहा है"</string>
<string name="no_account_prompt" msgid="7061052512446855192">"लोग Google खाते के साथ बेहतर तरीके से कार्य करते हैं."\n\n"• किसी भी वेब ब्राउज़र से पहुंचें."\n"• सुरक्षित रूप से अपने संपर्कों का बैकअप लें."</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"अपना फ़ोन खो देने पर भी अपने संपर्क सुरक्षित रखें: किसी ऑनलाइन सेवा से समन्वयित करें."</string>
+ <string name="generic_no_account_prompt" msgid="7218827704367325460">"आपना फ़ोन खो देने पर भी अपने संपर्क सुरक्षित रखें: किसी ऑनलाइन सेवा से समन्वयित करें."</string>
<string name="generic_no_account_prompt_title" msgid="753783911899054860">"कोई खाता जोड़ें"</string>
<string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"आपके नए संपर्क का बैक अप नहीं लिया जाएगा. ऐसा खाता जोड़ें जो संपर्कों का ऑनलाइन बैक अप ले?"</string>
<string name="contact_editor_prompt_one_account" msgid="8669032699767375976">"आपका नया संपर्क <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> के साथ समन्वयित किया जाएगा."</string>
diff --git a/res/values-hr-w470dp/strings.xml b/res/values-hr-w470dp/strings.xml
deleted file mode 100644
index 86486e7..0000000
--- a/res/values-hr-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Nedavna ažuriranja"</string>
-</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index eaed945..400ce50 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriti"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Zapisnik poziva"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Svi kontakti"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Kontakti označeni zvjezdicom"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakti s telefonskim brojevima"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Pošalji tekstnu poruku"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Nazovi <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Uredi broj prije pozivanja"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nemate kontakata za prikaz. (Ako ste upravo dodali račun, sinkronizacija kontakata može potrajati nekoliko minuta.)"\n\n"Za dodavanje kontakata pritisnite "<font fgcolor="#ffffffff"><b>"Izbornik"</b></font>" i dodirnite:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Računi"</b></font>" kako biste dodali ili konfigurirali račun s kontaktima koje možete sinkronizirati s tabletnim uređajem"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcije prikaza"</b></font>" kako biste promijenili koji su kontakti vidljivi"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novi kontakt"</b></font>" kako biste stvorili posve novi kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Uvoz/Izvoz"</b></font>" kako biste uvezli kontakte sa svoje SD kartice"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nemate kontakata za prikaz. (Ako ste upravo dodali račun, sinkronizacija kontakata može potrajati nekoliko minuta.)"\n\n"Za dodavanje kontakata pritisnite "<font fgcolor="#ffffffff"><b>"Izbornik"</b></font>" i dodirnite:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Računi"</b></font>" kako biste dodali ili konfigurirali račun s kontaktima koje možete sinkronizirati s mobitelom"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcije prikaza"</b></font>" kako biste promijenili koji su kontakti vidljivi"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novi kontakt"</b></font>" kako biste stvorili posve novi kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Uvoz/Izvoz"</b></font>" kako biste uvezli kontakte sa svoje SIM ili SD kartice"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nemate favorita."\n\n"Da biste dodali kontakt svojem popisu favorita:"\n\n" "<li>"Dodirnite karticu "<b>"Kontakti"</b>" "\n</li>" "\n<li>"Dodirnite kontakt koji želite dodati u favorite"\n</li>" "\n<li>"Dodirnite zvjezdicu pokraj naziva kontakta"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Svi kontakti"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Sa zvjezdicom"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoni"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Koristi dodirnu zvučnu tipkovnicu"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Natrag na poziv u tijeku"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Dodaj poziv"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Događaji"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupe"</string>
- <string name="type_short_home" msgid="7770424864090605384">"K"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"P"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"D"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Izrada kontakta pod računom"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Napravite skupinu pod računom"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Ukloni grupu sinkronizacije"</string>
diff --git a/res/values-hu-w470dp/strings.xml b/res/values-hu-w470dp/strings.xml
deleted file mode 100644
index f9446b3..0000000
--- a/res/values-hu-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Legújabb frissítések"</string>
-</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 4f1f90a..d222096 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kedvencek"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Híváslista"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Összes névjegy"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Csillagozott névjegyek"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Névjegyek telefonszámmal"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"SMS küldése"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> hívása"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Szám szerkesztése hívás előtt"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nincsenek megjeleníthető névjegyei. (Ha most adott hozzá egy fiókot, a szinkronizálás eltarthat pár percig.)"\n\n"Névjegyek hozzáadásához nyomja meg a "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" gombot, majd érintse meg a"\n" "\n<li><font fgcolor="#ffffffff"><b>"Fiókok"</b></font>" lehetőséget olyan, névjegyekkel rendelkező fiók hozzáadásához vagy konfigurálásához, amelyet szinkronizálhat a táblagépen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Megjelenítési beállítások"</b></font>" annak beállításához, hogy mely névjegyek láthatók"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Új névjegy"</b></font>" teljesen új névjegy létrehozásához"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importálás/Exportálás"</b></font>" SIM- vagy SD-kártyáról történő importáláshoz"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nincsenek megjeleníthető névjegyei. (Ha most adott hozzá egy fiókot, a szinkronizálás eltarthat pár percig.)"\n\n"Névjegyek hozzáadásához nyomja meg a "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" gombot, majd érintse meg a"\n" "\n<li><font fgcolor="#ffffffff"><b>"Fiókok"</b></font>" lehetőséget olyan, névjegyekkel rendelkező fiók hozzáadásához vagy konfigurálásához, amelyet szinkronizálhat a telefonon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Megjelenítési beállítások"</b></font>" annak beállításához, hogy mely névjegyek láthatók"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Új névjegy"</b></font>" teljesen új névjegy létrehozásához"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importálás/Exportálás"</b></font>" SIM- vagy SD-kártyáról történő importáláshoz"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nincsenek kedvencei."\n\n"Így adhat hozzá névjegyet a kedvencek listájához:"\n\n" "<li>"Érintse meg a "<b>"Címtár"</b>" lapot"\n</li>" "\n<li>"Érintse meg a kedvencekhez hozzáadni kívánt névjegyet"\n</li>" "\n<li>"Érintse meg az ismerős neve melletti csillagot"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Összes névjegy"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Csillaggal megjelölt"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefonszámok"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Hangkódos telefonbillentyűzet használata"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Vissza a folyamatban lévő híváshoz"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Hívás hozzáadása"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Események"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Kapcsolat"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Csoportok"</string>
- <string name="type_short_home" msgid="7770424864090605384">"O"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"Mh"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"Cs"</string>
- <string name="type_short_other" msgid="5669407180177236769">"E"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Névjegy létrehozása a következő fiókban"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Csoport létrehozása a fiókban"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Szinkronizálási csoport eltávolítása"</string>
diff --git a/res/values-in-w470dp/strings.xml b/res/values-in-w470dp/strings.xml
deleted file mode 100644
index 3ef1ea3..0000000
--- a/res/values-in-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Pembaruan terkini"</string>
-</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 4dfb4cb..47b3eda 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorit"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telepon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Log panggilan"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Semua kenalan"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Kenalan yang berkilau bintangnya"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kenalan dengan nomor telepon"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Kirim SMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Panggil <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Edit nomor sebelum memanggil"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Anda tidak memiliki kenalan untuk ditampilkan. (Jika Anda baru saja menambahkan akun, dibutuhkan beberapa menit untuk menyinkronkan kenalan.)"\n\n"Untuk menambahkan kenalan, tekan "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" dan sentuh:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Akun"</b></font>" untuk menambahkan atau mengonfigurasi akun dengan kenalan yang dapat Anda sinkronkan ke tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opsi tampilan"</b></font>" untuk mengubah kenalan mana yang dapat dilihat"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Kenalan baru"</b></font>" untuk membuat kenalan baru dari awal"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Impor/Ekspor"</b></font>" untuk mengimpor kenalan dari kartu SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Anda tidak memiliki kenalan untuk ditampilkan. (Jika Anda baru saja menambahkan akun, dibutuhkan beberapa menit untuk menyinkronkan kenalan.)"\n\n"Untuk menambahkan kenalan, tekan "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" dan sentuh:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Akun"</b></font>" untuk menambahkan atau mengonfigurasi akun dengan kenalan yang dapat Anda sinkronkan ke ponsel"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opsi tampilan"</b></font>" untuk mengubah kenalan mana yang dapat dilihat"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Kenalan baru"</b></font>" untuk membuat kenalan baru dari awal"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Impor/Ekspor"</b></font>" untuk mengimpor kenalan dari kartu SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Anda tidak memiliki favorit."\n\n"Untuk menambahkan kenalan ke daftar favorit:"\n\n" "<li>"Sentuh tab "<b>"Kenalan"</b>\n</li>" "\n<li>"Sentuh kenalan yang ingin Anda tambahkan ke favorit"\n</li>" "\n<li>"Sentuh bintang di samping nama kenalan"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Semua kenalan"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Yang berkilau bintangnya"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telepon"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gunakan keypad nada sentuh"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Kembali ke panggilan sedang berlangsung"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Tambahkan panggilan"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Acara"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Hubungan"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grup"</string>
- <string name="type_short_home" msgid="7770424864090605384">"R"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"S"</string>
- <string name="type_short_work" msgid="4925330752504537861">"K"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Buat kenalan di bawah akun"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Buat grup dalam akun"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Hapus grup sinkronisasi"</string>
@@ -462,7 +451,7 @@
<string name="list_filter_all_starred" msgid="5031734941601931356">"Yang berkilau bintangnya"</string>
<string name="list_filter_custom" msgid="8910173055702057002">"Ubahsuaian"</string>
<string name="list_filter_customize" msgid="2035084418635775579">"Ubahsuaikan..."</string>
- <string name="list_filter_phones" msgid="735313795643493365">"Semua kenalan dengan nomor telepon"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Semua data kenalan dengan nomor telepon"</string>
<string name="list_filter_single" msgid="5871400283515893087">"Kenalan"</string>
<string name="custom_list_filter" msgid="7836035257402013957">"Tentukan tampilan ubahsuaian"</string>
<string name="contact_list_loading" msgid="3859280390185230582">"Memuat ..."</string>
diff --git a/res/values-it-w470dp/strings.xml b/res/values-it-w470dp/strings.xml
deleted file mode 100644
index af85aff..0000000
--- a/res/values-it-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Aggiornamenti recenti"</string>
-</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 918e485..cf9ed54 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -97,8 +97,8 @@
<string name="noAccounts" msgid="4742609114153797268">"Per creare gruppi è necessario un account"</string>
<string name="noMatchingContacts" msgid="4266283206853990471">"Nessun contatto corrispondente trovato."</string>
<string name="noContactsWithPhoneNumbers" msgid="1605457050218824269">"Nessun contatto con numeri di telefono."</string>
- <string name="savingContact" msgid="4075751076741924939">"Salvataggio contatto..."</string>
- <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvataggio opzioni di visualizzazione..."</string>
+ <string name="savingContact" msgid="4075751076741924939">"Salvataggio contatto in corso..."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvataggio opzioni di visualizzazione in corso..."</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contatto salvato"</string>
<string name="contactSavedErrorToast" msgid="9189098776225004666">"Errore, impossibile salvare le modifiche ai contatti."</string>
<string name="groupSavedToast" msgid="6675062559302493011">"Gruppo salvato"</string>
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferiti"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefono"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Chiamate"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Tutti i contatti"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contatti speciali"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contatti con numeri di telefono"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Invia messaggio di testo"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Chiama <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Modifica prima di chiamare"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Non sono presenti contatti da visualizzare (se hai appena aggiunto un account, la sincronizzazione dei contatti potrebbe richiedere alcuni minuti)."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e tocca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Account"</b></font>" per aggiungere o configurare un account con contatti sincronizzabili con il tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opzioni di visualizzazione"</b></font>" per modificare i contatti visibili"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare da zero un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/esporta"</b></font>" per importare contatti dalla scheda SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Non sono presenti contatti da visualizzare (se hai appena aggiunto un account, la sincronizzazione dei contatti potrebbe richiedere alcuni minuti)."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e tocca:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Account"</b></font>" per aggiungere o configurare un account con contatti sincronizzabili con il telefono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opzioni di visualizzazione"</b></font>" per modificare i contatti visibili"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare da zero un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa/esporta"</b></font>" per importare contatti dalla scheda SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Non sono presenti preferiti."\n\n"Per aggiungere un contatto al tuo elenco di preferiti:"\n\n<li>"Tocca la scheda "<b>"Contatti."</b>\n</li>" "\n<li>"Tocca il contatto da aggiungere ai preferiti."\n</li>" "\n<li>"Tocca la stella accanto al nome del contatto."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Tutti i contatti"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Speciali"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoni"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usa tastierino per selezione a toni"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Torna alla chiamata in corso"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Aggiungi"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Eventi"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relazione"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Gruppi"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Crea contatto sotto account"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Crea un gruppo nell\'account"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Rimuovi gruppo sinc."</string>
@@ -428,7 +417,7 @@
<string name="upgrade_out_of_memory" msgid="6153384328042175667">"Upgrade dei contatti in corso."\n\n"La procedura di upgrade richiede circa <xliff:g id="SIZE_IN_MEGABYTES">%s</xliff:g> MB di memoria interna."\n\n"Scegli una delle seguenti opzioni:"</string>
<string name="upgrade_out_of_memory_uninstall" msgid="1721798828992091432">"Disinstalla alcune applicazioni"</string>
<string name="upgrade_out_of_memory_retry" msgid="8431289830472724609">"Riprova l\'aggiornamento"</string>
- <string name="search_results_searching" msgid="7755623475227227314">"Ricerca..."</string>
+ <string name="search_results_searching" msgid="7755623475227227314">"Ricerca in corso..."</string>
<string name="menu_display_selected" msgid="6470001164297969034">"Mostra selezionati"</string>
<string name="menu_display_all" msgid="8887488642609786198">"Mostra tutto"</string>
<string name="menu_select_all" msgid="621719255150713545">"Seleziona tutto"</string>
diff --git a/res/values-iw-w470dp/strings.xml b/res/values-iw-w470dp/strings.xml
deleted file mode 100644
index 274d45c..0000000
--- a/res/values-iw-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"עדכונים אחרונים"</string>
-</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index a2dc0e1..eaf18e4 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"מועדפים"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"טלפון"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"יומן שיחות"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"כל אנשי הקשר"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"אנשי קשר מסומנים בכוכב"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"אנשי קשר עם מספרי טלפון"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"שלח הודעת טקסט"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"התקשר אל <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ערוך מספר לפני השיחה"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"אין לך אנשי קשר להצגה. (אם בדיוק הוספת חשבון, ייתכן שידרשו מספר דקות לסינכרון אנשי הקשר.)"\n\n"כדי להוסיף אנשי קשר, הקש על "<font fgcolor="#ffffffff"><b>"תפריט"</b></font>" וגע באפשרות:"\n" "\n<li><font fgcolor="#ffffffff"><b>"חשבונות"</b></font>" כדי להוסיף או להגדיר חשבון עם אנשי קשר שתוכל לסנכרן לטבלט"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"אפשרויות תצוגה"</b></font>" כדי לשנות את אנשי הקשר הגלויים"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"איש קשר חדש"</b></font>" כדי ליצור איש קשר חדש לגמרי"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"ייבוא/ייצוא"</b></font>" כדי לייבא אנשי קשר מכרטיס SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"אין לך אנשי קשר להצגה. (אם הוספת הרגע חשבון, דרושות כמה דקות לסינכרון אנשי הקשר.)"\n\n"כדי להוסיף אנשי קשר, לחץ על "<font fgcolor="#ffffffff"><b>"תפריט"</b></font>" וגע באפשרות:"\n" "\n<li><font fgcolor="#ffffffff"><b>"חשבונות"</b></font>" כדי להוסיף או להגדיר חשבון עם אנשי קשר שתוכל לסנכרן עם הטלפון"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"אפשרויות תצוגה"</b></font>" כדי לשנות את אנשי הקשר הגלויים"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"איש קשר חדש"</b></font>" כדי ליצור איש קשר חדש לגמרי"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"יבוא/יצוא"</b></font>" כדי לייבא אנשי קשר מכרטיס כרטיס SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"אין לך מועדפים."\n\n"כדי להוסיף איש קשר לרשימת המועדפים:"\n\n" "<li>"גע בכרטיסייה "<b>"אנשי קשר"</b>\n</li>" "\n<li>"גע באיש הקשר שברצונך להוסיף למועדפים"\n</li>" "\n<li>"גע בכוכב שליד שמו של איש הקשר"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"כל אנשי הקשר"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"מסומן בכוכבית"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"טלפונים"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"השתמש במקלדת עם חיוג צלילים"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"חזור לשיחה מתבצעת"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"הוסף שיחה"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"אירועים"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"קשר"</string>
<string name="groupsLabel" msgid="8573535366319059326">"קבוצות"</string>
- <string name="type_short_home" msgid="7770424864090605384">"ב\'"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"נ\'"</string>
- <string name="type_short_work" msgid="4925330752504537861">"ע\'"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"ז\'"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"צור איש קשר בחשבון"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"צור קבוצה עבור חשבון"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"הסר קבוצת סינכרון"</string>
diff --git a/res/values-ja-w470dp/strings.xml b/res/values-ja-w470dp/strings.xml
deleted file mode 100644
index 7e215c9..0000000
--- a/res/values-ja-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"最近の更新"</string>
-</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 83ed14a..9fa6c2b 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"お気入り"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"電話"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"通話履歴"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"すべての連絡先"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"スター付きの連絡先"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"電話番号のある連絡先"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"SMSを送信"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g>に発信"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"発信前に番号を編集"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"表示できる連絡先がありません(アカウントを追加した場合は、連絡先が同期されるまでに数分かかることがあります)。"\n\n"連絡先を追加するには、まず"<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押し:"\n\n<li>"タブレットと同期する連絡先のアカウントを追加または設定する場合は["<font fgcolor="#ffffffff"><b>"アカウント"</b></font>"]をタップします"\n</li>\n<li>"表示される連絡先を変更するには["<font fgcolor="#ffffffff"><b>"表示オプション"</b></font>"]をタップします"\n</li>" "\n<li>"新しい連絡先を最初から作成する場合は["<font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>"]をタップします"\n</li>" "\n<li>"SDカードから連絡先をインポートする場合は["<font fgcolor="#ffffffff"><b>"インポート/エクスポート"</b></font>"]をタップします"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"表示できる連絡先がありません(アカウントを追加した場合は、連絡先が同期されるまでに数分かかることがあります)。"\n\n"連絡先を追加するには、まず"<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押し:"\n\n<li>"電話との同期が可能な連絡先のアカウントを追加または設定する場合は["<font fgcolor="#ffffffff"><b>"アカウント"</b></font>"]をタップします"\n</li>\n<li>"表示される連絡先を変更するには["<font fgcolor="#ffffffff"><b>"表示オプション"</b></font>"]をタップします"\n</li>" "\n<li>"新しい連絡先を最初から作成する場合は["<font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>"]をタップします"\n</li>" "\n<li>"SDカードから連絡先をインポートする場合は["<font fgcolor="#ffffffff"><b>"インポート/エクスポート"</b></font>"]をタップします"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"お気に入りはありません。"\n\n"お気に入りのリストに連絡先を追加するには: "\n\n<li>"["<b>"連絡先"</b>"]タブをタップします"\n</li>" "\n<li>"お気に入りに追加する連絡先をタップします"\n</li>" "\n<li>"連絡先名の横にあるスターをタップします"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"すべての連絡先"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"スター付き"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"電話"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"プッシュホン式キーパッドを使う"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"保留中の通話に戻る"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"別の通話を追加"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"予定"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"関係"</string>
<string name="groupsLabel" msgid="8573535366319059326">"グループ"</string>
- <string name="type_short_home" msgid="7770424864090605384">"自宅"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"携帯"</string>
- <string name="type_short_work" msgid="4925330752504537861">"勤務先"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"ポケベル"</string>
- <string name="type_short_other" msgid="5669407180177236769">"その他"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"アカウントに連絡先を作成"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"次のアカウントにグループを作成"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"同期グループを削除"</string>
diff --git a/res/values-ko-w470dp/strings.xml b/res/values-ko-w470dp/strings.xml
deleted file mode 100644
index 738c9cb..0000000
--- a/res/values-ko-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"최근 업데이트"</string>
-</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 6be2179..582e8bf 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"즐겨찾기"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"휴대전화"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"통화기록"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"모든 주소록"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"중요주소록"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"전화번호가 포함된 주소록"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"문자 메시지 보내기"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"전화걸기: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"통화하기 전에 번호 수정"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"표시할 연락처가 없습니다. 방금 계정을 추가한 경우 연락처를 동기화하는 데 몇 분 정도 걸릴 수 있습니다."\n\n"연락처를 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 터치합니다."\n" "\n<li><font fgcolor="#ffffffff"><b>"계정"</b></font>": 태블릿에 동기화할 수 있는 연락처가 있는 계정을 구성하거나 추가하려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"표시 옵션"</b></font>": 표시되는 연락처를 변경하려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"새 연락처"</b></font>": 연락처를 새로 만들려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"가져오기/내보내기"</b></font>": SD 카드에서 연락처를 가져오려면 터치합니다."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"표시할 연락처가 없습니다. 방금 계정을 추가한 경우 연락처를 동기화하는 데 몇 분 정도 걸릴 수 있습니다."\n\n"연락처를 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 터치합니다."\n" "\n<li><font fgcolor="#ffffffff"><b>"계정"</b></font>": 휴대전화에 동기화할 수 있는 연락처가 있는 계정을 구성하거나 추가하려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"표시 옵션"</b></font>": 표시되는 연락처를 변경하려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"새 연락처"</b></font>": 연락처를 새로 만들려면 터치합니다."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"가져오기/내보내기"</b></font>": SD 카드에서 연락처를 가져오려면 터치합니다."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"즐겨찾기가 없습니다. "\n\n"즐겨찾기 목록에 연락처를 추가하려면 "\n\n<li><b>"주소록"</b>" 탭을 터치하고"\n</li>" "\n<li>"즐겨찾기에 추가할 연락처를 터치하고"\n</li>" "\n<li>"연락처 이름 옆의 별표를 터치합니다."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"모든 연락처"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"중요 주소록"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"전화번호"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"터치톤 키패드 사용"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"진행 중인 통화로 돌아가기"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"통화 추가"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"일정"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"관계"</string>
<string name="groupsLabel" msgid="8573535366319059326">"그룹"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"연락처 추가할 계정 선택하기"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"계정에서 그룹 만들기"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"동기화 그룹 삭제"</string>
diff --git a/res/values-lt-w470dp/strings.xml b/res/values-lt-w470dp/strings.xml
deleted file mode 100644
index e9464ca..0000000
--- a/res/values-lt-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Naujausi naujiniai"</string>
-</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 5947c54..bdea851 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Adresynas"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefonas"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Skambučių žurnalas"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Visi adresatai"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Žvaigždute pažymėti adresatai"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Adresatai su telefono numeriais"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Siųsti teksto pranešimą"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Skambinti <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Redaguoti numerį prieš skambutį"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Neturite pateiktinų kontaktų. (Jei ką tik pridėjote paskyrą, kontaktų sinchronizavimas gali užtrukti kelias minutes.)"\n\n"Jei norite pridėti kontaktų, paspauskite "<font fgcolor="#ffffffff"><b>"Meniu"</b></font>" ir palieskite:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Paskyros"</b></font>", kad pridėtumėte ar konfigūruotumėte paskyrą su kontaktais, kuriuos galite sinchronizuoti su planšetiniu kompiuteriu;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Pateikties parinktys"</b></font>", kad pakeistumėte matomus kontaktus;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Naujas kontaktas"</b></font>", kad sukurtumėte visiškai naują kontaktą;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuoti / eksportuoti"</b></font>", kad importuotumėte kontaktus iš SD kortelės"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Neturite pateiktinų kontaktų. (Jei ką tik pridėjote paskyrą, kontaktų sinchronizavimas gali užtrukti kelias minutes.)"\n\n"Jei norite pridėti kontaktų, paspauskite "<font fgcolor="#ffffffff"><b>"Meniu"</b></font>" ir palieskite:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Paskyros"</b></font>", kad pridėtumėte ar konfigūruotumėte paskyrą su kontaktais, kuriuos galite sinchronizuoti su telefonu;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Pateikties parinktys"</b></font>", kad pakeistumėte matomus kontaktus;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Naujas kontaktas"</b></font>", kad sukurtumėte visiškai naują kontaktą;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuoti / eksportuoti"</b></font>", kad importuotumėte kontaktus iš SD kortelės"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nėra adresyno įrašų."\n\n"Jei norite pridėti adresatą prie adresyno sąrašo:"\n\n" "<li>"Palieskite skirtuką "<b>"Adresinė"</b>\n</li>" "\n<li>"Palieskite adresatą, kurį norite pridėti prie adresyno"\n</li>" "\n<li>"Palieskite šalia adresato vardo esančią žvaigždutę"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Visi adresatai"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Pažymėta žvaigždute"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefonai"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Naudoti jutiklinę klaviatūrą"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Grįžti prie vykdomo skambučio"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Pridėti skambutį"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Įvykiai"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Ryšys"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupės"</string>
- <string name="type_short_home" msgid="7770424864090605384">"N"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"D"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"K"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Kurti adresatą paskyroje"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Kurti grupę paskyroje"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Pašalinti sinchronizuojamą grupę"</string>
diff --git a/res/values-lv-w470dp/strings.xml b/res/values-lv-w470dp/strings.xml
deleted file mode 100644
index 7276263..0000000
--- a/res/values-lv-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Nesen veiktie atjauninājumi"</string>
-</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index a266f21..2398506 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izlase"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Zvanīt"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Zvanu žurnāls"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Visas kontaktpersonas"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Ar zvaigznīti atzīmētas kontaktpersonas"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontaktpersonas ar tālruņa numuriem"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Sūtīt īsziņu"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Zvanīt: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Rediģēt numuru pirms zvanīšanas"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nav parādāmu kontaktpersonu. (Ja tikko pievienojāt kontu, kontaktpersonu sinhronizēšana var ilgt dažas minūtes.)"\n\n"Lai pievienotu kontaktpersonas, nospiediet "<font fgcolor="#ffffffff"><b>"Izvēlne"</b></font>" un pieskarieties:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>", lai pievienotu vai konfigurētu kontu ar kontaktpersonām, ko var sinhronizēt ar planšetdatoru;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Attēlošanas opcijas"</b></font>", lai mainītu redzamās kontaktpersonas;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Jauna kontaktpersona"</b></font>", lai izveidotu jaunu kontaktpersonu;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importēt/eksportēt"</b></font>", lai importētu kontaktpersonas no SD kartes."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nav parādāmu kontaktpersonu. (Ja tikko pievienojāt kontu, kontaktpersonu sinhronizēšana var ilgt dažas minūtes.)"\n\n"Lai pievienotu kontaktpersonas, nospiediet "<font fgcolor="#ffffffff"><b>"Izvēlne"</b></font>" un pieskarieties:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konti"</b></font>", lai pievienotu vai konfigurētu kontu ar kontaktpersonām, ko var sinhronizēt ar tālruni;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Attēlošanas opcijas"</b></font>", lai mainītu redzamās kontaktpersonas;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Jauna kontaktpersona"</b></font>", lai izveidotu jaunu kontaktpersonu;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importēt/eksportēt"</b></font>", lai importētu kontaktpersonas no SD kartes."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Jūs neesat izveidojis izlasi."\n\n"Lai pievienotu kontaktpersonu izlasei, rīkojieties šādi:"\n\n" "<li>"Pieskarieties cilnei "<b>"Kontaktpersonas"</b>"."\n</li>" "\n<li>"Pieskarieties kontaktpersonai, kuru vēlaties pievienot izlasei."\n</li>" "\n<li>"Pieskarieties zvaigznītei blakus kontaktpersonas vārdam."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Visas kontaktpersonas"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Atzīmēti ar zvaigznīti"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Tālruņi"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Izmantot skārientoņu tastatūru"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Atgriezties pie pašreizējā zvana"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Pievienot zvanu"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Notikumi"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Saistība"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupas"</string>
- <string name="type_short_home" msgid="7770424864090605384">"M"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"D"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"C"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Izveidot jaunu kontaktpersonu kontā"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Izveidot grupu šajā kontā:"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Noņemt sinhronizējamo grupu"</string>
@@ -560,7 +549,7 @@
<string name="external_profile_title" msgid="8034998767621359438">"Mans <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profils"</string>
<string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Tiek attēlotas visas kontaktpersonas"</string>
<string name="no_account_prompt" msgid="7061052512446855192">"Lietotne People darbojas labāk ar Google kontu."\n\n"• Piekļuve no jebkuras tīmekļa pārlūkprogrammas"\n"• Droša kontaktinformācijas dublēšana"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Nodrošinieties pret kontaktpersonu zudumu pat tālruņa nozaudēšanas gadījumā — sinhronizējiet informāciju ar tiešsaistes pakalpojumu."</string>
+ <string name="generic_no_account_prompt" msgid="7218827704367325460">"Nodrošinieties pret kontaktpersonu zaudēšanu pat tālruņa nozaudēšanas gadījumā — sinhronizējiet informāciju ar tiešsaistes pakalpojumu."</string>
<string name="generic_no_account_prompt_title" msgid="753783911899054860">"Konta pievienošana"</string>
<string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Jaunā kontaktinformācija netiks dublēta. Vai pievienot kontu, kurā tiek tiešsaistē dublēta kontaktinformācija?"</string>
<string name="contact_editor_prompt_one_account" msgid="8669032699767375976">"Jaunā kontaktinformācija tiks sinhronizēta ar kontu <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
diff --git a/res/values-ms-w470dp/strings.xml b/res/values-ms-w470dp/strings.xml
deleted file mode 100644
index 0c98649..0000000
--- a/res/values-ms-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Kemas kini terbaru"</string>
-</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 0ffb00b..824ea19 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kegemaran"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Log panggilan"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Semua kenalan"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Kenalan yang dibintangkan"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kenalan dengan nombor telefon"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Hantar mesej teks"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Panggil <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Edit nombor sebelum panggilan"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Anda tiada sebarang kenalan untuk dipaparkan. (Jika anda baru sahaja menambah akaun, ia boleh mengambil masa beberapa minit untuk menyegerakkan kenalan.)"\n\n"Untuk menambah kenalan, tekan "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" dan sentuh:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Akaun"</b></font>" untuk menambah atau mengkonfigurasikan akaun yang mempunyai kenalan yang anda boleh segerakkan ke tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Pilihan paparan"</b></font>" untuk menukar kenalan mana yang boleh dilihat"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Kenalan baru"</b></font>" untuk membuat kenalan baru dari mula"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Eksport"</b></font>" untuk mengimport kenalan dari kad SD anda"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Anda tiada sebarang kenalan untuk dipaparkan. (Jika anda baru sahaja menambah akaun, beberapa minit diperlukan untuk menyegerakkan kenalan.)"\n\n"Untuk menambah kenalan, tekan "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" dan sentuh:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Akaun"</b></font>" untuk menambah atau mengkonfigurasikan akaun yang mempunyai kenalan yang anda boleh segerakkan ke telefon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Pilihan paparan"</b></font>" untuk menukar kenalan mana yang kelihatan"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Kenalan baru"</b></font>" untuk membuat kenalan baru dari mula"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Eksport"</b></font>" untuk mengimport kenalan dari kad SD anda"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Anda tiada sebarang kegemaran."\n\n"Untuk menambah kenalan ke senarai kegemaran anda:"\n\n" "<li>"Sentuh tab "<b>"Kenalan"</b>\n</li>" "\n<li>"Sentuh kenalan yang anda mahu tambahkan ke kegemaran anda"\n</li>" "\n<li>"Sentuh bintang bersebelahan dengan nama kenalan itu"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Semua kenalan"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Dibintangkan"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefon"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gunakan pad kekunci nada sentuh"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Kembali ke panggilan yang sedang berlangsung"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Tambah panggilan"</string>
@@ -307,11 +301,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Acara"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Hubungan"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Kumpulan"</string>
- <string name="type_short_home" msgid="7770424864090605384">"R"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"K"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"L"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Wujudkan kenalan di bawah akaun"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Buat kumpulan di bawah akaun"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Alih keluar kumpulan penyegerakan"</string>
diff --git a/res/values-nb-w470dp/strings.xml b/res/values-nb-w470dp/strings.xml
deleted file mode 100644
index 70e22ae..0000000
--- a/res/values-nb-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Nylige oppdateringer"</string>
-</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index efc8544..28cff9b 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritter"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Logg"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Alle kontakter"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Kontakter med stjerne"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakter med telefonnummer"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Send SMS-melding"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Rediger nummer før anrop"</string>
@@ -161,18 +158,15 @@
<string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
<string name="noContactsHelpTextWithSyncForCreateShortcut" msgid="801504710275614594">"Du har ingen kontakter å vise. (Hvis du nettopp har lagt til en konto, kan det ta noen minutter å synkronisere kontaktene.)"</string>
<string name="noContactsHelpTextForCreateShortcut" msgid="3081286388667108335">"Du har ingen kontakter å vise."</string>
- <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:292 in java.io.StringReader@70eb7859) -->
- <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:293 in java.io.StringReader@732a54f9) -->
+ <!-- syntax error in translation for noContactsHelpText (6450346791169710787) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:292 in java.io.StringReader@3e34a1fc) -->
+ <!-- syntax error in translation for noContactsHelpText (7633826236417884130) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:293 in java.io.StringReader@7176c74b) -->
<string name="noContactsHelpTextWithSync" product="tablet" msgid="2364665535969139880">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>", og trykk deretter på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer"</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til nettbrettet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt fra grunnen av"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/Eksporter"</b></font>" for å importere kontakter fra SIM- eller SD-kort"\n</li></string>
<string name="noContactsHelpTextWithSync" product="default" msgid="3017521127042216243">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer "</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/Eksportér"</b></font>" for å importere kontakter fra SIM- eller SD-kort"\n</li></string>
- <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@6030e280) -->
- <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@296672d6) -->
+ <!-- syntax error in translation for noContactsNoSimHelpText (6031363021287849874) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@2d16471f) -->
+ <!-- syntax error in translation for noContactsNoSimHelpText (467658807711582876) org.xmlpull.v1.XmlPullParserException: expected: /li read: font (position:END_TAG </font>@1:297 in java.io.StringReader@11975b59) -->
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>", og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer"</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til nettbrettet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt fra grunnen av"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer/eksporter"</b></font>" for å importere kontakter fra SD-kortet"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Du har ingen kontakter å vise. (Hvis du nylig la til en konto, kan det ta noen minutter å synkronisere kontaktene.)"\n\n"Slik legger du til kontakter: Trykk på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" og trykk deretter på: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontoer "</b></font>" for å legge til eller konfigurere en konto med kontakter som kan synkroniseres til telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativer"</b></font>" for å endre hvilke kontakter som vises"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å opprette en ny kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importér/eksportér"</b></font>" for å importere kontakter fra SD-kortet"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har ingen favoritter."\n\n"Slik legger du til en kontakt i favorittlisten:"\n\n" "<li>"Trykk på fanen "<b>"Kontakter"</b>" "\n</li>" "\n<li>"Trykk på kontakten du vil legge til i favoritter"\n</li>" "\n<li>"Trykk på stjernen ved siden av kontaktnavnet"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Alle kontakter"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Med stjerne"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoner"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Bruk tonetastatur"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Gå tilbake til pågående samtale"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Legg til en samtale"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Arrangementer"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relasjon"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupper"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"J"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"A"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Opprett kontakt under konto"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Opprett gruppe under konto"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Fjern synkronisert gruppe"</string>
diff --git a/res/values-nl-w470dp/strings.xml b/res/values-nl-w470dp/strings.xml
deleted file mode 100644
index 198faf3..0000000
--- a/res/values-nl-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Recente updates"</string>
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 367918c..a341061 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriet"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefoon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Gesprek"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Alle contacten"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contacten met ster"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contacten met telefoonnummers"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Sms verzenden"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> bellen"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Nummer bewerken voor bellen"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"U heeft geen contacten om weer te geven. (Als u net een account heeft toegevoegd, kan het enkele minuten duren voordat de contacten zijn gesynchroniseerd.)"\n\n"Als u contacten wilt toevoegen, drukt u op "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" en raakt u de volgende opties aan:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Accounts"</b></font>" om een account toe te voegen of te configureren met contacten die u kunt synchroniseren met de tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Weergaveopties"</b></font>" om de zichtbaarheid van contacten te wijzigen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nieuw contact"</b></font>" om een geheel nieuw contact te maken"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importeren/exporteren"</b></font>" om contacten van uw SD-kaart te importeren"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"U heeft geen contacten om weer te geven. (Als u net een account heeft toegevoegd, kan het enkele minuten duren voordat de contacten zijn gesynchroniseerd.)"\n\n"Als u contacten wilt toevoegen, drukt u op "<font fgcolor="#ffffffff"><b>"\'Menu\'"</b></font>" en raakt u de volgende opties aan:"\n" "\n<li><font fgcolor="#ffffffff"><b>"\'Accounts\'"</b></font>" om een account toe te voegen of te configureren met contacten die u kunt synchroniseren met de telefoon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Weergaveopties\'"</b></font>" om de zichtbaarheid van contacten te wijzigen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Nieuw contact\'"</b></font>" om een geheel nieuw contact te maken"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"\'Importeren/exporteren\'"</b></font>" om contacten van uw SD-kaart te importeren"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"U heeft geen favorieten."\n\n"U kunt als volgt een contact toevoegen aan uw lijst met favorieten:"\n\n" "<li>"Raak het tabblad \'"<b>"Contacten"</b>"\' aan."\n</li>" "\n<li>"Raak het contact aan dat u wilt toevoegen aan uw favorieten."\n</li>" "\n<li>"Raak de ster aan die wordt weergegeven naast de naam van het contact."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Alle contacten"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Met ster"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoons"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Toetsen voor toonkiezen gebruiken"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Terug naar actief gesprek"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Oproep toevoegen"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Afspraken"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relatie"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Groepen"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Contact in account maken"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Groep in account maken"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Synchronisatiegroep verwijderen"</string>
diff --git a/res/values-pl-w470dp/strings.xml b/res/values-pl-w470dp/strings.xml
deleted file mode 100644
index bdab73f..0000000
--- a/res/values-pl-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Najnowsze aktualizacje"</string>
-</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 7f87ae5..0709d24 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Ulubione"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Rejestr"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Wszystkie kontakty"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Kontakty z gwiazdką"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakty z numerami telefonów"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Wyślij wiadomość tekstową"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Zadzwoń do: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Edytuj numer przed nawiązaniem połączenia"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nie masz żadnych kontaktów do wyświetlenia. (Jeśli przed chwilą dodano konto, synchronizacja kontaktów może potrwać kilka minut)."\n\n"Aby dodać kontakty, naciśnij przycisk "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i dotknij opcji:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konta"</b></font>", aby dodać lub skonfigurować konto zawierające kontakty, które można synchronizować z tabletem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcje wyświetlania"</b></font>", aby zmienić widoczne typy kontaktów;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>", aby utworzyć nowy kontakt od początku;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuj/eksportuj"</b></font>", aby zaimportować kontakty z karty SD."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nie masz żadnych kontaktów do wyświetlenia. (Jeśli przed chwilą dodano konto, synchronizacja kontaktów może potrwać kilka minut)."\n\n"Aby dodać kontakty, naciśnij przycisk "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i dotknij opcji: "\n" "\n<li><font fgcolor="#ffffffff"><b>"Konta"</b></font>", aby dodać lub skonfigurować konto zawierające kontakty, które można synchronizować z telefonem;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opcje wyświetlania"</b></font>", aby zmienić widoczne typy kontaktów;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>", aby utworzyć nowy kontakt od początku;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuj/eksportuj"</b></font>", aby zaimportować kontakty z karty SD."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nie masz żadnych ulubionych kontaktów."\n\n"Aby dodać kontakt do listy ulubionych:"\n\n" "<li>"Dotknij karty "<b>"Kontakty"</b>"."\n</li>" "\n<li>"Dotknij kontaktu, który chcesz dodać do ulubionych."\n</li>" "\n<li>"Dotknij ikony gwiazdki obok nazwy kontaktu."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Wszystkie kontakty"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Oznaczone gwiazdką"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefony"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Użyj klawiatury tonowej"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Powrót do aktywnego połączenia"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Dodaj połączenie"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Wydarzenia"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relacja"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupy"</string>
- <string name="type_short_home" msgid="7770424864090605384">"D"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"K"</string>
- <string name="type_short_work" msgid="4925330752504537861">"S"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"I"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Utwórz kontakt na koncie"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Utwórz grupę na koncie"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Usuń grupę synchronizacji"</string>
diff --git a/res/values-pt-rPT-w470dp/strings.xml b/res/values-pt-rPT-w470dp/strings.xml
deleted file mode 100644
index d656eb4..0000000
--- a/res/values-pt-rPT-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Atualizações recentes"</string>
-</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index bb367ae..9d68669 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefone"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Chamadas"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Todos os contactos"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contactos marcados com estrela"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contactos com números de telefone"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Enviar mensagem de texto"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Ligar a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Editar número antes de efectuar a chamada"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Não tem contactos para apresentar (se acabou de adicionar uma conta, a sincronização dos contactos pode demorar alguns minutos)."\n\n"Para adicionar contactos, prima "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contactos que pode sincronizar com o tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de visualização"</b></font>" para alterar os contactos visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contacto"</b></font>" para criar um novo contacto de raiz"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos do cartão SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Não tem contactos para apresentar (se acabou de adicionar uma conta, a sincronização dos contactos pode demorar alguns minutos)."\n\n"Para adicionar contactos, prima "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contactos que pode sincronizar com o telemóvel"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de visualização"</b></font>" para alterar os contactos visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contacto"</b></font>" para criar um novo contacto de raiz"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contactos do cartão SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Não tem favoritos."\n\n"Para adicionar um contacto à sua lista de favoritos:"\n\n" "<li>"Toque no separador "<b>"Contactos"</b>" "\n</li>" "\n<li>"Toque no contacto que pretende adicionar aos favoritos"\n</li>" "\n<li>"Toque na estrela junto ao nome do contacto"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Todos os contactos"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Marcado com estrela"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefones"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilizar teclado numérico com tons de toque"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Voltar à chamada em curso"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Adicionar chamada"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Eventos"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relacionamento"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupos"</string>
- <string name="type_short_home" msgid="7770424864090605384">"R"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"T"</string>
- <string name="type_short_work" msgid="4925330752504537861">"E"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Criar contacto subordinado à conta"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Criar grupo na conta"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Remover grupo de sincronização"</string>
diff --git a/res/values-pt-w470dp/strings.xml b/res/values-pt-w470dp/strings.xml
deleted file mode 100644
index d656eb4..0000000
--- a/res/values-pt-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Atualizações recentes"</string>
-</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 5e6fb4b..6b5432c 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefone"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Chamadas"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Todos os contatos"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contatos com estrela"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contatos com números de telefone"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Enviar SMS/MMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Chamar <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Editar número antes da chamada"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Você não tem contatos para exibir. Sse acabou de adicionar uma conta, pode levar alguns minutos para sincronizar os contatos."\n\n"Para adicionar contatos, pressione "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contatos que possam ser sincronizados com o tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de exibição"</b></font>" para alterar quais contatos ficam visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contato"</b></font>" para criar um novo contato do início"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contatos do cartão SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Você não tem contatos para exibir (se acabou de adicionar uma conta, pode levar alguns minutos para sincronizar os contatos)."\n\n"Para adicionar contatos, pressione "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e toque em:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contas"</b></font>" para adicionar ou configurar uma conta com contatos que possam ser sincronizados com o telefone"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opções de exibição"</b></font>" para alterar quais contatos ficam visíveis"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Novo contato"</b></font>" para criar um novo contato do início"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" para importar contatos do chip ou cartão SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Você não tem nenhum favorito."\n\n"Para adicionar um contato à sua lista de favoritos:"\n\n" "<li>"Toque na guia "<b>"Contatos"</b>\n</li>" "\n<li>"Toque no contato que deseja adicionar aos seus favoritos"\n</li>" "\n<li>"Toque na estrela ao lado do nome do contato"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Todos os contatos"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Com estrela"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefones"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usar teclado multifrequencial"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Retornar para a chamada em espera"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Ad. cham."</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Eventos"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relacionamento"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupos"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Criar contato na conta"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Criar grupo na conta"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Remover sincronização do grupo"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 0ca4e74..2614043 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -156,9 +156,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favurits"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Cloms"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Tut ils contacts"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Contacts marcads"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Contacts cun numers da telefon"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Trametter in SMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Telefonar a(d) <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Modifitgar il numer avant che telefonar"</string>
@@ -195,9 +192,6 @@
<!-- outdated translation 9040060730467973050 --> <string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"\"Vus n\'avais nagins contacts per mussar. (I po cuzzar in pèr minutas per sincronisar ils contacts en cas che Vus avais gist agiuntà in conto.)"\n\n"Per agiuntar contacts, smatgai sin "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e smatgai suenter sin:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contos"</b></font>" per agiuntar u configurar in conto che cuntegna contacts che Vus pudais sincronisar cun il telefonin."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opziuns da vista"</b></font>" per definir tge contacts che vegnan mussads"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nov contact"</b></font>" per cumenzar a crear in nov contact"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" per importar contacts da Vossa carta SD"\n</li>"\""</string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"\"Vus n\'avais nagins contacts per mussar. (I po cuzzar in pèr minutas per sincronisar ils contacts en cas che Vus avais gist agiuntà in conto.)"\n\n"Per agiuntar contacts, smatgai sin "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e smatgai suenter sin:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contos"</b></font>" per agiuntar u configurar in conto che cuntegna contacts che Vus pudais sincronisar cun il telefonin."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opziuns da vista"</b></font>" per definir tge contacts che vegnan mussads"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nov contact"</b></font>" per cumenzar a crear in nov contact"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar/Exportar"</b></font>" per importar contacts da Vossa carta SD"\n</li>"\""</string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Vus n\'avais nagins favurits."\n\n"Per agiuntar in contact a la glista da favurits:"\n\n" "<li>"Smatgai sin il register "<b>"Contacts"</b>"."\n</li>" "\n<li>"Smatgai sin il contact che duai vegnir agiuntà a Voss favurits."\n</li>" "\n<li>"Smatgai sin la staila dal contact correspundent."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Tut ils contacts"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Cun staila"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Numers"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilisar la tastatura dal telefon"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Enavos al clom actual"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Agiuntar in clom"</string>
@@ -365,11 +359,6 @@
<skip />
<!-- no translation found for groupsLabel (8573535366319059326) -->
<skip />
- <string name="type_short_home" msgid="7770424864090605384">"P"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"F"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"A"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Crear in contact sut il conto"</string>
<!-- no translation found for dialog_new_group_account (2318032089273496830) -->
<skip />
diff --git a/res/values-ro-w470dp/strings.xml b/res/values-ro-w470dp/strings.xml
deleted file mode 100644
index 0b72d55..0000000
--- a/res/values-ro-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Actualizări recente"</string>
-</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 72cf5b2..66473bc 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorite"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Jurnal de apeluri"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Toată Agenda"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Persoane din agendă marcate cu stea"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Persoane din Agendă cu numere de telefon"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Trimiteţi un mesaj text"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Apelaţi <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Modificaţi numărul înainte de apelare"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nu există persoane din agendă de afişat. (Dacă aţi adăugat recent un cont, poate dura câteva minute până la finalizarea sincronizării persoanelor din agendă.)"\n\n"Dacă doriţi să adăugaţi persoane în agendă, apăsaţi pe "<font fgcolor="#ffffffff"><b>"Meniu"</b></font>" şi atingeţi:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Conturi"</b></font>" pentru a adăuga sau a configura un cont cu persoane din agendă, pe care le puteţi sincroniza cu cele de pe tabletă"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opţiuni de afişare"</b></font>" pentru a modifica persoanele din agendă care sunt vizibile"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Persoană nouă în agendă"</b></font>" pentru a crea de la zero o intrare nouă în agendă"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importaţi/Exportaţi"</b></font>" pentru a importa persoane din agendă de pe cardul SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nu există persoane din agendă de afişat. (Dacă aţi adăugat recent un cont, poate dura câteva minute până la finalizarea sincronizării persoanelor din agendă.)"\n\n"Dacă doriţi să adăugaţi persoane din agendă, apăsaţi pe "<font fgcolor="#ffffffff"><b>"Meniu"</b></font>" şi atingeţi:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Conturi"</b></font>" pentru a adăuga sau a configura un cont cu persoane din agendă, pe care le puteţi sincroniza cu cele de pe telefon"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Opţiuni de afişare"</b></font>" pentru a modifica persoanele din agendă care sunt vizibile"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Persoană nouă în agendă"</b></font>" pentru a crea de la zero o intrare nouă în agendă"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importaţi/Exportaţi"</b></font>" pentru a importa persoane din agendă de pe cardul SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nu aveţi favorite."\n\n" Pentru a adăuga o persoană în lista de favorite:"\n\n" "<li>"Apăsaţi pe fila "<b>"Agendă"</b>" "\n</li>" "\n<li>"Apăsaţi persoana pe care doriţi să o adăugaţi în lista de favorite"\n</li>" "\n<li>"Apăsaţi pe steaua de lângă numele persoanei"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Toate persoanele din agendă"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Cu stea"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoane"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilizaţi tastatura DTMF"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Reveniţi la apelul în curs"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Adăugaţi un apel"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Evenimente"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relaţie"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupuri"</string>
- <string name="type_short_home" msgid="7770424864090605384">"D"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"Mi."</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"A"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Creaţi o persoană în agendă, într-un cont"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Creaţi un grup în contul"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Eliminaţi grup de sincronizare"</string>
diff --git a/res/values-ru-w470dp/strings.xml b/res/values-ru-w470dp/strings.xml
deleted file mode 100644
index 1b4c787..0000000
--- a/res/values-ru-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Недавние обновления"</string>
-</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 6bb39c6..239a9ea 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="launcherDialer" msgid="8636288196618486553">"Телефон"</string>
- <string name="people" msgid="1048457247435785074">"Контакты"</string>
+ <string name="people" msgid="1048457247435785074">"Люди"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакты"</string>
<string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Быстрый звонок"</string>
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Избранное"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Кнопки"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Вызовы"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Все контакты"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Помеченные контакты"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Контакты с номерами телефонов"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Отправить SMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Вызов: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Изменить номер и вызвать"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"У вас нет контактов. Если вы только что добавили аккаунт, подождите несколько минут, пока идет синхронизация контактов с планшетным ПК. "\n\n"Чтобы добавить контакты, нажмите "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Аккаунты"</b></font>", чтобы добавить или настроить аккаунт с контактами, которые можно будет синхронизировать с планшетным ПК;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Варианты отображения"</b></font>", чтобы выбрать, какие контакты будут видны;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новый контакт"</b></font>", чтобы создать новый контакт;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт/экспорт"</b></font>", чтобы импортировать контакты с SD-карты."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"У вас нет контактов (если вы добавили аккаунт только что, подожите несколько минут, пока идет их синхронизация с телефоном). "\n\n"Чтобы добавить контакты, нажмите "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Аккаунты"</b></font>", чтобы добавить или настроить аккаунт с контактами, которые можно будет синхронизировать с телефоном;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Варианты отображения"</b></font>", чтобы выбрать, какие контакты будут видны; "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новый контакт"</b></font>", чтобы создать новый контакт;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт/экспорт"</b></font>", чтобы импортировать контакты с SD-карты."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"У вас нет избранных контактов."\n\n"Чтобы сделать контакт избранным,"\n\n" "<li>"нажмите вкладку "<b>"Контакты"</b>";"\n</li>" "\n<li>"нажмите контакт, который нужно сделать избранным;"\n</li>" "\n<li>"нажмите звездочку возле имени контакта."\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Все контакты"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Помеченные"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Телефоны"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Использовать тональный набор"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Вернуться к ожидающему вызову"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"+ вызов"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Мероприятия"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Отношения"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Группы"</string>
- <string name="type_short_home" msgid="7770424864090605384">"Д"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"М"</string>
- <string name="type_short_work" msgid="4925330752504537861">"Р"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"П"</string>
- <string name="type_short_other" msgid="5669407180177236769">"Др"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Создать контакт в аккаунте"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Создание группы в аккаунте"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Удалить группу синхронизации"</string>
diff --git a/res/values-sk-w470dp/strings.xml b/res/values-sk-w470dp/strings.xml
deleted file mode 100644
index 08a3673..0000000
--- a/res/values-sk-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Nedávne aktualizácie"</string>
-</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index d9c0d20..b143904 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Obľúbené"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefón"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Denník hovorov"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Všetky kontakty"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Kontakty označené hviezdičkou"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakty s telefónnym číslom"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Poslať textovú správu"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Zavolať kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Pred volaním upraviť číslo"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nemáte žiadne kontakty, ktoré by bolo možné zobraziť. (Ak ste práve pridali účet, môže synchronizácia kontaktov trvať niekoľko minút.)"\n\n"Ak chcete pridať kontakty, stlačte tlačidlo "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotknite sa jednej z nasledujúcich položiek:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", ak chcete pridať alebo nakonfigurovať účet a kontakty v ňom synchronizovať s tabletom;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti zobrazenia"</b></font>", ak chcete zmeniť, ktoré kontakty budú zobrazené;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", ak chcete vytvoriť úplne nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovať alebo exportovať"</b></font>", ak chcete importovať kontakty zo svojej karty SD."\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nemáte žiadne kontakty, ktoré by bolo možné zobraziť. (Ak ste práve pridali účet, môže synchronizácia kontaktov trvať niekoľko minút.)"\n\n"Ak chcete pridať kontakty, stlačte tlačidlo "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a dotknite sa jednej z nasledujúcich položiek:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Účty"</b></font>", ak chcete pridať alebo nakonfigurovať účet a kontakty v ňom synchronizovať s telefónom;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti zobrazenia"</b></font>", ak chcete zmeniť, ktoré kontakty budú zobrazené;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", ak chcete vytvoriť úplne nový kontakt;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovať alebo exportovať"</b></font>", ak chcete importovať kontakty z karty SD."\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nemáte žiadne obľúbené kontakty."\n\n"Pridanie kontaktu do zoznamu obľúbených:"\n\n" "<li>"Dotknite sa karty "<b>"Kontakty"</b>\n</li>" "\n<li>"Dotknite sa kontaktu, ktorý má byť pridaný do obľúbených"\n</li>" "\n<li>"Dotknite sa hviezdičky vedľa názvu kontaktu"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Všetky kontakty"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Označené hviezdičkou"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefóny"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Použiť dotykovú tónovú klávesnicu"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Návrat k prebiehajúcemu hovoru"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Pridať hovor"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Udalosti"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Vzťah"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Skupiny"</string>
- <string name="type_short_home" msgid="7770424864090605384">"D"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"P"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Vytvoriť kontakt na základe účtu"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Vytvoriť skupinu v účte"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Odstrániť synchronizovanú skupinu"</string>
diff --git a/res/values-sl-w470dp/strings.xml b/res/values-sl-w470dp/strings.xml
deleted file mode 100644
index 930b908..0000000
--- a/res/values-sl-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Nedavne posodobitve"</string>
-</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index da2f4be..4142ff1 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Priljubljeno"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Dnevnik klicev"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Vsi stiki"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Stiki z zvezdicami"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Stiki s telefonskimi številkami"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Pošlji besedilno sporočilo"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Pokliči <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Pred klicanjem uredi številko"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Nimate stikov za prikaz. (Če ste ravno dodali račun, lahko sinhronizacija stikov traja nekaj minut.)"\n\n"Če želite dodati stike, pritisnite "<font fgcolor="#ffffffff"><b>"Meni"</b></font>" in se dotaknite možnosti:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Računu"</b></font>", če želite dodati ali konfigurirati račun s stiki, ki jih lahko sinhronizirate s telefonom"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti prikaza"</b></font>", če želite določiti, kateri stiki so vidni"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nov stik"</b></font>", če želite ustvariti nov stik"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Uvoz/izvoz"</b></font>", če želite uvoziti stike s kartice SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Nimate stikov za prikaz. (Če ste ravno dodali račun, lahko sinhronizacija stikov traja nekaj minut.)"\n\n"Če želite dodati stike, pritisnite "<font fgcolor="#ffffffff"><b>"Meni"</b></font>" in se dotaknite možnosti:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Računu"</b></font>", če želite dodati ali konfigurirati račun s stiki, ki jih lahko sinhronizirate s telefonom"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Možnosti prikaza"</b></font>", če želite določiti, kateri stiki so vidni"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nov stik"</b></font>", če želite ustvariti nov stik"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Uvoz/izvoz"</b></font>", če želite uvoziti stike s kartice SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Nimate priljubljenih."\n\n"Če želite dodati stik na seznam priljubljenih:"\n\n" "<li>"Dotaknite se zavihka "<b>"Stiki"</b>" "\n</li>" "\n<li>"Dotaknite se stika, ki ga želite dodati priljubljenim"\n</li>" "\n<li>"Dotaknite se zvezdice poleg imena stika"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Vsi stiki"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Z zvezdico"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoni"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Uporabi številčnico za tonsko klicanje"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Nazaj na klic, ki poteka"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Dodaj klic"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Dogodki"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Skupine"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"P"</string>
- <string name="type_short_work" msgid="4925330752504537861">"S"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"p"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Ustvari stik v računu"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Ustvari skupino v računu"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Odstrani skupino za sinhroniziranje"</string>
diff --git a/res/values-sr-w470dp/strings.xml b/res/values-sr-w470dp/strings.xml
deleted file mode 100644
index 57cf13a..0000000
--- a/res/values-sr-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Недавна ажурирања"</string>
-</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 4d3dc08..3aea8f7 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Омиљено"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Телефон"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Евиденција позива"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Сви контакти"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Контакти са звездицом"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Контакти за које су унети бројеви телефона"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Пошаљи SMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Позови <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Измените број пре позива"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Немате контаката за приказ. (Ако сте управо додали налог, синхронизација контаката може да потраје неколико минута.)"\n\n"Да бисте додали контакте, притисните "<font fgcolor="#ffffffff"><b>"Мени"</b></font>" и додирните:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Налози"</b></font>" да бисте додели или конфигурисали налог са контактима које желите да синхронизујете са таблетом"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Опције приказа"</b></font>" да бисте променили видљиве контакте"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Нов контакт"</b></font>" да бисте направили нов контакт"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Увоз/извоз"</b></font>" да бисте увезли контакте са SD картице"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Немате контаката за приказ. (Ако сте управо додали налог, синхронизација контаката може да потраје неколико минута.)"\n\n"Да бисте додали контакте, притисните "<font fgcolor="#ffffffff"><b>"Meни"</b></font>" и додирните:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Налози"</b></font>" да бисте додали или конфигурисали налог са контактима које желите да синхронизујете са телефоном"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Опције приказа"</b></font>" да бисте променили видљиве контакте"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Нов контакт"</b></font>" да бисте креирали нов контакт"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Увоз/извоз"</b></font>" да бисте увезли контакте са SD картице"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Немате ниједан омиљени контакт."\n\n"Да бисте додали контакт на листу омиљених контаката:"\n\n" "<li>"Додирните картицу "<b>"Контакти"</b>\n</li>" "\n<li>"Додирните контакт који желите да додате у омиљене контакте"\n</li>" "\n<li>"Додирните звездицу поред имена контакта"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Сви контакти"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Са звездицом"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Телефони"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Употребите бројчаник за тонско бирање"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Врати се на позив који је у току"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Додај позив"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Догађаји"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Однос"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Групе"</string>
- <string name="type_short_home" msgid="7770424864090605384">"К"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"М"</string>
- <string name="type_short_work" msgid="4925330752504537861">"П"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"П"</string>
- <string name="type_short_other" msgid="5669407180177236769">"О"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Направи контакт у оквиру налога"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Прављење групе на налогу"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Уклони групу за синхронизацију"</string>
diff --git a/res/values-sv-w470dp/strings.xml b/res/values-sv-w470dp/strings.xml
deleted file mode 100644
index 1f690f7..0000000
--- a/res/values-sv-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Nya uppdateringar"</string>
-</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index db8f3a2..6aeb484 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriter"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Samtalshistorik"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Alla kontakter"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Stjärnmärkta kontakter"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Kontakter med telefonnummer"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Skicka SMS"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Redigera nummer före samtal"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Det finns inga kontakter att visa (om du nyss har lagt till ett konto kan det ta några minuter att synkronisera kontakter)."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till pekdatorn"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativ"</b></font>" om du vill ändra vilka kontakter som är synliga"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>" om du vill importera kontakter från SD-kortet"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Det finns inga kontakter att visa (om du nyss har lagt till ett konto kan det ta några minuter att synkronisera kontakter)."\n\n"Om du vill lägga till kontakter trycker du på "<font fgcolor="#ffffffff"><b>"Meny"</b></font>" och sedan på:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Konton"</b></font>" om du vill lägga till eller konfigurera ett konto med kontakter som kan synkroniseras till telefonen"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Visningsalternativ"</b></font>" om du vill ändra vilka kontakter som är synliga"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" om du vill skapa en ny kontakt från grunden"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importera/exportera"</b></font>" om du vill importera kontakter från SD-kortet"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Du har inte några favoriter."\n\n"Så här lägger du till kontakter i favoritlistan:"\n\n" "<li>"Tryck på fliken "<b>"Kontakter"</b>\n</li>" "\n<li>"Tryck på den kontakt du vill lägga till i favoriterna"\n</li>" "\n<li>"Tryck på stjärnan bredvid kontaktens namn"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Alla kontakter"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Stjärnmärkt"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefoner"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Använda tonvalstelefon"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Återvänd till pågående samtal"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Lägg t. samt."</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Händelser"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Relation"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Grupper"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"A"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"A"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Skapa kontakt under konto"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Skapa grupp under konto"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Ta bort synkgrupp"</string>
diff --git a/res/values-sw-w470dp/strings.xml b/res/values-sw-w470dp/strings.xml
deleted file mode 100644
index 1c23ab1..0000000
--- a/res/values-sw-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Visasisho vya hivi karibuni"</string>
-</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 864dcaa..db9e985 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Vipendwa"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Simu"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Logi ya orodha ya kupiga simu"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Anwani zote"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Anwani zenye nyota"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Anwani zenye nambari za simu"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Tuma ujumbe wa maandishi"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Pigia <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Hariri nambari kabla ya kupiga"</string>
@@ -169,10 +166,7 @@
<string name="noContactsNoSimHelpText" product="default" msgid="467658807711582876">"Huna anwani zozote za kuonyesha."\n\n"Ili kuongeza anwani, bonyeza "<font fgcolor="#ffffffff"><b>"Menyu"</b></font>" na gusa:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Akaunti"</b></font>" ili kuongeza au kusanidi akaunti ya anwani unaweza kupatanisha katika simu"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mawasiliano mapya"</b></font>" ili kuunda anwani mpya kuanzia mwanzo"</li>" "\n\n<li><font fgcolor="#ffffffff"><b>"Leta/Hamisha"</b></font>"ili kuleta anwani kutoka kwa kadi yako ya SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Huna anwani zozote za kuonyesha. (Kama uliongeza akaunti, inaweza kuchukua dakika chache kusawazisha anwani.)"\n\n"Kuongeza anwani, bonyeza "<font fgcolor="#ffffffff"><b>"Menyu"</b></font>" na uguse:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Akaunti"</b></font>" ili kuongeza au kusanidi akaunti na anwani unazoweza kusawazisha kwenye kompyuta ndogo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Chaguo za onyesha"</b></font>" ili kubadilisha ni anwani gani zinazoonekana"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Anwani mpya"</b></font>" ili kuunda anwani mpya kutoka mwanzo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Leta/Hamisha"</b></font>" ili kuleta anwani kutoka kwa kadi yako ya SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Hauna anwani zozote za kuonyesha. (Kama umeongeza tu akaunti, inaweza kuchukua dadika chache ili kupatanisha anwani.)"\n\n"Ili kuongeza anwani, bonyeza "<font fgcolor="#ffffffff"><b>"Menyu"</b></font>" na gusa:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Akaunti"</b></font>" ili kuongeza au kusanidi anwani unayoweza kupatanisha katika simu"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Onyesha Machaguo"</b></font>"ili kubadilisha anwani zinazoonekana"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Anwani mpya"</b></font>" ili kuunda anwani mpya kuanzia mwanzo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Leta/Hamisha"</b></font>"ili kuleta anwani kutoka kwa kadi yako ya SD"\n</li></string>
- <!-- syntax error in translation for noFavoritesHelpText (3744655776704833277) org.xmlpull.v1.XmlPullParserException: expected: /string read: b (position:END_TAG </b>@1:167 in java.io.StringReader@13d4c61c) -->
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Anwani zote"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Yenye nyota"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Simu"</string>
+ <!-- syntax error in translation for noFavoritesHelpText (3744655776704833277) org.xmlpull.v1.XmlPullParserException: expected: /string read: b (position:END_TAG </b>@1:167 in java.io.StringReader@7176c74b) -->
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Tumia kibao cha kuchapa cha sauti na kugusa"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Rudi kwa simu inayoendelea"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Ongeza simu"</string>
@@ -307,11 +301,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Matukio"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Uhusiano"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Vikundi"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Unda anwani chini ya akaunti"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Unda kikundi chini ya akaunti"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Ondoa kikundi cha usawazishaji"</string>
diff --git a/res/values-sw580dp-w1000dp/dimens.xml b/res/values-sw580dp-w1000dp/dimens.xml
index f1b607c..334cc34 100644
--- a/res/values-sw580dp-w1000dp/dimens.xml
+++ b/res/values-sw580dp-w1000dp/dimens.xml
@@ -15,6 +15,7 @@
-->
<resources>
<dimen name="group_detail_border_padding">32dip</dimen>
+ <dimen name="group_detail_side_margin">32dip</dimen>
<dimen name="detail_contact_photo_margin">16dip</dimen>
<dimen name="contact_detail_list_top_padding">32dip</dimen>
</resources>
diff --git a/res/values-long-land/dimens.xml b/res/values-sw580dp-w1000dp/styles.xml
similarity index 85%
rename from res/values-long-land/dimens.xml
rename to res/values-sw580dp-w1000dp/styles.xml
index 2046eb0..9fa3d08 100644
--- a/res/values-long-land/dimens.xml
+++ b/res/values-sw580dp-w1000dp/styles.xml
@@ -14,6 +14,5 @@
limitations under the License.
-->
<resources>
- <dimen name="dialpad_digits_margin_bottom">30dip</dimen>
- <dimen name="dialpad_digits_text_size">34sp</dimen>
+ <style name="GroupMembershipSizeTextAppearance" parent="@android:style/TextAppearance.Medium" />
</resources>
diff --git a/res/values-sw580dp-w720dp/styles.xml b/res/values-sw580dp-w720dp/styles.xml
index 5ad25c6..0d750d7 100644
--- a/res/values-sw580dp-w720dp/styles.xml
+++ b/res/values-sw580dp-w720dp/styles.xml
@@ -21,6 +21,7 @@
<item name="android:actionBarTabStyle">@style/ContactsActionBarTabView</item>
<item name="android:textColorPrimary">@color/primary_text_color</item>
<item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
<item name="list_item_height">66dip</item>
<item name="activated_background">@drawable/list_item_activated_background</item>
<item name="section_header_background">@drawable/list_title_holo</item>
diff --git a/res/values-sw580dp/integers.xml b/res/values-sw580dp/integers.xml
index c629f7e..56e837e 100644
--- a/res/values-sw580dp/integers.xml
+++ b/res/values-sw580dp/integers.xml
@@ -15,4 +15,5 @@
-->
<resources>
<integer name="contact_tile_column_count">2</integer>
+ <integer name="updates_tab_snippet_max_lines">5</integer>
</resources>
diff --git a/res/values-sw580dp/styles.xml b/res/values-sw580dp/styles.xml
index ee65159..3cf50e2 100644
--- a/res/values-sw580dp/styles.xml
+++ b/res/values-sw580dp/styles.xml
@@ -21,6 +21,7 @@
<item name="android:actionBarTabStyle">@style/ContactsActionBarTabView</item>
<item name="android:textColorPrimary">@color/primary_text_color</item>
<item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
<item name="list_item_height">?android:attr/listPreferredItemHeight</item>
<item name="activated_background">@drawable/list_item_activated_background</item>
<item name="section_header_background">@drawable/list_title_holo</item>
@@ -41,8 +42,10 @@
<item name="list_item_header_text_size">14sp</item>
<item name="list_item_header_text_color">@color/people_app_theme_color</item>
<item name="list_item_header_height">26dip</item>
- <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
<item name="list_item_header_underline_height">1dip</item>
+ <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
+ <item name="list_item_data_width_weight">5</item>
+ <item name="list_item_label_width_weight">3</item>
<item name="list_item_contacts_count_text_color">@color/contact_count_text_color</item>
<item name="list_item_contacts_count_text_size">12sp</item>
<item name="contact_browser_list_padding_left">0dip</item>
@@ -54,6 +57,7 @@
</style>
<style name="ContactPickerTheme" parent="@android:Theme.Holo.Light.Dialog">
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
<item name="list_item_height">?android:attr/listPreferredItemHeight</item>
<item name="section_header_background">@drawable/list_title_holo</item>
<item name="list_item_divider">?android:attr/listDivider</item>
@@ -72,8 +76,10 @@
<item name="list_item_header_text_size">14sp</item>
<item name="list_item_header_text_color">@color/people_app_theme_color</item>
<item name="list_item_header_height">24dip</item>
- <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
<item name="list_item_header_underline_height">1dip</item>
+ <item name="list_item_header_underline_color">@color/people_app_theme_color</item>
+ <item name="list_item_data_width_weight">5</item>
+ <item name="list_item_label_width_weight">3</item>
<item name="list_item_contacts_count_text_color">@color/contact_count_text_color</item>
<item name="list_item_contacts_count_text_size">12sp</item>
<item name="contact_browser_list_padding_left">16dip</item>
@@ -91,6 +97,7 @@
<style name="ContactListFilterTheme" parent="@android:Theme.Holo.Light.Dialog">
<item name="android:windowCloseOnTouchOutside">true</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="CustomContactListFilterView" parent="ContactListFilterTheme">
diff --git a/res/values-th-w470dp/strings.xml b/res/values-th-w470dp/strings.xml
deleted file mode 100644
index 83fbebe..0000000
--- a/res/values-th-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"การอัปเดตล่าสุด"</string>
-</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index d85294c..1527788 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"รายการโปรด"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"โทรศัพท์"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"บันทึกการโทร"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"รายชื่อทั้งหมด"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"รายชื่อที่ติดดาว"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"ที่อยู่ติดต่อที่มีหมายเลขโทรศัพท์"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"ส่งข้อความตัวอักษร"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"โทรหา <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"แก้ไขหมายเลขก่อนโทร"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"คุณไม่มีสมุดโทรศัพท์ที่จะแสดง (หากคุณเพิ่งเพิ่มบัญชี อาจต้องใช้เวลาสักครู่ในการซิงค์รายชื่อติดต่อ)"\n\n"หากต้องการเพิ่มรายชื่อติดต่อในสมุดโทรศัพท์ ให้กด "<font fgcolor="#ffffffff"><b>"เมนู"</b></font>" แล้วแตะ:"\n" "\n<li><font fgcolor="#ffffffff"><b>"บัญชี"</b></font>" เพื่อเพิ่มหรือกำหนดค่าบัญชีด้วยรายชื่อติดต่อที่คุณสามารถซิงค์กับแท็บเล็ตได้"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"ตัวเลือกการแสดงผล"</b></font>" เพื่อเปลี่ยนว่าจะให้แสดงรายชื่อติดต่อใดบ้าง"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"สร้างรายชื่อติดต่อใหม่"</b></font>" เพื่อสร้างรายชื่อติดต่อใหม่ตั้งแต่ต้น"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"นำเข้า/ส่งออก"</b></font>" เพื่อนำเข้ารายชื่อติดต่อจากการ์ด SD ของคุณ"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"คุณไม่มีสมุดโทรศัพท์ที่จะแสดง (หากคุณเพิ่งเพิ่มบัญชี อาจต้องใช้เวลาสักครู่ในการซิงค์รายชื่อติดต่อ)"\n\n"หากต้องการเพิ่มรายชื่อติดต่อในสมุดโทรศัพท์ ให้กด "<font fgcolor="#ffffffff"><b>"เมนู"</b></font>" แล้วแตะ:"\n" "\n<li><font fgcolor="#ffffffff"><b>"บัญชี"</b></font>" เพื่อเพิ่มหรือกำหนดค่าบัญชีด้วยรายชื่อติดต่อที่คุณสามารถซิงค์กับโทรศัพท์ได้"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"ตัวเลือกการแสดงผล"</b></font>" เพื่อเปลี่ยนว่าจะให้แสดงรายชื่อติดต่อใดบ้าง"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"สร้างรายชื่อติดต่อใหม่"</b></font>" เพื่อสร้างรายชื่อติดต่อใหม่ตั้งแต่ต้น"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"นำเข้า/ส่งออก"</b></font>" เพื่อนำเข้ารายชื่อติดต่อจากการ์ด SD ของคุณ"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"คุณไม่มีรายการโปรดใดๆ "\n\n"หากต้องการเพิ่มรายชื่อในรายการโปรด:"\n\n" "<li>"แตะที่แท็บ "<b>"สมุดโทรศัพท์"</b>" "\n</li>" "\n<li>"แตะรายชื่อที่คุณต้องการเพิ่มลงในรายการโปรด"\n</li>" "\n<li>"แตะรูปดาวที่อยู่ติดกับชื่อ"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"รายชื่อในสมุดโทรศัพท์ทั้งหมด"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"ที่ติดดาว"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"โทรศัพท์"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ใช้ปุ่มกดสัญญาณเสียง"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"กลับสู่การโทรที่กำลังดำเนินอยู่"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"เพิ่มการโทร"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"กิจกรรม"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"ความสัมพันธ์"</string>
<string name="groupsLabel" msgid="8573535366319059326">"กลุ่ม"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"สร้างรายชื่อภายในบัญชี"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"สร้างกลุ่มภายในบัญชี"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"นำกลุ่มที่ซิงค์ออก"</string>
diff --git a/res/values-tl-w470dp/strings.xml b/res/values-tl-w470dp/strings.xml
deleted file mode 100644
index 5a30962..0000000
--- a/res/values-tl-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Kamakailang mga update"</string>
-</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index b7c59f6..698b9162 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mga Paborito"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telepono"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Log ng tawag"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Lahat ng mga contact"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Mga naka-star na contact"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Mga contact na may mga numero ng telepono"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Magpadala ng text message"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Tawagan si <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"I-edit ang numero bago tumawag"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Wala kang anumang mga contact na ipapakita. (Kung nagdagdag ka lang ng account, maaaring magtagal ng ilang minuto upang i-sync ang mga contact.)"\n\n"Upang magdagdag ng mga contact, pindutin ang "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" at pindutin ang:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Mga Account"</b></font>" upang magdagdag o mag-configure ng isang account na may mga contact na masi-sync mo sa tablet"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mga pagpipilian sa pagpapakita"</b></font>" upang baguhin kung anong mga contact ang nakikita"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Bagong contact"</b></font>" upang lumikha ng bagong contact mula sa scratch"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>" upang mag-import ng mga contact mula sa iyong SIM o SD card"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Wala kang anumang mga contact na ipapakita. (Kung nagdagdag ka lang ng account, maaaring magtagal ng ilang minuto upang i-sync ang mga contact.)"\n\n"Upang magdagdag ng mga contact, pindutin ang "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" at pindutin ang:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Mga Account"</b></font>" upang magdagdag o mag-configure ng isang account na may mga contact na masi-sync mo sa telepono"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Mga pagpipilian sa pagpapakita"</b></font>" upang baguhin kung anong mga contact ang nakikita"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Bagong contact"</b></font>" upang lumikha ng bagong contact mula sa scratch"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Import/Export"</b></font>" upang mag-import ng mga contact mula sa iyong SD card"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Wala kang anumang mga paborito."\n\n"Upang magdagdag ng contact sa iyong listahan ng mga paborito:"\n\n" "<li>"Galawin ang tab na "<b>"Mga Contact"</b>\n</li>" "\n<li>"Galawin ang contact na gusto mong idagdag sa iyong mga paborito"\n</li>" "\n<li>"Galawin ang bituin sa tabi ng pangalan ng contact"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Lahat ng mga contact"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Naka-star"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Mga Telepono"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gumamit ng touch tone na keypad"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Kasalukuyang nagaganap ang pabalik na tawag"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Magdagdag ng tawag"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Mga Kaganapan"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Kaugnayan"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Mga Pangkat"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Lumikha ng contact sa ilalim ng account"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Lumikha ng pangkat sa ilalim ng account"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Alisin ang pangkat sa pag-sync"</string>
diff --git a/res/values-tr-w470dp/strings.xml b/res/values-tr-w470dp/strings.xml
deleted file mode 100644
index 39e5a03..0000000
--- a/res/values-tr-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Son güncellemeler"</string>
-</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index fe5c828..599c3d8 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Sık Kullanılanlar"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Çağrı kaydı"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Tüm kişiler"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Yıldızlı kişiler"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Telefon numarası olan kişiler"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Kısa mesaj gönder"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Ara: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Önce numarayı düzenle"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Görüntülenecek kişiniz yok. (Kısa süre önce bir hesap eklediyseniz kişileri senkronize etmek birkaç dakika sürebilir.)"\n\n"Kişi eklemek için, "<font fgcolor="#ffffffff"><b>"Menü"</b></font>"\'ye basın ve şunlara dokunun:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Hesaplar"</b></font>" (tabletle senkronize edebileceğiniz kişilere sahip bir hesap eklemek veya yapılandırmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Görüntüleme seçenekleri"</b></font>" (görülebilir kişileri değiştirmek için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Yeni kişi"</b></font>" (en baştan yeni bir kişi oluşturmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"İçe/Dışa Aktar"</b></font>\n</li>"(SIM veya SD kartınızdaki kişileri içe aktarmak için)"</string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Görüntülenecek kişiniz yok. (Kısa süre önce bir hesap eklediyseniz kişileri senkronize etmek birkaç dakika sürebilir.)"\n\n"Kişi eklemek için, "<font fgcolor="#ffffffff"><b>"Menü"</b></font>"\'ye basın ve şunlara dokunun:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Hesaplar"</b></font>" (telefon ile senkronize edebileceğiniz kişilere sahip bir hesap eklemek veya yapılandırmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Seçenekleri görüntüle"</b></font>" (görülebilir kişileri değiştirmek için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Yeni kişi"</b></font>" (en baştan yeni bir kişi oluşturmak için)"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"İçe/Dışa Aktar"</b></font>\n</li>"(SIM veya SD kartınızdaki kişileri içe aktarmak için)"</string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Favoriniz bulunmuyor."\n\n"Favoriler listenize kişi eklemek için:"\n\n" "<li><b>"Kişiler"</b>" sekmesine dokunun"\n</li>" "\n<li>"Favorilerinize eklemek istediğiniz kişiye dokunun"\n</li>" "\n<li>"Kişi adının yanındaki yıldız simgesine dokunun"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Tüm kişiler"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Yıldızlı"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Telefonlar"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Telefon tuş takımını kullan"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Çağrıya dön"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Çağrı ekle"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Etkinlikler"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"İlişki"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Gruplar"</string>
- <string name="type_short_home" msgid="7770424864090605384">"E"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"İ"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"Ç"</string>
- <string name="type_short_other" msgid="5669407180177236769">"D"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Hesap altında kişi oluştur"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Grubu şu hesabın altında oluştur:"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Senkronize grubu kaldır"</string>
diff --git a/res/values-uk-w470dp/strings.xml b/res/values-uk-w470dp/strings.xml
deleted file mode 100644
index 1f2e5c1..0000000
--- a/res/values-uk-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Останні оновлення"</string>
-</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index f708cfc..ef336c3 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Вибране"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Тел."</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Журн. викл."</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Усі контакти"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Контакти із зіроч."</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Контакти з номерами телефону"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Надісл. текст. повід."</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Набрати <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Редаг. номер перед викл."</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Немає контактів для відобр. (Якщо ви щойно дод. обл. запис, синхроніз. контактів займе кілька хв.)."\n\n"Щоб додати конт., натис."<font fgcolor="#ffffffff"><b>"Меню"</b></font>" й торкн. опцій:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Обл. записи"</b></font>", щоб додати чи налашт. обл. запис із контакт., які можна синхроніз. з пристроєм"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Параметри відображ."</b></font>", щоб змінити парам. видимості контактів"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новий контакт"</b></font>", щоб створ. зовсім новий контакт"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Імпорт/експорт"</b></font>", щоб імпорт. контакти з карти SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Немає контактів для відобр. (Якщо ви щойно дод. обл. запис, синхроніз. контактів займе кілька хв.)."\n\n"Щоб додати контакти, натис. "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" й торкн. опцій:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Обл. записи"</b></font>", щоб додати чи налашт. обл. запис із контакт., які можна синхроніз. з тел."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Параметри відображ."</b></font>", щоб змінити парам. видимості контактів"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Новий контакт"</b></font>", щоб створ. зовсім новий контакт"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Імпорт/експорт"</b></font>", щоб імпорт. контакти з карти SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"У вас немає вибраного."\n\n"Щоб додати контакт до списку вибраних:"\n\n" "<li>"Торкніться вкладки "<b>"Контакти"</b>\n</li>" "\n<li>"Торкніться контакту, який хочете додати до вибраного"\n</li>" "\n<li>"Торкніться зірочки поруч з іменем контакту"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Усі контакти"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Із зіроч."</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Телефони"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Викор. кнопкову клавіат."</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Поверн. до поточн. виклику"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Дод. виклик"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Події"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Стосунки"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Групи"</string>
- <string name="type_short_home" msgid="7770424864090605384">"Д"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"М"</string>
- <string name="type_short_work" msgid="4925330752504537861">"Р"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"П"</string>
- <string name="type_short_other" msgid="5669407180177236769">"І"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Створ. контакт в обл. записі"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Створити групу в обліковому записі"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Видал. синхр. групу"</string>
diff --git a/res/values-vi-w470dp/strings.xml b/res/values-vi-w470dp/strings.xml
deleted file mode 100644
index ef7dde6..0000000
--- a/res/values-vi-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Cập nhật gần đây"</string>
-</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 9df714c..87ef6a4 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mục ưa thích"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Điện thoại"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Nhật ký cuộc gọi"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Tất cả liên hệ"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Liên hệ được gắn dấu sao"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Liên hệ có số điện thoại"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Gửi tin nhắn văn bản"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Gọi <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Chỉnh sửa số trước khi gọi"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Bạn chưa có địa chỉ liên hệ nào để hiển thị. (Nếu bạn đã thêm tài khoản, có thể mất vài phút để đồng bộ hóa địa chỉ liên hệ.)"\n\n"Để thêm địa chỉ liên hệ, nhấn "<font fgcolor="#ffffffff"><b>"Trình đơn"</b></font>" và chạm:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Tài khoản"</b></font>" để thêm hoặc cấu hình tài khoản có địa chỉ liên hệ bạn có thể đồng bộ hóa với máy tính bảng"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Tùy chọn hiển thị"</b></font>" để thay đổi tài khoản nào được hiển thị"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Địa chỉ liên hệ mới"</b></font>" để tạo địa chỉ liên hệ mới từ đầu"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nhập/Xuất"</b></font>" để nhập địa chỉ liên hệ từ thẻ SD của bạn"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Bạn chưa có địa chỉ liên hệ nào để hiển thị. (Nếu bạn vừa thêm tài khoản, có thể mất vài phút để đồng bộ hóa địa chỉ liên hệ.)"\n\n"Để thêm địa chỉ liên hệ, nhấn "<font fgcolor="#ffffffff"><b>"Trình đơn"</b></font>" và chạm:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Tài khoản"</b></font>" để thêm hoặc cấu hình tài khoản có địa chỉ liên hệ bạn có thể đồng bộ hóa với điện thoại"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Tùy chọn hiển thị"</b></font>" để thay đổi địa chỉ liên hệ nào được hiển thị"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Địa chỉ liên hệ mới"</b></font>" để tạo địa chỉ liên hệ mới từ đầu"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nhập/Xuất"</b></font>" để nhập địa chỉ liên hệ từ thẻ SD của bạn"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Bạn không có mục ưa thích nào."\n\n"Để thêm liên hệ vào danh sách mục ưa thích của bạn:"\n\n" "<li>"Chạm vào tab "<b>"Danh bạ"</b>\n</li>" "\n<li>"Chạm vào liên hệ bạn muốn thêm vào mục ưa thích của mình"\n</li>" "\n<li>"Chạm vào dấu sao bên cạnh tên của liên hệ"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Tất cả liên hệ"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Được gắn dấu sao"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Số điện thoại"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Sử dụng bộ tạo xung từ bàn phím"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Quay lại cuộc gọi đang thực hiện"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Thêm cuộc gọi"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Sự kiện"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Mối quan hệ"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Nhóm"</string>
- <string name="type_short_home" msgid="7770424864090605384">"Nhà riêng"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Tạo liên hệ trong tài khoản"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Tạo nhóm trong tài khoản"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Xoá nhóm đồng bộ hoá"</string>
diff --git a/res/values-w470dp/strings.xml b/res/values-w470dp/strings.xml
deleted file mode 100644
index 17934d7..0000000
--- a/res/values-w470dp/strings.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates">Recent updates</string>
-</resources>
diff --git a/res/values-zh-rCN-w470dp/strings.xml b/res/values-zh-rCN-w470dp/strings.xml
deleted file mode 100644
index dfbaf5a..0000000
--- a/res/values-zh-rCN-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"最新动态"</string>
-</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index cb0db49..6b7ad66 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"收藏"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"拨号"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"通话记录"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"所有联系人"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"已加星标的联系人"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"有电话号码的联系人"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"发送短信"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"呼叫<xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"呼叫之前编辑号码"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"您没有可显示的联系人。(如果您刚刚添加了一个帐户,则需要几分钟时间同步联系人。)"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Google 帐户"</b></font>"以添加或配置帐户,您可以将该帐户中包含的联系人同步到平板电脑"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"显示选项"</b></font>"以更改可见的联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"以从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>"以导入 SD 卡上的联系人"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"您没有可显示的联系人。(如果您刚刚添加了一个帐户,则需要几分钟时间同步联系人。)"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后触摸:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Google 帐户"</b></font>"以添加或配置帐户,您可以将该帐户中包含的联系人同步到手机"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"显示选项"</b></font>"以更改可见的联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>"以从头开始创建新联系人"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"导入/导出"</b></font>"以导入 SD 卡上的联系人"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"您未收藏任何联系人。"\n\n"要向您的收藏列表添加联系人,请执行以下操作:"\n\n" "<li>"触摸"<b>"联系人"</b>"标签"\n</li>\n<li>"触摸您要加入收藏的联系人"\n</li>\n<li>"触摸联系人姓名旁边的星标"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"所有联系人"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"已加星标的内容"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"电话"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"使用按键式键盘"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"返回正在进行的通话"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"添加通话"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"活动"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"关系"</string>
<string name="groupsLabel" msgid="8573535366319059326">"群组"</string>
- <string name="type_short_home" msgid="7770424864090605384">"住宅"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"手机"</string>
- <string name="type_short_work" msgid="4925330752504537861">"单位"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"寻呼"</string>
- <string name="type_short_other" msgid="5669407180177236769">"其他"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"在帐户下创建联系人"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"要在哪个帐户下创建群组?"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"删除同步群组"</string>
diff --git a/res/values-zh-rTW-w470dp/strings.xml b/res/values-zh-rTW-w470dp/strings.xml
deleted file mode 100644
index d09f414..0000000
--- a/res/values-zh-rTW-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"最近更新"</string>
-</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 0dfd7b3..7696809 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"我的最愛"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"電話"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"通話記錄"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"全部聯絡人"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"有星號標記的聯絡人"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"有電話號碼的聯絡人"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"傳送簡訊"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"撥電話給<xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"撥打電話前編輯號碼"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"您沒有任何聯絡人 (如果您剛剛才新增帳戶,系統需要幾分鐘的時間才能同步處理聯絡人資訊)。"\n\n"如要新增聯絡人,請按下選單鍵並輕觸:"\n" "\n<li>"[帳戶] 以新增或設定含有聯絡人的帳戶,您可以將其聯絡人資料同步傳送到平板電腦"\n</li>" "\n<li>"[顯示選項] 以變更聯絡人的顯示狀態"\n</li>" "\n<li>"[新增聯絡人] 以從頭開始建立新的聯絡人"\n</li>" "\n<li>"[匯入/匯出] 以從 SD 卡匯入聯絡人"\n</li><font fgcolor="#ffffffff"><b></b></font><font fgcolor="#ffffffff"><b></b></font><font fgcolor="#ffffffff"><b></b></font><font fgcolor="#ffffffff"><b></b></font><font fgcolor="#ffffffff"><b></b></font></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"您沒有任何聯絡人 (如果您剛剛才新增帳戶,系統需要幾分鐘的時間才能同步處理聯絡人資訊)。"\n\n"如要新增聯絡人,請按下 [選單] 並輕觸:"\n\n"[帳戶] 以新增或設定含有聯絡人的帳戶,您可以將其聯絡人資料同步傳送到手機"\n" "\n"[顯示選項] 以變更聯絡人的顯示狀態"\n" "\n"[新增聯絡人] 以從頭開始建立聯絡人"\n" "\n"[匯入/匯出] 以從 SD 卡匯入聯絡人"<font fgcolor="#ffffffff"><b></b></font><li><font fgcolor="#ffffffff"><b></b></font></li><li><font fgcolor="#ffffffff"><b></b></font></li><li><font fgcolor="#ffffffff"><b></b></font></li><li><font fgcolor="#ffffffff"><b></b></font>\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"您沒有任何最愛。"\n\n"如要將聯絡人新增至最愛清單:"\n\n<li>"輕觸 [聯絡人"<b></b>"] 標籤"\n</li>" "\n<li>"輕觸要新增至最愛的聯絡人"\n</li>" "\n<li>"輕觸聯絡人名稱旁邊的星號圖示"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"所有聯絡人"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"已加星號"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"電話"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"使用觸控音按鍵"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"返回進行中的通話"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"新增通話"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"活動"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"關係"</string>
<string name="groupsLabel" msgid="8573535366319059326">"群組"</string>
- <string name="type_short_home" msgid="7770424864090605384">"住家"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"行動"</string>
- <string name="type_short_work" msgid="4925330752504537861">"工作"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"呼叫器"</string>
- <string name="type_short_other" msgid="5669407180177236769">"其他"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"在帳戶下建立聯絡人"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"選擇帳戶以建立群組"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"移除同步處理群組"</string>
@@ -462,7 +451,7 @@
<string name="list_filter_all_starred" msgid="5031734941601931356">"已加星號"</string>
<string name="list_filter_custom" msgid="8910173055702057002">"自訂"</string>
<string name="list_filter_customize" msgid="2035084418635775579">"自訂..."</string>
- <string name="list_filter_phones" msgid="735313795643493365">"所有包含電話號碼的聯絡人資訊"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"所有包含電話號碼的聯絡人"</string>
<string name="list_filter_single" msgid="5871400283515893087">"聯絡人"</string>
<string name="custom_list_filter" msgid="7836035257402013957">"定義自訂檢視"</string>
<string name="contact_list_loading" msgid="3859280390185230582">"載入中…"</string>
diff --git a/res/values-zu-w470dp/strings.xml b/res/values-zu-w470dp/strings.xml
deleted file mode 100644
index 0901dde..0000000
--- a/res/values-zu-w470dp/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recent_updates" msgid="2018245636796411442">"Izibuyekezo zamanje"</string>
-</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index ed1f3f1..8cf12e6 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -134,9 +134,6 @@
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izintandokazi"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Ifoni"</string>
<string name="recentCallsIconLabel" msgid="1419116422359067949">"Ifayela lokungena lekholi"</string>
- <string name="liveFolderAll" msgid="4789010460767506206">"Bonke othintana nabo"</string>
- <string name="liveFolderFavorites" msgid="3100957542927222282">"Othintana nabo abanezinkanyezi"</string>
- <string name="liveFolderPhone" msgid="3739376066610926780">"Othintana nabo abanezinombolo zocingo"</string>
<string name="menu_sendTextMessage" msgid="6937343460284499306">"Thumela umyalezo wombhalo"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"Shayela <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Hlela inombolo ngaphambi kokushaya ucingo"</string>
@@ -170,9 +167,6 @@
<string name="noContactsNoSimHelpTextWithSync" product="tablet" msgid="6222739731808897565">"Awunabo othintana nabo ongababonisa. (Uma usanda kufaka i-akhawunti, kungase kuthathe amaminithi ambalwa ukuvumelanisa othintana nabo.)"\n\n"Ukufaka othintana naye, cindezela "<font fgcolor="#ffffffff"><b>"Menyu"</b></font>"bese uthinta:"\n\n<li><font fgcolor="#ffffffff"><b>"ama-Akhawunti"</b></font>" ukufaka noma ukumisa i-akhawunti nothintana nabo ongabavumelanisa kwithebhulethi"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Bonisa okukhethwa kukho"</b></font>" ukushintsha ukuba yibaphi othintana nabo ababonakalayo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Othintana naye omusha"</b></font>"ukwenza othintana naye omusha kusukela ekuqaleni "\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ngenisa/Thekelisa"</b></font>" ukungenisa othintana nabo ekhadini lakho le-SD"\n</li></string>
<string name="noContactsNoSimHelpTextWithSync" product="default" msgid="9040060730467973050">"Awunabo othintana nabo ongababonisa. (Uma usanda kufaka i-akhawunti, kungase kuthathe imizuzu embalwa ukuvumelanisa othintana nabo.)"\n\n"Ukufaka othintana nabo, cindezela "<font fgcolor="#ffffffff"><b>"Menyu"</b></font>" bese uthinta:"\n\n<li><font fgcolor="#ffffffff"><b>"ama-Akhawunti"</b></font>" ukufaka noma ukumisa i-akhawunti nothintana nabo ungavumelanisa efonini"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Bonisa okukhethwa kukho"</b></font>" ukushintsha ukuthi yibaphi othintana nabo ababonakalayo"\n</li>\n<li><font fgcolor="#ffffffff"><b>"Othintana naye omusha"</b></font>" ukwenza othintana naye omusha kusuka ekuqaleni "\n</li>\n<li><font fgcolor="#ffffffff"><b>"Ngenisa/Thekelisa"</b></font>" ukungenisa othintana nabo kusuka ekhadini lakho le-SD"\n</li></string>
<string name="noFavoritesHelpText" msgid="3744655776704833277">"Awunazo izintandokazi."\n\n"Ukufaka othintana naye ohlwini lwakho lwezintandokazi:"\n\n" "<li>"Thinta "<b>"ithebhu"</b>" Yothintana nabo"\n</li>" "\n<li>"Thinta othintana naye ofuna ukumufaka ezintandokazini zakho"\n</li>" "\n<li>"Thinta inkanyezi eseduze negama lothintana naye"\n</li></string>
- <string name="liveFolder_all_label" msgid="5961411940473276616">"Bonke othintana nabo"</string>
- <string name="liveFolder_favorites_label" msgid="2674341514070517105">"Okunenkanyezi"</string>
- <string name="liveFolder_phones_label" msgid="1709786878793436245">"Amafoni"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Sebenzisa ikhiphedi yethoni yokuthinta"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Buyela kukholi eqhubekayo"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Yengeza ikholi"</string>
@@ -305,11 +299,6 @@
<string name="eventLabelsGroup" msgid="3695433812142818803">"Izehlakalo"</string>
<string name="relationLabelsGroup" msgid="1854373894284572781">"Ubudlelwano"</string>
<string name="groupsLabel" msgid="8573535366319059326">"Amaqembu"</string>
- <string name="type_short_home" msgid="7770424864090605384">"H"</string>
- <string name="type_short_mobile" msgid="1655473281466676216">"M"</string>
- <string name="type_short_work" msgid="4925330752504537861">"W"</string>
- <string name="type_short_pager" msgid="2613818970827594238">"P"</string>
- <string name="type_short_other" msgid="5669407180177236769">"O"</string>
<string name="dialog_new_contact_account" msgid="9044704073286262197">"Yenza othintana naye ngaphansi kwe-akhawunti"</string>
<string name="dialog_new_group_account" msgid="2318032089273496830">"Yenza isigcawu ngaphansi kwe-akhawunti"</string>
<string name="menu_sync_remove" msgid="3266725887008450161">"Khipha iqembu lokuvumelanisa"</string>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index a4f1b07..b9a534c 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -100,6 +100,8 @@
<attr name="list_item_contacts_count_text_color" format="color" />
<attr name="list_item_text_indent" format="dimension" />
<attr name="list_item_contacts_count_text_size" format="dimension" />
+ <attr name="list_item_data_width_weight" format="integer" />
+ <attr name="list_item_label_width_weight" format="integer" />
</declare-styleable>
<declare-styleable name="CallLog">
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 412c9e2..12ae918 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -142,7 +142,10 @@
<dimen name="group_editor_autocomplete_left_padding">8dip</dimen>
<!-- Border padding for the group detail fragment -->
- <dimen name="group_detail_border_padding">32dip</dimen>
+ <dimen name="group_detail_border_padding">0dip</dimen>
+
+ <!-- Left and right margin for the divider in the group detail fragment -->
+ <dimen name="group_detail_side_margin">0dip</dimen>
<!-- Height of edit text in dialpad fragment -->
<dimen name="dialpad_horizontal_margin">0dip</dimen>
@@ -205,4 +208,15 @@
<!-- Width of the lead margin on the left of a block quote inside a stream item -->
<dimen name="stream_item_stripe_width">8dip</dimen>
+ <!-- Layout weight values for dialpad screen. These layouts will be used in one
+ LinearLayout (dialpad_fragment.xml), configuring dialpad screen's vertical
+ ratio. -->
+ <integer name="dialpad_layout_weight_digits">20</integer>
+ <integer name="dialpad_layout_weight_dialpad">65</integer>
+ <integer name="dialpad_layout_weight_additional_buttons">15</integer>
+
+ <!-- Minimum height used with @drawable/list_section_divider_holo_custom.
+ Right now the drawable has implicit 32dip minimal height, which is confusing.
+ This value is for making the hidden configuration explicit in xml. -->
+ <dimen name="list_section_divider_min_height">32dip</dimen>
</resources>
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 1d3f9b9..3cae01b 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -21,6 +21,9 @@
<!-- Number of decoded photo bitmaps retained in an LRU cache -->
<integer name="config_photo_cache_max_bitmaps">48</integer>
- <!-- Determines the number of columns in a ContactTileRow -->
+ <!-- Determines the number of columns in a ContactTileRow -->
<integer name="contact_tile_column_count">2</integer>
+
+ <!-- Max lines to display of a contact's snippet in the "updates" tab of the contact card tab carousel -->
+ <integer name="updates_tab_snippet_max_lines">3</integer>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c30e09e..ae2c680 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -47,7 +47,7 @@
<string name="messageShortcutActivityTitle">Choose a number to message</string>
<!-- Activity title when the user is selecting a contact. [CHAR LIMIT=128] -->
- <string name="contactPickerActivityTitle">Select a contact</string>
+ <string name="contactPickerActivityTitle">Choose a contact</string>
<!-- Title for the activity that shows only starred contacts -->
<string name="starredList">Starred</string>
@@ -137,10 +137,10 @@
<string name="menu_new_group_action_bar">New</string>
<!-- Title of the confirmation dialog for separating contacts into multiple instances [CHAR LIMIT=20] -->
- <string name="splitConfirmation_title">Separate contact</string>
+ <string name="splitConfirmation_title">Separate contact?</string>
<!-- Confirmation dialog for separating contacts into multiple instances [CHAR LIMIT=NONE] -->
- <string name="splitConfirmation">Are you sure you want to separate this single contact into multiple contacts?</string>
+ <string name="splitConfirmation">This contact will be separated into multiple contacts.</string>
<!-- Menu item that joins an aggregate with another aggregate -->
<string name="menu_joinAggregate">Join</string>
@@ -148,8 +148,8 @@
<!-- Heading of the Join Contact screen -->
<string name="titleJoinContactDataWith">Join contacts</string>
- <!-- Info blurb on the Join Contact screen -->
- <string name="blurbJoinContactDataWith">Select the contact you want to join with <xliff:g id="name">%s</xliff:g>.</string>
+ <!-- Info blurb on the Join Contact screen [CHAR LIMIT=NONE]-->
+ <string name="blurbJoinContactDataWith">Choose the contact you want to join with <xliff:g id="name">%s</xliff:g>:</string>
<!-- An item in the Join Contact activity that opens up the full contact A-Z list -->
<string name="showAllContactsJoinItem">Show all contacts</string>
@@ -163,8 +163,8 @@
<!-- 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. -->
- <string name="deleteConfirmation_title">Delete</string>
+ <!-- Confirmation dialog title after users selects to delete a contact. [CHAR LIMIT=20]-->
+ <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>
@@ -172,8 +172,8 @@
<!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=30] -->
<string name="menu_redirect_calls_to_vm">All calls to voicemail</string>
- <!-- Warning dialog contents after users selects to delete a ReadOnly contact. -->
- <string name="readOnlyContactWarning">You cannot delete contacts from read-only accounts, but you can hide them in your contacts lists.</string>
+ <!-- Warning dialog contents after users selects to delete a ReadOnly contact. [CHAR LIMIT=NONE] -->
+ <string name="readOnlyContactWarning">You can\'t delete contacts from read-only accounts, but you can hide them in your contacts lists.</string>
<!-- Warning dialog contents after users selects to delete a contact with ReadOnly and Writable sources. -->
<string name="readOnlyContactDeleteConfirmation">This contact contains information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted.</string>
@@ -206,12 +206,13 @@
<string name="ghostData_title">Title</string>
<!-- Message displayed in a toast when you try to view the details of a contact that
- for some reason doesn't exist anymore. -->
- <string name="invalidContactMessage">The contact does not exist.</string>
+ for some reason doesn't exist anymore. [CHAR LIMIT=NONE]-->
+ <string name="invalidContactMessage">The contact doesn\'t exist.</string>
- <!-- When picking a contact from a list of all contacts there is an entry at the top of the
- list that allows the user to create a new contact, which this string is used for -->
- <string name="pickerNewContactHeader">Create new contact</string>
+ <!-- Text for a "create new contact" button on the bottom of the contact picker screen.
+ The text will be all capitalized.
+ [CHAR LIMIT=30] -->
+ <string name="pickerNewContactText">Create new contact</string>
<!-- Header that expands to list all of the types of phone numbers when editing or creating a phone number for a contact [CHAR LIMIT=20] -->
<string name="phoneLabelsGroup">Phone</string>
@@ -254,13 +255,13 @@
<string name="removePhoto">Remove photo</string>
<!-- The text displayed when the contacts list is empty while displaying all contacts [CHAR LIMIT=NONE] -->
- <string name="noContacts">No contacts</string>
+ <string name="noContacts">No contacts.</string>
<!-- The text displayed when the groups list is empty while displaying all groups [CHAR LIMIT=NONE] -->
- <string name="noGroups">No groups</string>
+ <string name="noGroups">No groups.</string>
<!-- The text displayed when the groups list is empty and no accounts are set on the device while displaying all groups [CHAR LIMIT=NONE] -->
- <string name="noAccounts">To create groups you need an account</string>
+ <string name="noAccounts">To create groups you need an account.</string>
<!-- The text displayed when the contacts list is empty while displaying results after searching contacts -->
<string name="noMatchingContacts">No matching contacts found.</string>
@@ -268,6 +269,12 @@
<!-- The text displayed when the contacts list is empty while displaying only contacts that have phone numbers -->
<string name="noContactsWithPhoneNumbers">No contacts with phone numbers.</string>
+ <!-- The text displayed when there are no members in the group while displaying the group detail page [CHAR LIMIT=40] -->
+ <string name="emptyGroup">No people in this group.</string>
+
+ <!-- The text displayed to instruct users to add members to a group (when viewing a group detail page for a group with no members) [CHAR LIMIT=50] -->
+ <string name="addPeopleToGroup">To add some, edit the group.</string>
+
<!-- Displayed in a spinner dialog after the user creates a contact and it's being saved to the database -->
<string name="savingContact">Saving contact\u2026</string>
@@ -275,16 +282,16 @@
<string name="savingDisplayGroups">Saving display options\u2026</string>
<!-- Toast displayed when a contact is saved [CHAR LIMIT=NONE] -->
- <string name="contactSavedToast">Contact saved</string>
+ <string name="contactSavedToast">Contact saved.</string>
- <!-- Toast displayed when saving a contact failed -->
- <string name="contactSavedErrorToast">Error, unable to save contact changes.</string>
+ <!-- Toast displayed when saving a contact failed. [CHAR LIMIT=NONE] -->
+ <string name="contactSavedErrorToast">Couldn\'t save contact changes.</string>
<!-- Toast displayed when a group is saved [CHAR LIMIT=NONE] -->
- <string name="groupSavedToast">Group saved</string>
+ <string name="groupSavedToast">Group saved.</string>
<!-- Toast displayed when saving a group failed [CHAR LIMIT=NONE] -->
- <string name="groupSavedErrorToast">Error, unable to save group changes.</string>
+ <string name="groupSavedErrorToast">Couldn\'t save group changes.</string>
<!-- Displayed at the top of the contacts showing the total number of contacts visible when "Only contacts with phones" is selected -->
<plurals name="listTotalPhoneContacts">
@@ -302,13 +309,13 @@
</plurals>
<!-- Displayed at the top of the contacts showing the zero total number of contacts visible when "All contacts" is selected [CHAR LIMIT=64]-->
- <string name="listTotalAllContactsZero">No contacts</string>
+ <string name="listTotalAllContactsZero">No contacts.</string>
<!-- Displayed at the top of the contacts showing the zero total number of contacts visible when "Custom" is selected [CHAR LIMIT=64]-->
- <string name="listTotalAllContactsZeroCustom">No visible contacts</string>
+ <string name="listTotalAllContactsZeroCustom">No visible contacts.</string>
<!-- Displayed at the top of the contacts showing the zero total number of contacts visible when starred contact list is selected [CHAR LIMIT=64]-->
- <string name="listTotalAllContactsZeroStarred">No Favorites</string>
+ <string name="listTotalAllContactsZeroStarred">No favorites.</string>
<!-- Displayed at the top of the contacts showing the zero total number of contacts visible when a group or account is selected [CHAR LIMIT=64]-->
<string name="listTotalAllContactsZeroGroup">No contacts in <xliff:g id="name" example="Friends">%s</xliff:g></string>
@@ -322,17 +329,17 @@
<!-- Displayed at the top of the contacts showing single contact. [CHAR LIMIT=64] -->
<string name="listCustomView">Contacts in custom view</string>
- <!-- Displayed at the top of the contacts showing the total number of contacts found when "Only contacts with phones" not selected -->
+ <!-- Displayed at the top of the contacts showing the total number of contacts found when "Only contacts with phones" not selected [CHAR LIMIT=30] -->
<plurals name="listFoundAllContacts">
<item quantity="one">1 found</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> found</item>
</plurals>
<!-- Displayed at the top of search results indicating that more contacts were found than shown [CHAR LIMIT=64] -->
- <string name="foundTooManyContacts">more than <xliff:g id="count">%d</xliff:g> found</string>
+ <string name="foundTooManyContacts">More than <xliff:g id="count">%d</xliff:g> found.</string>
- <!-- Displayed at the top of the contacts showing the zero total number of contacts found when "Only contacts with phones" not selected -->
- <string name="listFoundAllContactsZero">Not found</string>
+ <!-- Displayed at the top of the contacts showing the zero total number of contacts found when "Only contacts with phones" not selected. [CHAR LIMIT=30] -->
+ <string name="listFoundAllContactsZero">None found.</string>
<!-- Displayed at the top of the contacts showing the total number of contacts found when typing search query -->
<plurals name="searchFoundContacts">
@@ -379,9 +386,6 @@
[CHAR LIMIT=NONE] -->
<string name="recentCallsIconLabel">Call log</string>
- <string name="liveFolderAll">All contacts</string>
- <string name="liveFolderFavorites">Starred contacts</string>
- <string name="liveFolderPhone">Contacts with phone numbers</string>
<!-- Menu item used to send an SMS or MMS message to a phone number -->
<string name="menu_sendTextMessage">Send text message</string>
@@ -410,14 +414,14 @@
<!-- Text displayed when the call log is empty -->
<string name="recentCalls_empty">Call log is empty.</string>
- <!-- Title of the confirmation dialog for clearing the call log -->
- <string name="clearCallLogConfirmation_title">Clear call log</string>
+ <!-- Title of the confirmation dialog for clearing the call log. [CHAR LIMIT=20] -->
+ <string name="clearCallLogConfirmation_title">Clear call log?</string>
- <!-- Confirmation dialog for clearing the call log -->
- <string name="clearCallLogConfirmation">Are you sure you want to clear the call log?</string>
+ <!-- Confirmation dialog for clearing the call log. [CHAR LIMIT=NONE] -->
+ <string name="clearCallLogConfirmation">All your call records will be deleted.</string>
<!-- Title of the "Clearing call log" progress-dialog [CHAR LIMIT=35] -->
- <string name="clearCallLogProgress_title">Clearing call log</string>
+ <string name="clearCallLogProgress_title">Clearing call log\u2026</string>
<!-- The title of a dialog that displays the IMEI of the phone -->
<string name="imei">IMEI</string>
@@ -459,78 +463,69 @@
<!-- Displayed full screen when the user want to create a shortcut, but there is no contacts -->
<string name="noContactsHelpTextForCreateShortcut">"You don't have any contacts to display."</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled -->
- <string name="noContactsHelpText" product="tablet">"You don't have any contacts to display.\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the tablet\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled. [CHAR LIMIT=NONE] -->
+ <string name="noContactsHelpText" product="tablet">"You don't have any contacts to display.\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the tablet\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
- \n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SIM or SD card\n</li>"
+ \n<li><font fgcolor="#ffffffff"><b>Import/export</b></font> to import contacts from your SIM or SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled -->
- <string name="noContactsHelpText" product="default">"You don't have any contacts to display.\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the phone\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled. [CHAR LIMIT=NONE] -->
+ <string name="noContactsHelpText" product="default">"You don't have any contacts to display.\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the phone\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SIM or SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled -->
- <string name="noContactsHelpTextWithSync" product="tablet">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the tablet\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled. [CHAR LIMIT=NONE] -->
+ <string name="noContactsHelpTextWithSync" product="tablet">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the tablet\n</li>
\n<li><font fgcolor="#ffffffff"><b>Display options</b></font> to change which contacts are visible\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SIM or SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled -->
- <string name="noContactsHelpTextWithSync" product="default">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the phone\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled. [CHAR LIMIT=NONE] -->
+ <string name="noContactsHelpTextWithSync" product="default">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the phone\n</li>
\n<li><font fgcolor="#ffffffff"><b>Display options</b></font> to change which contacts are visible\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SIM or SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled, and there is no sim card (cdma)-->
- <string name="noContactsNoSimHelpText" product="tablet">"You don't have any contacts to display.\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the tablet\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled, and there is no sim card (cdma). [CHAR LIMIT=NONE]-->
+ <string name="noContactsNoSimHelpText" product="tablet">"You don't have any contacts to display.\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the tablet\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled, and there is no sim card (cdma)-->
- <string name="noContactsNoSimHelpText" product="default">"You don't have any contacts to display.\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the phone\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled, and there is no sim card (cdma). [CHAR LIMIT=NONE]-->
+ <string name="noContactsNoSimHelpText" product="default">"You don't have any contacts to display.\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the phone\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled, and there is no sim card (cdma) -->
- <string name="noContactsNoSimHelpTextWithSync" product="tablet">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the tablet\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled, and there is no sim card (cdma). [CHAR LIMIT=NONE] -->
+ <string name="noContactsNoSimHelpTextWithSync" product="tablet">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the tablet\n</li>
\n<li><font fgcolor="#ffffffff"><b>Display options</b></font> to change which contacts are visible\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled, and there is no sim card (cdma) -->
- <string name="noContactsNoSimHelpTextWithSync" product="default">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and touch:\n
- \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or configure an account with contacts you can sync to the phone\n</li>
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled, and there is no sim card (cdma). [CHAR LIMIT=NONE] -->
+ <string name="noContactsNoSimHelpTextWithSync" product="default">"You don't have any contacts to display. (If you just added an account, it can take a few minutes to sync contacts.)\n\nTo add contacts, touch <font fgcolor="#ffffffff"><b>Menu</b></font>, then touch:\n
+ \n<li><font fgcolor="#ffffffff"><b>Accounts</b></font> to add or set up an account with contacts you can sync to the phone\n</li>
\n<li><font fgcolor="#ffffffff"><b>Display options</b></font> to change which contacts are visible\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import/Export</b></font> to import contacts from your SD card\n</li>"
</string>
- <!-- Displayed full screen when the user has no favorites and they are displaying the favorites tab -->
+ <!-- Displayed full screen when the user has no favorites and they are displaying the favorites tab. [CHAR LIMIT=NONE] -->
<string name="noFavoritesHelpText">"You don't have any favorites.\n\nTo add a contact to your list of favorites:\n
<li>Touch the <b>Contacts</b> tab\n</li>
\n<li>Touch the contact you want to add to your favorites\n</li>
\n<li>Touch the star next to the contact\'s name\n</li>"
</string>
- <!-- Live folder label for all contacts -->
- <string name="liveFolder_all_label">All contacts</string>
-
- <!-- Live folder label for only starred contacts -->
- <string name="liveFolder_favorites_label">Starred</string>
-
- <!-- Live folder label for all contacts with phone numbers -->
- <string name="liveFolder_phones_label">Phones</string>
-
<!-- Item label: jump to the in-call DTMF dialpad.
(Part of a list of options shown in the dialer when another call
is already in progress.) -->
@@ -738,9 +733,9 @@
<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 detected</string>
- <!-- Dialog message shown when SDcard does not exist -->
- <string name="no_sdcard_message" product="default">No SD card detected</string>
+ <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>
@@ -773,9 +768,9 @@
<string name="import_all_vcard_string">Import all vCard files</string>
<!-- Dialog message shown when searching VCard data from (USB) storage [CHAR LIMIT=NONE] -->
- <string name="searching_vcard_message" product="nosdcard">Searching for vCard data in storage</string>
- <!-- Dialog message shown when searching VCard data from SD Card -->
- <string name="searching_vcard_message" product="default">Searching for vCard data on SD card</string>
+ <string name="searching_vcard_message" product="nosdcard">Searching for vCard data in storage\u2026</string>
+ <!-- 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>
@@ -784,39 +779,39 @@
<!-- 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">Couldn\'t scan storage (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
+ <string name="scanning_sdcard_failed_message" product="nosdcard">The storage couldn\'t be scanned. (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
<!-- Dialog message shown when searching VCard data failed.
- An exact reason for the failure should -->
- <string name="scanning_sdcard_failed_message" product="default">Couldn\'t scan SD card (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
+ An exact reason for the failure should [CHAR LIMIT=NONE] -->
+ <string name="scanning_sdcard_failed_message" product="default">The SD card couldn\'t be scanned. (Reason: \"<xliff:g id="fail_reason">%s</xliff:g>\")</string>
<!-- The failed reason shown when Contacts app (especially vCard importer/exporter)
- emitted some I/O error. Exact reason will be appended by the system. -->
- <string name="fail_reason_io_error">I/O Error</string>
+ emitted some I/O error. Exact reason will be appended by the system. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_io_error">I/O error</string>
<!-- Failure reason show when Contacts app (especially vCard importer) encountered
- low memory problem and could not proceed its import procedure. -->
- <string name="fail_reason_low_memory_during_import">Memory is insufficient (the file may be too large)</string>
+ low memory problem and could not proceed its import procedure. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_low_memory_during_import">Not enough memory. The file may be too large.</string>
<!-- The failed reason shown when vCard parser was not able to be parsed by the current vCard
implementation. This might happen even when the input vCard is completely valid, though
- we believe it is rather rare in the actual world. -->
- <string name="fail_reason_vcard_parse_error">Couldn\'t parse vCard for unexpected reason</string>
+ we believe it is rather rare in the actual world. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_vcard_parse_error">Couldn\'t parse vCard for an unexpected reason.</string>
<!-- The failed reason shown when vCard importer doesn't support the format.
This may be shown when the vCard is corrupted [CHAR LIMIT=40] -->
- <string name="fail_reason_not_supported">The format is not supported.</string>
+ <string name="fail_reason_not_supported">The format isn\'t supported.</string>
<!-- Message used when vCard import has failed. [CHAR LIMIT=40] -->
- <string name="vcard_import_failed">Couldn\'t import vCard</string>
+ <string name="vcard_import_failed">Couldn\'t import vCard.</string>
<!-- The failure message shown when the system could not find any vCard file.
(with extension ".vcf" in (USB) storage.)
[CHAR LIMIT=128] -->
- <string name="import_failure_no_vcard_file" product="nosdcard">No vCard file found in the storage</string>
+ <string name="import_failure_no_vcard_file" product="nosdcard">No vCard file found in storage.</string>
<!-- The failure message shown when the system could not find any vCard file.
(with extension ".vcf" in SDCard.)
[CHAR LIMIT=128] -->
- <string name="import_failure_no_vcard_file" product="default">No vCard file found on the SD card</string>
+ <string name="import_failure_no_vcard_file" product="default">No vCard file found on the SD card.</string>
<!-- Fail reason shown when vCard importer failed to look over meta information stored in vCard file(s). -->
<string name="fail_reason_failed_to_collect_vcard_meta_info">Couldn\'t collect meta information of given vCard file(s).</string>
@@ -825,19 +820,19 @@
files import. It includes the case where all files were failed to be imported. -->
<string name="fail_reason_failed_to_read_files">One or more files couldn\'t be imported (%s).</string>
- <!-- The failed reason which should not be shown but it may in some buggy condition. -->
- <string name="fail_reason_unknown">Unknown error</string>
+ <!-- The failed reason which should not be shown but it may in some buggy condition. [CHAR LIMIT=40] -->
+ <string name="fail_reason_unknown">Unknown error.</string>
- <!-- Dialog title shown when a user is asked to select vCard file -->
- <string name="select_vcard_title">Select vCard file</string>
+ <!-- Dialog title shown when a user is asked to select vCard file. [CHAR LIMIT=20] -->
+ <string name="select_vcard_title">Choose vCard file</string>
<!-- The title shown when vCard importer is caching files to be imported into local temporary
- data storage. -->
- <string name="caching_vcard_title">Caching vCard(s) to local temporary storage</string>
+ data storage. [CHAR LIMIT=40] -->
+ <string name="caching_vcard_title">Caching</string>
<!-- The message shown when vCard importer is caching files to be imported into local temporary
- data storage. -->
- <string name="caching_vcard_message">Importer is caching vCard(s) to local temporary storage. Actual import will start soon.</string>
+ data storage. [CHAR LIMIT=NONE] -->
+ <string name="caching_vcard_message">Caching vCard(s) to local temporary storage. The actual import will start soon.</string>
<!-- The message shown while importing vCard(s).
First argument is current index of contacts to be imported.
@@ -856,7 +851,7 @@
<!-- The title shown when reading vCard is canceled (probably by a user)
[CHAR LIMIT=40] -->
- <string name="reading_vcard_canceled_title">Reading vCard data was canceled</string>
+ <string name="reading_vcard_canceled_title">Reading vCard data canceled</string>
<!-- The title shown when reading vCard finished
The argument is file name the user imported.
@@ -866,7 +861,7 @@
<!-- The title shown when importing vCard is canceled (probably by a user)
The argument is file name the user canceled importing.
[CHAR LIMIT=40] -->
- <string name="importing_vcard_canceled_title">Importing <xliff:g id="filename" example="import.vcf">%s</xliff:g> was canceled</string>
+ <string name="importing_vcard_canceled_title">Importing <xliff:g id="filename" example="import.vcf">%s</xliff:g> canceled</string>
<!-- The message shown when vCard import request is accepted. The system may start that work soon, or do it later
when there are already other import/export requests.
@@ -878,14 +873,14 @@
[CHAR LIMIT=40] -->
<string name="vcard_import_will_start_message_with_default_name">The file will be imported shortly.</string>
<!-- The message shown when a given vCard import request is rejected by the system. [CHAR LIMIT=NONE] -->
- <string name="vcard_import_request_rejected_message">vCard import request is rejected. Please try later.</string>
+ <string name="vcard_import_request_rejected_message">vCard import request was rejected. Try again later.</string>
<!-- The message shown when vCard export request is accepted. The system may start that work soon, or do it later
when there are already other import/export requests.
The argument is file name the user exported.
[CHAR LIMIT=40] -->
<string name="vcard_export_will_start_message"><xliff:g id="filename" example="import.vcf">%s</xliff:g> will be exported shortly.</string>
<!-- The message shown when a given vCard export request is rejected by the system. [CHAR LIMIT=NONE] -->
- <string name="vcard_export_request_rejected_message">vCard export request is rejected. Please try later.</string>
+ <string name="vcard_export_request_rejected_message">vCard export request was rejected. Try again later.</string>
<!-- Used when file name is unknown in vCard processing. It typically happens
when the file is given outside the Contacts app. [CHAR LIMIT=30] -->
<string name="vcard_unknown_filename">contact</string>
@@ -893,78 +888,78 @@
<!-- The percentage, used for expressing the progress of vCard import/export. -->
<string name="percentage">%s%%</string>
- <!-- Dialog title shown when a user confirms whether he/she export Contact data -->
- <string name="confirm_export_title">Confirm export</string>
+ <!-- Dialog title shown when a user confirms whether he/she export Contact data. [CHAR LIMIT=20] -->
+ <string name="confirm_export_title">Export contacts?</string>
<!-- Dialog message shown when a user confirms whether he/she export Contact data [CHAR LIMIT=NONE] -->
- <string name="confirm_export_message">Export your contact list to file \"<xliff:g id="vcard_filename">%s</xliff:g>\"?</string>
+ <string name="confirm_export_message">Your contact list will be exported to file: <xliff:g id="vcard_filename">%s</xliff:g>.</string>
- <!-- Dialog title shown when exporting Contact data failed -->
- <string name="exporting_contact_failed_title">Couldn\'t export contact data</string>
+ <!-- Dialog title shown when exporting Contact data failed. [CHAR LIMIT=20] -->
+ <string name="exporting_contact_failed_title">Couldn\'t export</string>
- <!-- Dialog message shown when exporting Contact data failed -->
- <string name="exporting_contact_failed_message">Couldn\'t export contact data.\nReason: \"<xliff:g id="fail_reason">%s</xliff:g>\"</string>
+ <!-- Dialog message shown when exporting Contact data failed. [CHAR LIMIT=NONE] -->
+ <string name="exporting_contact_failed_message">The contact data wasn\'t exported.\nReason: \"<xliff:g id="fail_reason">%s</xliff:g>\"</string>
<!-- The failed reason shown when there's no contact which is allowed to be exported.
Note that user may have contacts data but all of them are probably not allowed to be
- exported because of security/permission reasons. -->
- <string name="fail_reason_no_exportable_contact">There is no exportable contact</string>
+ exported because of security/permission reasons. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_no_exportable_contact">There is no exportable contact.</string>
<!-- The failed reason shown when vCard exporter could not create a file for the vCard since
there are too many files relevant to vCard. [CHAR LIMIT=NONE] -->
- <string name="fail_reason_too_many_vcard" product="nosdcard">Too many vCard files in the storage</string>
+ <string name="fail_reason_too_many_vcard" product="nosdcard">Too many vCard files are in the storage.</string>
<!-- The failed reason shown when vCard exporter could not create a file for the vCard since
there are too many files relevant to vCard. -->
- <string name="fail_reason_too_many_vcard" product="default">Too many vCard files on the SD card</string>
+ <string name="fail_reason_too_many_vcard" product="default">Too many vCard files are on the SD card.</string>
<!-- The failed reason shown when the given file name is too long for the system.
The length limit of each file is different in each Android device, so we don't need to
- mention it here. -->
- <string name="fail_reason_too_long_filename">Required filename is too long (\"<xliff:g id="filename">%s</xliff:g>\")</string>
+ mention it here. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_too_long_filename">Required filename is too long (\"<xliff:g id="filename">%s</xliff:g>\").</string>
<!-- The title shown when exporting vCard is successfuly finished [CHAR LIMIT=40] -->
- <string name="exporting_vcard_finished_title">Finished exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g></string>
+ <string name="exporting_vcard_finished_title">Finished exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g>.</string>
<!-- The title shown when exporting vCard is canceled (probably by a user)
The argument is file name the user canceled importing.
[CHAR LIMIT=40] -->
- <string name="exporting_vcard_canceled_title">Exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g> was canceled</string>
+ <string name="exporting_vcard_canceled_title">Exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g> canceled.</string>
- <!-- Dialog title shown when the application is exporting contact data outside -->
+ <!-- Dialog title shown when the application is exporting contact data outside. [CHAR LIMIT=NONE] -->
<string name="exporting_contact_list_title">Exporting contact data</string>
<!-- Message shown when the application is exporting contact data outside -->
- <string name="exporting_contact_list_message">Exporting contact data to \"<xliff:g id="file_name">%s</xliff:g>\"</string>
+ <string name="exporting_contact_list_message">Your contact data is being exported to: <xliff:g id="file_name">%s</xliff:g>.</string>
<!-- The failed reason shown when contacts exporter fails to be initialized.
- Some exact reason must follow this. -->
- <string name="fail_reason_could_not_initialize_exporter">Could not initialize the exporter: \"<xliff:g id="exact_reason">%s</xliff:g>\"</string>
+ Some exact reason must follow this. [CHAR LIMIT=NONE]-->
+ <string name="fail_reason_could_not_initialize_exporter">Couldn\'t start the exporter: \"<xliff:g id="exact_reason">%s</xliff:g>\".</string>
<!-- The failed reason shown when some error happend during contacts export.
- Some exact reason must follow this. -->
- <string name="fail_reason_error_occurred_during_export">Error occured during export: \"<xliff:g id="exact_reason">%s</xliff:g>\"</string>
+ Some exact reason must follow this. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_error_occurred_during_export">An error occurred during export: \"<xliff:g id="exact_reason">%s</xliff:g>\".</string>
<!-- The error reason the vCard composer "may" emit when database is corrupted or
- something is going wrong. Usually users should not see this text. -->
- <string name="composer_failed_to_get_database_infomation">Couldn\'t get database information</string>
+ something is going wrong. Usually users should not see this text. [CHAR LIMIT=NONE] -->
+ <string name="composer_failed_to_get_database_infomation">Couldn\'t get database information.</string>
<!-- This error message shown when the user actually have no contact
(e.g. just after data-wiping), or, data providers of the contact list prohibits their
- contacts from being exported to outside world via vcard exporter, etc. -->
- <string name="composer_has_no_exportable_contact" product="tablet">There are no exportable contacts. If you actually have contacts on your tablet, all the contacts may be prohibited from being exported to outside the tablet by some data providers.</string>
+ contacts from being exported to outside world via vcard exporter, etc. [CHAR LIMIT=NONE] -->
+ <string name="composer_has_no_exportable_contact" product="tablet">There are no exportable contacts. If you do have contacts on your tablet, some data providers may not allow the contacts to be exported from the tablet.</string>
<!-- This error message shown when the user actually have no contact
(e.g. just after data-wiping), or, data providers of the contact list prohibits their
- contacts from being exported to outside world via vcard exporter, etc. -->
- <string name="composer_has_no_exportable_contact" product="default">There are no exportable contacts. If you actually have contacts on your phone, all the contacts may be prohibited from being exported to outside the phone by some data providers.</string>
+ contacts from being exported to outside world via vcard exporter, etc. [CHAR LIMIT=NONE] -->
+ <string name="composer_has_no_exportable_contact" product="default">There are no exportable contacts. If you do have contacts on your phone, some data providers may not allow the contacts to be exported from the phone.</string>
<!-- The error reason the vCard composer may emit when vCard composer is not initialized
even when needed.
- Users should not usually see this error message. -->
- <string name="composer_not_initialized">The vCard composer is not correctly initialized</string>
+ Users should not usually see this error message. [CHAR LIMIT=NONE] -->
+ <string name="composer_not_initialized">The vCard composer didn\'t start properly.</string>
<!-- The failed reason shown when vCard importer/exporter could not open the file
- specified by a user. The file name should be in the message. -->
- <string name="fail_reason_could_not_open_file">Could not open \"<xliff:g id="file_name">%s</xliff:g>\": <xliff:g id="exact_reason">%s</xliff:g></string>
+ specified by a user. The file name should be in the message. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_could_not_open_file">Couldn\'t open \"<xliff:g id="file_name">%s</xliff:g>\": <xliff:g id="exact_reason">%s</xliff:g>.</string>
<!-- Message in progress bar while exporting contact list to a file "(current number) of (total number) contacts" The order of "current number" and "total number" cannot be changed (like "total: (total number), current: (current number)")-->
<string name="exporting_contact_list_progress"><xliff:g id="current_number">%s</xliff:g> of <xliff:g id="total_number">%s</xliff:g> contacts</string>
@@ -975,7 +970,7 @@
<!-- 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">Are you sure to cancel importing <xliff:g id="filename" example="import.vcf">%s</xliff:g>?</string>
+ <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>
@@ -983,7 +978,7 @@
<!-- Message shown in a Dialog confirming a user's cancel request toward existing vCard export.
The argument is file name for the vCard export the user wants to cancel.
[CHAR LIMIT=128] -->
- <string name="cancel_export_confirmation_message">Are you sure to cancel exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g>?</string>
+ <string name="cancel_export_confirmation_message">Cancel export of <xliff:g id="filename" example="export.vcf">%s</xliff:g>?</string>
<!-- Title shown in a Dialog telling users cancel vCard import/export operation is failed. [CHAR LIMIT=40] -->
<string name="cancel_vcard_import_or_export_failed">Couldn\'t cancel vCard import/export</string>
@@ -1008,11 +1003,11 @@
<string name="make_primary">Remember this choice</string>
<!-- Shown as a toast when the user taps on a QuickContact icon, and no application
- was found that could perform the selected action -->
- <string name="quickcontact_missing_app">No application found to handle this action</string>
+ was found that could perform the selected action. [CHAR LIMIT=NONE] -->
+ <string name="quickcontact_missing_app">No app was found to handle this action.</string>
<!-- Shown as the display name for a person when the name is missing or unknown. [CHAR LIMIT=18]-->
- <string name="missing_name">(no name)</string>
+ <string name="missing_name">(No name)</string>
<!-- The menu item to open the list of accounts -->
<string name="menu_accounts">Accounts</string>
@@ -1020,11 +1015,11 @@
<!-- The menu item to filter the list of contacts displayed -->
<string name="menu_contacts_filter">Contacts to display</string>
- <!-- The menu item to bulk import or bulk export contacts from SIM card or SD card. -->
- <string name="menu_import_export">Import/Export</string>
+ <!-- The menu item to bulk import or bulk export contacts from SIM card or SD card. [CHAR LIMIT=30]-->
+ <string name="menu_import_export">Import/export</string>
- <!-- Dialog title when selecting the bulk operation to perform from a list. -->
- <string name="dialog_import_export">Import/Export contacts</string>
+ <!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=25] -->
+ <string name="dialog_import_export">Import/export contacts</string>
<!-- The menu item to share the currently viewed contact [CHAR LIMIT=30] -->
<string name="menu_share">Share</string>
@@ -1035,8 +1030,8 @@
<!-- Dialog title when picking the application to share a contact with. -->
<string name="share_via">Share contact via</string>
- <!-- Toast indicating that sharing a contact has failed. -->
- <string name="share_error">This contact cannot be shared.</string>
+ <!-- Toast indicating that sharing a contact has failed. [CHAR LIMIT=NONE] -->
+ <string name="share_error">This contact can\'t be shared.</string>
<!-- Header that expands to list all name types when editing a structured name of a contact [CHAR LIMIT=20] -->
<string name="nameLabelsGroup">Name</string>
@@ -1053,17 +1048,6 @@
<!-- Header for the list of all groups for a contact [CHAR LIMIT=20] -->
<string name="groupsLabel">Groups</string>
- <!-- Single-character overlay for home phone numbers when creating desktop shortcuts -->
- <string name="type_short_home">H</string>
- <!-- Single-character overlay for mobile phone numbers when creating desktop shortcuts -->
- <string name="type_short_mobile">M</string>
- <!-- Single-character overlay for work phone numbers when creating desktop shortcuts -->
- <string name="type_short_work">W</string>
- <!-- Single-character overlay for pager phone numbers when creating desktop shortcuts -->
- <string name="type_short_pager">P</string>
- <!-- Single-character overlay for other phone numbers when creating desktop shortcuts -->
- <string name="type_short_other">O</string>
-
<string name="dialog_new_contact_account">Create contact under account</string>
<!-- Title for the disambiguation dialog that requests the user choose an account for the new group to be created under [CHAR LIMIT=NONE] -->
@@ -1073,16 +1057,16 @@
<string name="dialog_sync_add">Add sync group</string>
<string name="display_more_groups">More groups\u2026</string>
- <!-- List title for a special contacts group that covers all contacts.-->
- <string name="display_ungrouped">All Other Contacts</string>
+ <!-- List title for a special contacts group that covers all contacts. [CHAR LIMIT=25] -->
+ <string name="display_ungrouped">All other contacts</string>
<!-- List title for a special contacts group that covers all contacts that
- aren't members of any other group. -->
- <string name="display_all_contacts">All Contacts</string>
+ aren't members of any other group. [CHAR LIMIT=25] -->
+ <string name="display_all_contacts">All contacts</string>
<!-- Warning message given to users just before they remove a currently syncing
- group that would also cause all ungrouped contacts to stop syncing. -->
- <string name="display_warn_remove_ungrouped">Removing \'<xliff:g id="group" example="Starred">%s</xliff:g>\' from sync will also remove any ungrouped contacts from sync.</string>
+ group that would also cause all ungrouped contacts to stop syncing. [CHAR LIMIT=NONE] -->
+ <string name="display_warn_remove_ungrouped">Removing \"<xliff:g id="group" example="Starred">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync.</string>
<!-- Title for data source when creating or editing a contact that doesn't
belong to a specific account. This contact will only exist on the phone
@@ -1225,7 +1209,7 @@
<!-- Generic action string for starting an IM chat -->
<string name="chat">Chat</string>
<!-- Generic action string for starting an audio chat. Used by AccessibilityService to announce the purpose of the view. [CHAR LIMIT=NONE] -->
- <string name="audio_chat">Audio chat</string>
+ <string name="audio_chat">Voice chat</string>
<!-- Generic action string for starting a video chat. Used by AccessibilityService to announce the purpose of the view. [CHAR LIMIT=NONE] -->
<string name="video_chat">Video chat</string>
@@ -1273,8 +1257,11 @@
<!-- Label of the button to open the "add connection" popup where the user can invite a contact to other social networks or services [CHAR LIMIT=32] -->
<string name="add_connection_button">Add connection</string>
+ <!-- Section title for the page containing the contact's social updates on the contact card (this abbreviated version of "Recent updates" is used when "updates" is already shown as the title of the page) [CHAR LIMIT=20]-->
+ <string name="recent" msgid="2062236709538790412">Recent</string>
+
<!-- Section title for the page containing the contact's social updates on the contact card [CHAR LIMIT=20]-->
- <string name="recent_updates">Recent</string>
+ <string name="recent_updates" msgid="2018245636796411442">Recent updates</string>
<!-- String describing which account type a contact came from when editing it -->
<string name="account_type_format"><xliff:g id="source" example="Gmail">%1$s</xliff:g> contact</string>
@@ -1286,13 +1273,13 @@
<string name="use_photo_as_primary">Use this photo</string>
<!-- Text used to explain that a contact cannot be edited from the People application since the data is read only [CHAR LIMIT=40] -->
- <string name="contact_read_only">Not editable from this application</string>
+ <string name="contact_read_only">Not editable from this app.</string>
- <!-- Text describing that a contact has no information available other than name and photo -->
- <string name="no_contact_details">No additional information for this contact</string>
+ <!-- Text describing that a contact has no information available other than name and photo. [CHAR LIMIT=60] -->
+ <string name="no_contact_details">No additional information for this contact.</string>
<!-- Text used to explain that a group cannot be edited since the data is read only [CHAR LIMIT=40] -->
- <string name="group_read_only">Not editable on this device</string>
+ <string name="group_read_only">Not editable on this device.</string>
<!-- Label of the "sort list by" display option -->
<string name="display_options_sort_list_by">Sort list by</string>
@@ -1322,7 +1309,7 @@
<string name="take_new_photo">Take new photo</string>
<!-- An option in the 'Contact photo' dialog, if there is no photo yet [CHAR LIMIT=50] -->
- <string name="pick_photo">Select photo from Gallery</string>
+ <string name="pick_photo">Choose photo from Gallery</string>
<!-- An option in the 'Contact photo' dialog, if there is already a photo [CHAR LIMIT=50] -->
<string name="pick_new_photo">Select new photo from Gallery</string>
@@ -1336,7 +1323,7 @@
<!-- Text shown in the contacts app if the background process updating contacts fails because of memory shortage [CHAR LIMIT=300] -->
<string name="upgrade_out_of_memory">Contacts are in the process of being upgraded.
\n\nThe upgrade process requires approximately <xliff:g id="size_in_megabytes">%s</xliff:g>
- Mb of internal storage.\n\nChoose one of the following options:</string>
+ MB of internal storage.\n\nChoose one of the following options:</string>
<!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage [CHAR LIMIT=50] -->
<string name="upgrade_out_of_memory_uninstall">Uninstall some applications</string>
@@ -1344,8 +1331,8 @@
<!-- Button shown in the contacts app if the background process updating contacts fails because of memory shortage [CHAR LIMIT=50] -->
<string name="upgrade_out_of_memory_retry">Retry upgrade</string>
- <!-- Title shown in the search result activity of contacts app while searching -->
- <string name="search_results_searching">Searching...</string>
+ <!-- Title shown in the search result activity of contacts app while searching. [CHAR LIMIT=20] -->
+ <string name="search_results_searching">Searching\u2026</string>
<!-- Label to display only selection in multiple picker -->
<string name="menu_display_selected">"Show selected"</string>
@@ -1421,13 +1408,13 @@
the selected contact? Information you entered so far will be copied.</string>
<!-- The button that creates a local copy of a corporate contact. [CHAR LIMIT=40]-->
- <string name="menu_copyContact">Copy to my contacts</string>
+ <string name="menu_copyContact">Copy to My Contacts</string>
<!-- The button that adds a contact to the predefined group "My Contacts" (as this is
mostly interesting for Google-contacts, this should have the same description as the
function of GMail/Contacts on the Web
[CHAR LIMIT=40] -->
- <string name="add_to_my_contacts">Add to "My Contacts"</string>
+ <string name="add_to_my_contacts">Add to My Contacts</string>
<!-- The description of the directory where the contact was found [CHAR LIMIT=100]-->
<string name="contact_directory_description">Directory <xliff:g id="type" example="Corporate Directory">%1$s</xliff:g></string>
@@ -1439,7 +1426,7 @@
<string name="local_search_label">All contacts</string>
<!-- Toast shown when creating a personal copy of a contact [CHAR LIMIT=100] -->
- <string name="toast_making_personal_copy">Creating a personal copy</string>
+ <string name="toast_making_personal_copy">Creating a personal copy\u2026</string>
<!-- Contact list filter label indicating that the list is showing all available accounts [CHAR LIMIT=64] -->
<string name="list_filter_all_accounts">All contacts</string>
@@ -1451,7 +1438,7 @@
<string name="list_filter_custom">Custom</string>
<!-- Contact list filter selection indicating that the list shows groups chosen by the user [CHAR LIMIT=64] -->
- <string name="list_filter_customize">Customize...</string>
+ <string name="list_filter_customize">Customize</string>
<!-- Contact list filter selection indicating that the list shows all contacts with phone numbers [CHAR LIMIT=64] -->
<string name="list_filter_phones">All contacts with phone numbers</string>
@@ -1463,7 +1450,7 @@
<string name="custom_list_filter">Define custom view</string>
<!-- Message that appears in the favorites tab of the Phone app when the contact list has not fully loaded yet (below the favorite and frequent contacts) [CHAR LIMIT=20] -->
- <string name="contact_list_loading">Loading \u2026</string>
+ <string name="contact_list_loading">Loading\u2026</string>
<!-- Title of the settings activity [CHAR LIMIT=64] -->
<string name="activity_title_settings">Settings</string>
@@ -1506,7 +1493,7 @@
<string name="social_widget_label">Contact</string>
<!-- Message of widget while it is loading data [CHAR LIMIT=20] -->
- <string name="social_widget_loading">Loading \u2026</string>
+ <string name="social_widget_loading">Loading\u2026</string>
<!-- Button shown on the main contacts screen when there are no contacts on the device.
Creates a new contact. [CHAR LIMIT=128] -->
@@ -1536,8 +1523,8 @@
</plurals>
<!-- Confirmation message of the dialog that allows deletion of a contact group [CHAR LIMIT=256] -->
- <string name="delete_group_dialog_message">Are you sure you want to delete the group
- \'<xliff:g id="group_label" example="Friends">%1$s</xliff:g>\'?
+ <string name="delete_group_dialog_message">Delete the group
+ \"<xliff:g id="group_label" example="Friends">%1$s</xliff:g>\"?
(Contacts themselves will not be deleted.)
</string>
@@ -1555,8 +1542,8 @@
<!-- Toast displayed when the user creates a new contact and attempts to join it
with another before entering any data [CHAR LIMIT=256] -->
- <string name="toast_join_with_empty_contact">Please enter contact name before joining
- with another contact.
+ <string name="toast_join_with_empty_contact">Type contact name before joining
+ with another.
</string>
<!-- Option displayed in context menu to copy long pressed item to clipboard [CHAR LIMIT=64] -->
@@ -1575,7 +1562,7 @@
<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">Do you want to discard your changes?</string>
+ <string name="cancel_confirmation_dialog_message">Discard your changes?</string>
<!-- Description of a call log entry, made of a call type and a date -->
<string name="call_type_and_date">
@@ -1632,41 +1619,41 @@
<!-- Voicemail status message shown at the top of call log to notify the user that no new
voicemails are currently available. This can happen when both notification as well as data
connection to the voicemail server is lost. [CHAR LIMIT=64] -->
- <string name="voicemail_status_voicemail_not_available">Cannot connect to voicemail server.</string>
+ <string name="voicemail_status_voicemail_not_available">Can\'t connect to voicemail server.</string>
<!-- Voicemail status message shown at the top of call log to notify the user that there is no
data connection to the voicemail server, but there are new voicemails waiting on the server.
[CHAR LIMIT=64] -->
- <string name="voicemail_status_messages_waiting">Cannot connect to voicemail server. New voicemails waiting.</string>
+ <string name="voicemail_status_messages_waiting">Can\'t connect to voicemail server. New voicemails are waiting.</string>
<!-- Voicemail status message shown at the top of call log to invite the user to configure
visual voicemail. [CHAR LIMIT=64] -->
- <string name="voicemail_status_configure_voicemail">Configure your voicemail.</string>
+ <string name="voicemail_status_configure_voicemail">Set up your voicemail.</string>
<!-- Voicemail status message shown at the top of call details screen to notify the user that
the audio of this voicemail is not available. [CHAR LIMIT=64] -->
<string name="voicemail_status_audio_not_available">Audio not available.</string>
<!-- User action prompt shown next to a voicemail status message to let the user configure
visual voicemail. [CHAR LIMIT=20] -->
- <string name="voicemail_status_action_configure">Configure</string>
+ <string name="voicemail_status_action_configure">Set up</string>
<!-- User action prompt shown next to a voicemail status message to let the user call voicemail
server directly to listen to the voicemails. [CHAR LIMIT=20] -->
<string name="voicemail_status_action_call_server">Call voicemail</string>
<!-- The slowest voicemail playback speed. [CHAR LIMIT=30] -->
- <string name="voicemail_speed_slowest">slowest speed</string>
+ <string name="voicemail_speed_slowest">Slowest speed</string>
<!-- Slower than normal voicemail playback speed. [CHAR LIMIT=30] -->
- <string name="voicemail_speed_slower">slow speed</string>
+ <string name="voicemail_speed_slower">Slow speed</string>
<!-- Normal voicemail playback speed. [CHAR LIMIT=30] -->
- <string name="voicemail_speed_normal">normal speed</string>
+ <string name="voicemail_speed_normal">Normal speed</string>
<!-- Faster than normal pvoicemail playback speed. [CHAR LIMIT=30] -->
- <string name="voicemail_speed_faster">fast speed</string>
+ <string name="voicemail_speed_faster">Fast speed</string>
<!-- Fastest voicemail playback speed. [CHAR LIMIT=30] -->
- <string name="voicemail_speed_fastest">fastest speed</string>
+ <string name="voicemail_speed_fastest">Fastest speed</string>
<!-- The counter for calls in a group and the date of the latest call as shown in the call log [CHAR LIMIT=15] -->
<string name="call_log_item_count_and_date">(<xliff:g id="count">%1$d</xliff:g>) <xliff:g id="date">%2$s</xliff:g></string>
<!-- Hint text in the group name box in the edit group view. [CHAR LIMIT=20]-->
- <string name="group_name_hint">Group\'s Name</string>
+ <string name="group_name_hint">Group\'s name</string>
<!-- The "file name" displayed for vCards received directly via NFC [CHAR LIMIT=16] -->
<string name="nfc_vcard_file_name">Contact received over NFC</string>
@@ -1837,5 +1824,5 @@
<!-- 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 configure voicemail, go to Menu > Settings.</string>
+ <string name="dialog_voicemail_not_ready_message">To set up voicemail, go to Menu > Settings.</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index db2e0d4..ece881e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -21,6 +21,7 @@
<item name="android:actionBarStyle">@style/DialtactsActionBarStyle</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@drawable/background_dial_holo_dark</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
<item name="activated_background">@drawable/list_item_activated_background</item>
<item name="section_header_background">@drawable/list_title_holo</item>
<item name="list_section_header_height">32dip</item>
@@ -44,6 +45,8 @@
<item name="list_item_header_height">24dip</item>
<item name="list_item_header_underline_height">1dip</item>
<item name="list_item_header_underline_color">@color/people_app_theme_color</item>
+ <item name="list_item_data_width_weight">5</item>
+ <item name="list_item_label_width_weight">3</item>
<item name="contact_browser_list_padding_left">16dip</item>
<item name="contact_browser_list_padding_right">0dip</item>
<item name="contact_browser_background">@android:color/transparent</item>
@@ -66,6 +69,7 @@
<style name="CallDetailActivityTheme" parent="android:Theme.Holo">
<item name="android:windowBackground">@android:color/black</item>
<item name="android:gravity">top</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
<!-- CallLog -->
<item name="call_log_primary_text_color">#FFFFFF</item>
<item name="call_log_primary_background_color">#000000</item>
@@ -82,16 +86,20 @@
<style name="DetailActivityTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ContactsActionBarStyle</item>
<item name="android:actionBarItemBackground">@drawable/action_bar_item_background</item>
+ <item name="android:actionBarWidgetTheme">@style/ContactsActionBarTheme</item>
<item name="android:textColorPrimary">@color/primary_text_color</item>
<item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="EditorActivityTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ContactsActionBarStyle</item>
<item name="android:actionBarItemBackground">@drawable/action_bar_item_background</item>
+ <item name="android:actionBarWidgetTheme">@style/ContactsActionBarTheme</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:textColorPrimary">@color/primary_text_color</item>
<item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="BackgroundOnlyTheme" parent="@android:style/Theme.Holo.Light">
@@ -116,6 +124,7 @@
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="PeopleTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
@@ -125,6 +134,7 @@
<item name="android:actionBarTabStyle">@style/ContactsActionBarTabView</item>
<item name="android:textColorPrimary">@color/primary_text_color</item>
<item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
<item name="list_item_height">?android:attr/listPreferredItemHeight</item>
<item name="activated_background">@drawable/list_item_activated_background</item>
<item name="section_header_background">@drawable/list_title_holo</item>
@@ -148,6 +158,8 @@
<item name="list_item_header_height">26dip</item>
<item name="list_item_header_underline_height">1dip</item>
<item name="list_item_header_underline_color">@color/people_app_theme_color</item>
+ <item name="list_item_data_width_weight">5</item>
+ <item name="list_item_label_width_weight">3</item>
<item name="list_item_contacts_count_text_color">@color/contact_count_text_color</item>
<item name="list_item_header_text_indent">8dip</item>
<item name="contact_browser_list_padding_left">16dip</item>
@@ -167,16 +179,25 @@
<style name="ContactsActionBarTheme" parent="@android:style/Theme.Holo">
<item name="android:textColorHint">#CCCCCC</item>
+ <item name="android:textColor">@android:color/black</item>
+ <item name="android:popupMenuStyle">@android:style/Widget.Holo.Light.PopupMenu</item>
+ <item name="android:dropDownListViewStyle">@style/ListViewDropdownStyle</item>
</style>
<style name="ContactsActionBarTabView" parent="@android:style/Widget.Holo.ActionBar.TabView">
<item name="android:background">@drawable/action_bar_tab</item>
</style>
- <style name="ContactPickerTheme" parent="@style/PeopleTheme">
- <item name="android:windowActionBar">false</item>
- <item name="android:windowNoTitle">true</item>
+ <style name="ListViewDropdownStyle" parent="@android:style/Widget.ListView.DropDown">
+ <item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
</style>
+
+ <style name="ListViewStyle" parent="@android:style/Widget.Holo.Light.ListView">
+ <item name="android:overScrollMode">always</item>
+ </style>
+
+ <style name="ContactPickerTheme" parent="@style/PeopleTheme" />
+
<style name="ContactPickerLayout" parent="ContactPickerTheme">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
@@ -186,9 +207,11 @@
</style>
<style name="ContactsPreferencesTheme" parent="@android:Theme.Holo.Light">
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="ContactListFilterTheme" parent="@android:Theme.Holo.Light">
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="CustomContactListFilterView" parent="ContactListFilterTheme">
@@ -214,6 +237,7 @@
<item name="android:windowCloseOnTouchOutside">true</item>
<item name="android:textColorPrimary">@color/primary_text_color</item>
<item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="SectionDivider">
@@ -289,4 +313,28 @@
<item name="android:layout_height">2dip</item>
<item name="android:background">@color/quickcontact_tab_indicator</item>
</style>
+
+
+ <style name="GroupMembershipSizeTextAppearance" parent="@android:style/TextAppearance.Small"/>
+
+ <!-- TextView style with blue underline. It is most suitable for headers.
+
+ This is similar to ?android:attr/listSeparatorTextView but uses different
+ background and text color. See also android:style/Widget.Holo.TextView.ListSeparator
+ (which is private, so we cannot specify it as a parent style). -->
+ <style name="ContactListSeparatorTextViewStyle">
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">wrap_content</item>
+ <!-- See comments for @dimen/list_section_divider_min_height -->
+ <item name="android:minHeight">@dimen/list_section_divider_min_height</item>
+ <item name="android:background">@drawable/list_section_divider_holo_custom</item>
+ <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:textColor">@color/people_app_theme_color</item>
+ <item name="android:gravity">center_vertical</item>
+ <item name="android:paddingLeft">8dip</item>
+ <item name="android:ellipsize">end</item>
+ <item name="android:singleLine">true</item>
+ <item name="android:textAllCaps">true</item>
+ </style>
</resources>
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index 012acc7..caa8bce 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -121,7 +121,11 @@
private TextView mStatusMessageAction;
/** Whether we should show "edit number before call" in the options menu. */
- private boolean mHasEditNumberBeforeCall;
+ private boolean mHasEditNumberBeforeCallOption;
+ /** Whether we should show "trash" in the options menu. */
+ private boolean mHasTrashOption;
+ /** Whether we should show "remove from call log" in the options menu. */
+ private boolean mHasRemoveFromCallLogOption;
private ProximitySensorManager mProximitySensorManager;
private final ProximitySensorListener mProximitySensorListener = new ProximitySensorListener();
@@ -218,7 +222,7 @@
mResources = getResources();
mCallTypeHelper = new CallTypeHelper(getResources());
- mPhoneNumberHelper = new PhoneNumberHelper(mResources, getVoicemailNumber());
+ mPhoneNumberHelper = new PhoneNumberHelper(mResources);
mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(mResources, mCallTypeHelper,
mPhoneNumberHelper);
mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
@@ -290,7 +294,8 @@
public Void doInBackground(Void... params) {
ContentValues values = new ContentValues();
values.put(Voicemails.IS_READ, true);
- getContentResolver().update(voicemailUri, values, null, null);
+ getContentResolver().update(voicemailUri, values,
+ Voicemails.IS_READ + " = 0", null);
return null;
}
});
@@ -491,7 +496,10 @@
disableCallButton();
}
- mHasEditNumberBeforeCall = canPlaceCallsTo && !isSipNumber && !isVoicemailNumber;
+ mHasEditNumberBeforeCallOption =
+ canPlaceCallsTo && !isSipNumber && !isVoicemailNumber;
+ mHasTrashOption = hasVoicemail();
+ mHasRemoveFromCallLogOption = !hasVoicemail();
invalidateOptionsMenu();
ListView historyList = (ListView) findViewById(R.id.history);
@@ -564,6 +572,7 @@
// If this is not a regular number, there is no point in looking it up in the contacts.
ContactInfo info =
mPhoneNumberHelper.canPlaceCallsTo(number)
+ && !mPhoneNumberHelper.isVoicemailNumber(number)
? mContactInfoHelper.lookupNumber(number, countryIso)
: null;
if (info == null) {
@@ -596,12 +605,6 @@
mContactPhotoManager.loadPhoto(mContactBackgroundView, photoUri, true, true);
}
- private String getVoicemailNumber() {
- TelephonyManager telephonyManager =
- (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- return telephonyManager.getVoiceMailNumber();
- }
-
static final class ViewEntry {
public final String text;
public final Intent primaryIntent;
@@ -723,9 +726,9 @@
public boolean onPrepareOptionsMenu(Menu menu) {
// This action deletes all elements in the group from the call log.
// We don't have this action for voicemails, because you can just use the trash button.
- menu.findItem(R.id.menu_remove_from_call_log).setVisible(!hasVoicemail());
- menu.findItem(R.id.menu_edit_number_before_call).setVisible(mHasEditNumberBeforeCall);
- menu.findItem(R.id.menu_trash).setVisible(hasVoicemail());
+ menu.findItem(R.id.menu_remove_from_call_log).setVisible(mHasRemoveFromCallLogOption);
+ menu.findItem(R.id.menu_edit_number_before_call).setVisible(mHasEditNumberBeforeCallOption);
+ menu.findItem(R.id.menu_trash).setVisible(mHasTrashOption);
return super.onPrepareOptionsMenu(menu);
}
diff --git a/src/com/android/contacts/ContactLoader.java b/src/com/android/contacts/ContactLoader.java
index c9fbeae..c711b6c 100644
--- a/src/com/android/contacts/ContactLoader.java
+++ b/src/com/android/contacts/ContactLoader.java
@@ -19,6 +19,7 @@
import com.android.contacts.model.AccountType;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.AccountTypeWithDataSet;
+import com.android.contacts.util.ContactLoaderUtils;
import com.android.contacts.util.DataStatus;
import com.android.contacts.util.StreamItemEntry;
import com.android.contacts.util.StreamItemPhotoEntry;
@@ -681,7 +682,8 @@
protected Result doInBackground(Void... args) {
try {
final ContentResolver resolver = getContext().getContentResolver();
- final Uri uriCurrentFormat = ensureIsContactUri(resolver, mLookupUri);
+ final Uri uriCurrentFormat = ContactLoaderUtils.ensureIsContactUri(
+ resolver, mLookupUri);
Result result = loadContactEntity(resolver, uriCurrentFormat);
if (!result.isNotFound()) {
if (result.isDirectoryEntry()) {
@@ -706,47 +708,6 @@
}
}
- /**
- * Transforms the given Uri and returns a Lookup-Uri that represents the contact.
- * For legacy contacts, a raw-contact lookup is performed.
- * @param resolver
- */
- private Uri ensureIsContactUri(final ContentResolver resolver, final Uri uri) {
- if (uri == null) throw new IllegalArgumentException("uri must not be null");
-
- final String authority = uri.getAuthority();
-
- // Current Style Uri?
- if (ContactsContract.AUTHORITY.equals(authority)) {
- final String type = resolver.getType(uri);
- // Contact-Uri? Good, return it
- if (Contacts.CONTENT_ITEM_TYPE.equals(type)) {
- return uri;
- }
-
- // RawContact-Uri? Transform it to ContactUri
- if (RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
- final long rawContactId = ContentUris.parseId(uri);
- return RawContacts.getContactLookupUri(getContext().getContentResolver(),
- ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
- }
-
- // Anything else? We don't know what this is
- throw new IllegalArgumentException("uri format is unknown");
- }
-
- // Legacy Style? Convert to RawContact
- final String OBSOLETE_AUTHORITY = "contacts";
- if (OBSOLETE_AUTHORITY.equals(authority)) {
- // Legacy Format. Convert to RawContact-Uri and then lookup the contact
- final long rawContactId = ContentUris.parseId(uri);
- return RawContacts.getContactLookupUri(resolver,
- ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
- }
-
- throw new IllegalArgumentException("uri authority is unknown");
- }
-
private Result loadContactEntity(ContentResolver resolver, Uri contactUri) {
Uri entityUri = Uri.withAppendedPath(contactUri, Contacts.Entity.CONTENT_DIRECTORY);
Cursor cursor = resolver.query(entityUri, ContactQuery.COLUMNS, null, null,
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index eb8ffa9..f806c1d 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -16,14 +16,13 @@
package com.android.contacts;
+import com.android.contacts.list.ContactListFilterController;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.test.InjectedServices;
import com.android.contacts.util.Constants;
import com.google.common.annotations.VisibleForTesting;
import android.app.Application;
-import android.app.FragmentManager;
-import android.app.LoaderManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
@@ -35,6 +34,7 @@
private static InjectedServices sInjectedServices;
private AccountTypeManager mAccountTypeManager;
private ContactPhotoManager mContactPhotoManager;
+ private ContactListFilterController mContactListFilterController;
/**
* Overrides the system services with mocks for testing.
@@ -95,6 +95,14 @@
return mContactPhotoManager;
}
+ if (ContactListFilterController.CONTACT_LIST_FILTER_SERVICE.equals(name)) {
+ if (mContactListFilterController == null) {
+ mContactListFilterController =
+ ContactListFilterController.createContactListFilterController(this);
+ }
+ return mContactListFilterController;
+ }
+
return super.getSystemService(name);
}
diff --git a/src/com/android/contacts/ContactsLiveFolders.java b/src/com/android/contacts/ContactsLiveFolders.java
deleted file mode 100644
index 9cb7e72..0000000
--- a/src/com/android/contacts/ContactsLiveFolders.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-import android.provider.LiveFolders;
-
-public class ContactsLiveFolders {
- public static class StarredContacts extends Activity {
- public static final Uri CONTENT_URI =
- Uri.parse("content://contacts/live_folders/favorites");
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- final Intent intent = getIntent();
- final String action = intent.getAction();
-
- if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
- setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
- getString(R.string.liveFolder_favorites_label),
- R.mipmap.ic_launcher_folder_live_contacts_starred));
- } else {
- setResult(RESULT_CANCELED);
- }
-
- finish();
- }
- }
-
- public static class PhoneContacts extends Activity {
- public static final Uri CONTENT_URI =
- Uri.parse("content://contacts/live_folders/people_with_phones");
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- final Intent intent = getIntent();
- final String action = intent.getAction();
-
- if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
- setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
- getString(R.string.liveFolder_phones_label),
- R.mipmap.ic_launcher_folder_live_contacts_phone));
- } else {
- setResult(RESULT_CANCELED);
- }
-
- finish();
- }
- }
-
- public static class AllContacts extends Activity {
- public static final Uri CONTENT_URI =
- Uri.parse("content://contacts/live_folders/people");
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- final Intent intent = getIntent();
- final String action = intent.getAction();
-
- if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
- setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
- getString(R.string.liveFolder_all_label),
- R.mipmap.ic_launcher_folder_live_contacts));
- } else {
- setResult(RESULT_CANCELED);
- }
-
- finish();
- }
- }
-
- private static Intent createLiveFolder(Context context, Uri uri, String name,
- int icon) {
-
- final Intent intent = new Intent();
-
- intent.setData(uri);
- intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT,
- new Intent(Intent.ACTION_VIEW, Contacts.CONTENT_URI));
- intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, name);
- intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
- Intent.ShortcutIconResource.fromContext(context, icon));
- intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST);
-
- return intent;
- }
-}
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 6d55184..77caaf7 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -75,6 +75,7 @@
private final MyTabListener mTabListener = new MyTabListener();
private boolean mShowHomeIcon;
+ private boolean mShowTabsAsText;
public enum TabState {
GROUPS,
@@ -98,7 +99,8 @@
private static final TabState DEFAULT_TAB = TabState.ALL;
private TabState mCurrentTab = DEFAULT_TAB;
- public ActionBarAdapter(Context context, Listener listener, ActionBar actionBar) {
+ public ActionBarAdapter(Context context, Listener listener, ActionBar actionBar,
+ boolean isUsingTwoPanes) {
mContext = context;
mListener = listener;
mActionBar = actionBar;
@@ -106,6 +108,9 @@
mShowHomeIcon = mContext.getResources().getBoolean(R.bool.show_home_icon);
+ // On wide screens, show the tabs as text (instead of icons)
+ mShowTabsAsText = isUsingTwoPanes;
+
// Set up search view.
View customSearchView = LayoutInflater.from(mActionBar.getThemedContext()).inflate(
R.layout.custom_action_bar, null);
@@ -153,12 +158,16 @@
mListener = listener;
}
- private void addTab(TabState tabState, int icon, int contentDescription) {
+ private void addTab(TabState tabState, int icon, int description) {
final Tab tab = mActionBar.newTab();
tab.setTag(tabState);
- tab.setIcon(icon);
- tab.setContentDescription(contentDescription);
tab.setTabListener(mTabListener);
+ if (mShowTabsAsText) {
+ tab.setText(description);
+ } else {
+ tab.setIcon(icon);
+ tab.setContentDescription(description);
+ }
mActionBar.addTab(tab);
}
@@ -211,14 +220,16 @@
return mCurrentTab;
}
+ /**
+ * @return Whether in search mode, i.e. if the search view is visible/expanded.
+ *
+ * Note even if the action bar is in search mode, if the query is empty, the search fragment
+ * will not be in search mode.
+ */
public boolean isSearchMode() {
return mSearchMode;
}
- public boolean shouldShowSearchResult() {
- return mSearchMode && !TextUtils.isEmpty(mQueryString);
- }
-
public void setSearchMode(boolean flag) {
if (mSearchMode != flag) {
mSearchMode = flag;
@@ -235,7 +246,7 @@
}
public String getQueryString() {
- return mQueryString;
+ return mSearchMode ? mQueryString : null;
}
public void setQueryString(String query) {
diff --git a/src/com/android/contacts/activities/CallLogActivity.java b/src/com/android/contacts/activities/CallLogActivity.java
deleted file mode 100644
index dd81dab..0000000
--- a/src/com/android/contacts/activities/CallLogActivity.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.activities;
-
-import com.android.contacts.R;
-import com.android.contacts.calllog.CallLogFragment;
-import com.android.internal.telephony.ITelephony;
-import com.google.common.annotations.VisibleForTesting;
-
-import android.app.Activity;
-import android.content.ActivityNotFoundException;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.view.KeyEvent;
-import android.view.ViewConfiguration;
-
-/**
- * Displays a list of call log entries.
- */
-public class CallLogActivity extends Activity {
- private static final String TAG = "CallLogActivity";
-
- private CallLogFragment mFragment;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
-
- setContentView(R.layout.call_log_activity);
-
- // Typing here goes to the dialer
- setDefaultKeyMode(DEFAULT_KEYS_DIALER);
-
- mFragment = (CallLogFragment) getFragmentManager().findFragmentById(
- R.id.call_log_fragment);
- }
-
- @VisibleForTesting
- /*package*/ CallLogFragment getFragment() {
- return mFragment;
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_CALL: {
- long callPressDiff = SystemClock.uptimeMillis() - event.getDownTime();
- if (callPressDiff >= ViewConfiguration.getLongPressTimeout()) {
- // Launch voice dialer
- Intent intent = new Intent(Intent.ACTION_VOICE_COMMAND);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- try {
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- }
- return true;
- }
- }
- }
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_CALL:
- try {
- ITelephony phone = ITelephony.Stub.asInterface(
- ServiceManager.checkService("phone"));
- if (phone != null && !phone.isIdle()) {
- // Let the super class handle it
- break;
- }
- } catch (RemoteException re) {
- // Fall through and try to call the contact
- }
-
- mFragment.callSelectedEntry();
- return true;
- }
- return super.onKeyUp(keyCode, event);
- }
-}
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 0ab5881..e68c7bc 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -32,19 +32,29 @@
import com.android.contacts.list.PostalAddressPickerFragment;
import com.android.contacts.widget.ContextMenuAdapter;
+import android.app.ActionBar;
+import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.app.Fragment;
+import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents.Insert;
import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.View.OnFocusChangeListener;
+import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.SearchView;
+import android.widget.SearchView.OnCloseListener;
import android.widget.SearchView.OnQueryTextListener;
import java.util.Set;
@@ -54,7 +64,8 @@
* purposes of selecting one.
*/
public class ContactSelectionActivity extends ContactsActivity
- implements View.OnCreateContextMenuListener, OnQueryTextListener, OnClickListener {
+ implements View.OnCreateContextMenuListener, OnQueryTextListener, OnClickListener,
+ OnCloseListener, OnFocusChangeListener {
private static final String TAG = "ContactSelectionActivity";
private static final int SUBACTIVITY_ADD_TO_EXISTING_CONTACT = 0;
@@ -72,6 +83,10 @@
private ContactsRequest mRequest;
private SearchView mSearchView;
+ /**
+ * Can be null. If null, the "Create New Contact" button should be on the menu.
+ */
+ private Button mCreateNewContactButton;
public ContactSelectionActivity() {
mIntentResolver = new ContactsIntentResolver(this);
@@ -113,31 +128,127 @@
setContentView(R.layout.contact_picker);
- configureListFragment();
+ if (mActionCode != mRequest.getActionCode()) {
+ mActionCode = mRequest.getActionCode();
+ configureListFragment();
+ }
- mSearchView = (SearchView)findViewById(R.id.search_view);
- mSearchView.setQueryHint(getString(R.string.hint_findContacts));
- mSearchView.setOnQueryTextListener(this);
+ prepareSearchViewAndActionBar();
- // TODO: re-enable search for postal addresses
+ mCreateNewContactButton = (Button) findViewById(R.id.new_contact);
+ if (mCreateNewContactButton != null) {
+ if (shouldShowCreateNewContactButton()) {
+ mCreateNewContactButton.setVisibility(View.VISIBLE);
+ mCreateNewContactButton.setOnClickListener(this);
+ } else {
+ mCreateNewContactButton.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ private boolean shouldShowCreateNewContactButton() {
+ return (mActionCode == ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT
+ || (mActionCode == ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT
+ && !mRequest.isSearchMode()));
+ }
+
+ private void prepareSearchViewAndActionBar() {
+ // Postal address picker doesn't support search, so just show "HomeAsUp" button and title.
if (mRequest.getActionCode() == ContactsRequest.ACTION_PICK_POSTAL) {
- mSearchView.setVisibility(View.GONE);
+ findViewById(R.id.search_view).setVisibility(View.GONE);
+ final ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayShowHomeEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setDisplayShowTitleEnabled(true);
+ }
+ return;
+ }
+
+ // If ActionBar is available, show SearchView on it. If not, show SearchView inside the
+ // Activity's layout.
+ final ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ final View searchViewOnLayout = findViewById(R.id.search_view);
+ if (searchViewOnLayout != null) {
+ searchViewOnLayout.setVisibility(View.GONE);
+ }
+
+ final View searchViewContainer = LayoutInflater.from(actionBar.getThemedContext())
+ .inflate(R.layout.custom_action_bar, null);
+ mSearchView = (SearchView) searchViewContainer.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(searchViewContainer,
+ 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);
+
// This is a hack to prevent the search view from grabbing focus
// at this point. If search view were visible, it would always grabs focus
// because it is the first focusable widget in the window.
mSearchView.setVisibility(View.INVISIBLE);
mSearchView.postDelayed(new Runnable() {
-
@Override
public void run() {
mSearchView.setVisibility(View.VISIBLE);
}
}, FOCUS_DELAY);
}
+ }
- Button cancel = (Button) findViewById(R.id.cancel);
- cancel.setOnClickListener(this);
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // If we want "Create New Contact" button but there's no such a button in the layout,
+ // try showing a menu for it.
+ if (shouldShowCreateNewContactButton() && mCreateNewContactButton == null) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.contact_picker_options, menu);
+ }
+ return true;
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ if (mSearchView != null && mSearchView.getVisibility() == View.VISIBLE) {
+ if (mSearchView.hasFocus()) {
+ showInputMethod(mSearchView.findFocus());
+ } else {
+ mSearchView.requestFocus();
+ }
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // Go back to previous screen, intending "cancel"
+ setResult(RESULT_CANCELED);
+ finish();
+ return true;
+ case R.id.create_new_contact: {
+ startCreateNewContactActivity();
+ return true;
+ }
+ }
+ return super.onOptionsItemSelected(item);
}
@Override
@@ -205,15 +316,9 @@
* Creates the fragment based on the current request.
*/
public void configureListFragment() {
- if (mActionCode == mRequest.getActionCode()) {
- return;
- }
-
- mActionCode = mRequest.getActionCode();
switch (mActionCode) {
case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
- fragment.setCreateContactEnabled(true);
fragment.setEditMode(true);
fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
mListFragment = fragment;
@@ -222,7 +327,6 @@
case ContactsRequest.ACTION_PICK_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
- fragment.setSearchMode(mRequest.isSearchMode());
fragment.setIncludeProfile(mRequest.shouldIncludeProfile());
mListFragment = fragment;
break;
@@ -230,15 +334,12 @@
case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
- fragment.setCreateContactEnabled(!mRequest.isSearchMode());
mListFragment = fragment;
break;
}
case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
- fragment.setSearchMode(mRequest.isSearchMode());
- fragment.setQueryString(mRequest.getQueryString(), false);
fragment.setShortcutRequested(true);
mListFragment = fragment;
break;
@@ -258,7 +359,6 @@
case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
PhoneNumberPickerFragment fragment = new PhoneNumberPickerFragment();
fragment.setShortcutAction(Intent.ACTION_CALL);
- fragment.setSearchMode(mRequest.isSearchMode());
mListFragment = fragment;
break;
@@ -283,9 +383,6 @@
}
mListFragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
- mListFragment.setContactsRequest(mRequest);
- mListFragment.setSearchMode(mRequest.isSearchMode());
- mListFragment.setQueryString(mRequest.getQueryString(), false);
mListFragment.setDirectoryResultLimit(DEFAULT_DIRECTORY_RESULT_LIMIT);
getFragmentManager().beginTransaction()
@@ -314,8 +411,7 @@
private final class ContactPickerActionListener implements OnContactPickerActionListener {
@Override
public void onCreateNewContactAction() {
- Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
- startActivityAndForwardResult(intent);
+ startCreateNewContactActivity();
}
@Override
@@ -434,7 +530,6 @@
@Override
public boolean onQueryTextChange(String newText) {
mListFragment.setQueryString(newText, true);
- mListFragment.setSearchMode(!TextUtils.isEmpty(newText));
return false;
}
@@ -443,6 +538,25 @@
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());
+ }
+ }
+ }
+ }
+
public void returnPickerResult(Uri data) {
Intent intent = new Intent();
intent.setData(data);
@@ -456,10 +570,27 @@
}
@Override
- public void onClick(View v) {
- if (v.getId() == R.id.cancel) {
- setResult(RESULT_CANCELED);
- finish();
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.new_contact: {
+ startCreateNewContactActivity();
+ break;
+ }
+ }
+ }
+
+ private void startCreateNewContactActivity() {
+ Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+ startActivityAndForwardResult(intent);
+ }
+
+ private void showInputMethod(View view) {
+ final InputMethodManager imm = (InputMethodManager)
+ getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm != null) {
+ if (!imm.showSoftInput(view, 0)) {
+ Log.w(TAG, "Failed to show soft input method.");
+ }
}
}
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index 0ce7309..917d8e0 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -20,14 +20,13 @@
import com.android.contacts.calllog.CallLogFragment;
import com.android.contacts.dialpad.DialpadFragment;
import com.android.contacts.interactions.PhoneNumberInteraction;
-import com.android.contacts.list.AccountFilterActivity;
-import com.android.contacts.list.ContactListFilter;
import com.android.contacts.list.ContactListFilterController;
import com.android.contacts.list.ContactListFilterController.ContactListFilterListener;
import com.android.contacts.list.ContactListItemView;
import com.android.contacts.list.OnPhoneNumberPickerActionListener;
import com.android.contacts.list.PhoneFavoriteFragment;
import com.android.contacts.list.PhoneNumberPickerFragment;
+import com.android.contacts.util.AccountFilterUtil;
import com.android.internal.telephony.ITelephony;
import android.app.ActionBar;
@@ -109,6 +108,8 @@
"DialtactsActivity_last_manually_selected_tab";
private static final int PREF_LAST_MANUALLY_SELECTED_TAB_DEFAULT = TAB_INDEX_DIALER;
+ 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.
@@ -214,6 +215,30 @@
private CallLogFragment mCallLogFragment;
private PhoneFavoriteFragment mPhoneFavoriteFragment;
+ private final ContactListFilterListener mContactListFilterListener =
+ new ContactListFilterListener() {
+ @Override
+ public void onContactListFilterChanged() {
+ boolean doInvalidateOptionsMenu = false;
+
+ if (mPhoneFavoriteFragment != null && mPhoneFavoriteFragment.isAdded()) {
+ mPhoneFavoriteFragment.setFilter(mContactListFilterController.getFilter());
+ doInvalidateOptionsMenu = true;
+ }
+
+ if (mSearchFragment != null && mSearchFragment.isAdded()) {
+ mSearchFragment.setFilter(mContactListFilterController.getFilter());
+ doInvalidateOptionsMenu = true;
+ } else {
+ Log.w(TAG, "Search Fragment isn't available when ContactListFilter is changed");
+ }
+
+ if (doInvalidateOptionsMenu) {
+ invalidateOptionsMenu();
+ }
+ }
+ };
+
private final TabListener mTabListener = new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
@@ -277,10 +302,8 @@
new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
- final Intent intent =
- new Intent(DialtactsActivity.this, AccountFilterActivity.class);
- ContactListFilter filter = mContactListFilterController.getFilter();
- startActivityForResult(intent, AccountFilterActivity.DEFAULT_REQUEST_CODE);
+ AccountFilterUtil.startAccountFilterActivityForResult(
+ DialtactsActivity.this, SUBACTIVITY_ACCOUNT_FILTER);
return true;
}
};
@@ -339,7 +362,6 @@
public boolean onQueryTextChange(String newText) {
// Show search result with non-empty text. Show a bare list otherwise.
mSearchFragment.setQueryString(newText, true);
- mSearchFragment.setSearchMode(!TextUtils.isEmpty(newText));
return true;
}
};
@@ -371,29 +393,8 @@
setContentView(R.layout.dialtacts_activity);
- mContactListFilterController = new ContactListFilterController(this);
- mContactListFilterController.addListener(new ContactListFilterListener() {
- @Override
- public void onContactListFilterChanged() {
- boolean doInvalidateOptionsMenu = false;
-
- if (mPhoneFavoriteFragment != null && mPhoneFavoriteFragment.isAdded()) {
- mPhoneFavoriteFragment.setFilter(mContactListFilterController.getFilter());
- doInvalidateOptionsMenu = true;
- }
-
- if (mSearchFragment != null && mSearchFragment.isAdded()) {
- mSearchFragment.setFilter(mContactListFilterController.getFilter());
- doInvalidateOptionsMenu = true;
- } else {
- Log.w(TAG, "Search Fragment isn't available when ContactListFilter is changed");
- }
-
- if (doInvalidateOptionsMenu) {
- invalidateOptionsMenu();
- }
- }
- });
+ mContactListFilterController = ContactListFilterController.getInstance(this);
+ mContactListFilterController.addListener(mContactListFilterListener);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(new ViewPagerAdapter(getFragmentManager()));
@@ -429,12 +430,6 @@
@Override
public void onStart() {
super.onStart();
- // Force filter reload to reflect possible filter changes done via People UI.
- //
- // Ideally both (People/Phone) UI should share the same instance for
- // ContactListFilterController and they should be able to receive filter change event
- // from the same controller (Bug 5165507)
- mContactListFilterController.onStart(true);
if (mPhoneFavoriteFragment != null) {
mPhoneFavoriteFragment.setFilter(mContactListFilterController.getFilter());
}
@@ -443,6 +438,12 @@
}
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mContactListFilterController.removeListener(mContactListFilterListener);
+ }
+
private void prepareSearchView() {
final View searchViewLayout =
getLayoutInflater().inflate(R.layout.dialtacts_custom_action_bar, null);
@@ -923,17 +924,9 @@
return;
}
switch (requestCode) {
- case AccountFilterActivity.DEFAULT_REQUEST_CODE: {
- ContactListFilter filter = (ContactListFilter) data.getParcelableExtra(
- AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER);
- if (filter == null) {
- return;
- }
- if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
- mContactListFilterController.selectCustomFilter();
- } else {
- mContactListFilterController.setContactListFilter(filter, true);
- }
+ case SUBACTIVITY_ACCOUNT_FILTER: {
+ AccountFilterUtil.handleAccountFilterResult(
+ mContactListFilterController, resultCode, data);
}
break;
}
diff --git a/src/com/android/contacts/activities/JoinContactActivity.java b/src/com/android/contacts/activities/JoinContactActivity.java
index b948b71..75a13d0 100644
--- a/src/com/android/contacts/activities/JoinContactActivity.java
+++ b/src/com/android/contacts/activities/JoinContactActivity.java
@@ -23,19 +23,19 @@
import com.android.contacts.list.JoinContactListFragment;
import com.android.contacts.list.OnContactPickerActionListener;
+import android.app.ActionBar;
import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
+import android.view.MenuItem;
/**
* An activity that shows a list of contacts that can be joined with the target contact.
*/
-public class JoinContactActivity extends ContactsActivity implements OnClickListener {
+public class JoinContactActivity extends ContactsActivity {
private static final String TAG = "JoinContactActivity";
@@ -85,8 +85,6 @@
setContentView(R.layout.join_contact_picker);
setTitle(R.string.titleJoinContactDataWith);
- findViewById(R.id.cancel).setOnClickListener(this);
-
if (mListFragment == null) {
mListFragment = new JoinContactListFragment();
@@ -94,9 +92,16 @@
.replace(R.id.list_container, mListFragment)
.commitAllowingStateLoss();
}
+
+ final ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayShowHomeEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setDisplayShowTitleEnabled(true);
+ }
}
- public void setupActionListener() {
+ private void setupActionListener() {
mListFragment.setTargetContactId(mTargetContactId);
mListFragment.setOnContactPickerActionListener(new OnContactPickerActionListener() {
@Override
@@ -121,6 +126,18 @@
}
@Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // Go back to previous screen, intending "cancel"
+ setResult(RESULT_CANCELED);
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong(KEY_TARGET_CONTACT_ID, mTargetContactId);
@@ -139,11 +156,4 @@
mListFragment.onPickerResult(data);
}
}
-
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.cancel) {
- finish();
- }
- }
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 24992cc..772fa54 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -33,7 +33,6 @@
import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.interactions.ImportExportDialogFragment;
import com.android.contacts.interactions.PhoneNumberInteraction;
-import com.android.contacts.list.AccountFilterActivity;
import com.android.contacts.list.ContactBrowseListFragment;
import com.android.contacts.list.ContactEntryListFragment;
import com.android.contacts.list.ContactListFilter;
@@ -53,6 +52,7 @@
import com.android.contacts.model.AccountWithDataSet;
import com.android.contacts.preference.ContactsPreferenceActivity;
import com.android.contacts.preference.DisplayOptionsPreferenceFragment;
+import com.android.contacts.util.AccountFilterUtil;
import com.android.contacts.util.AccountPromptUtils;
import com.android.contacts.util.AccountSelectionUtil;
import com.android.contacts.util.AccountsListAdapter;
@@ -61,7 +61,6 @@
import com.android.contacts.util.DialogManager;
import com.android.contacts.util.PhoneCapabilityTester;
-import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -110,8 +109,9 @@
private static final int SUBACTIVITY_NEW_GROUP = 2;
private static final int SUBACTIVITY_EDIT_GROUP = 3;
+ private static final int SUBACTIVITY_ACCOUNT_FILTER = 4;
- private DialogManager mDialogManager = new DialogManager(this);
+ private final DialogManager mDialogManager = new DialogManager(this);
private ContactsIntentResolver mIntentResolver;
private ContactsRequest mRequest;
@@ -184,8 +184,6 @@
public PeopleActivity() {
mInstanceId = sNextInstanceId.getAndIncrement();
mIntentResolver = new ContactsIntentResolver(this);
- mContactListFilterController = new ContactListFilterController(this);
- mContactListFilterController.addListener(this);
mProviderStatusLoader = new ProviderStatusLoader(this);
}
@@ -246,6 +244,9 @@
return;
}
+ mContactListFilterController = ContactListFilterController.getInstance(this);
+ mContactListFilterController.addListener(this);
+
mIsRecreatedInstance = (savedState != null);
createViewsAndFragments(savedState);
if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
@@ -316,7 +317,8 @@
final FragmentTransaction transaction = fragmentManager.beginTransaction();
// Prepare the fragments which are used both on 1-pane and on 2-pane.
- if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
+ boolean isUsingTwoPanes = PhoneCapabilityTester.isUsingTwoPanes(this);
+ if (isUsingTwoPanes) {
mFavoritesFragment = getFragment(R.id.favorites_fragment);
mAllFragment = getFragment(R.id.all_fragment);
mGroupsFragment = getFragment(R.id.groups_fragment);
@@ -366,7 +368,7 @@
transaction.hide(mAllFragment);
transaction.hide(mGroupsFragment);
- if (PhoneCapabilityTester.isUsingTwoPanes(this)) {
+ if (isUsingTwoPanes) {
// Prepare 2-pane only fragments/views...
// Container views for fragments
@@ -409,7 +411,7 @@
}
// Configure action bar
- mActionBarAdapter = new ActionBarAdapter(this, this, getActionBar());
+ mActionBarAdapter = new ActionBarAdapter(this, this, getActionBar(), isUsingTwoPanes);
mActionBarAdapter.initialize(savedState, mRequest);
invalidateOptionsMenuIfNeeded();
@@ -436,7 +438,6 @@
*/
configureFragments(!mIsRecreatedInstance);
}
- mContactListFilterController.onStart(false);
super.onStart();
}
@@ -473,6 +474,7 @@
if (mActionBarAdapter != null) {
mActionBarAdapter.setListener(null);
}
+ mContactListFilterController.removeListener(this);
super.onDestroy();
}
@@ -506,7 +508,6 @@
break;
case ContactsRequest.ACTION_GROUP:
tabToOpen = TabState.GROUPS;
- // TODO Select the specified group? See the TODO in ContactsIntentResolver too.
break;
}
if (tabToOpen != null) {
@@ -566,12 +567,12 @@
invalidateOptionsMenu();
break;
case STOP_SEARCH_MODE:
- clearSearch();
+ setQueryTextToFragment("");
updateFragmentsVisibility();
invalidateOptionsMenu();
break;
case CHANGE_SEARCH_QUERY:
- loadSearch(mActionBarAdapter.getQueryString());
+ setQueryTextToFragment(mActionBarAdapter.getQueryString());
break;
default:
throw new IllegalStateException("Unkonwn ActionBarAdapter action: " + action);
@@ -842,43 +843,32 @@
}
}
- private void clearSearch() {
- loadSearch("");
- }
-
- private void loadSearch(String query) {
- configureFragments(false /* from request */);
+ private void setQueryTextToFragment(String query) {
mAllFragment.setQueryString(query, true);
+ mAllFragment.setVisibleScrollbarEnabled(!mAllFragment.isSearchMode());
}
private void configureContactListFragmentForRequest() {
- mAllFragment.setContactsRequest(mRequest);
-
Uri contactUri = mRequest.getContactUri();
if (contactUri != null) {
mAllFragment.setSelectedContactUri(contactUri);
}
- mAllFragment.setSearchMode(mActionBarAdapter.isSearchMode());
- mAllFragment.setQueryString(mActionBarAdapter.getQueryString(), false);
+ mAllFragment.setFilter(mContactListFilterController.getFilter());
+ setQueryTextToFragment(mActionBarAdapter.getQueryString());
if (mRequest.isDirectorySearchEnabled()) {
mAllFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
} else {
mAllFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
}
-
- if (mContactListFilterController.isInitialized()) {
- mAllFragment.setFilter(mContactListFilterController.getFilter());
- }
}
private void configureContactListFragment() {
- final boolean showSearchResult = mActionBarAdapter.shouldShowSearchResult();
- mAllFragment.setSearchMode(showSearchResult);
+ // Filter may be changed when this Activity is in background.
+ mAllFragment.setFilter(mContactListFilterController.getFilter());
final boolean useTwoPane = PhoneCapabilityTester.isUsingTwoPanes(this);
- mAllFragment.setVisibleScrollbarEnabled(!showSearchResult);
mAllFragment.setVerticalScrollbarPosition(
useTwoPane
? View.SCROLLBAR_POSITION_LEFT
@@ -1365,8 +1355,8 @@
return true;
}
case R.id.menu_contacts_filter: {
- final Intent intent = new Intent(this, AccountFilterActivity.class);
- startActivityForResult(intent, AccountFilterActivity.DEFAULT_REQUEST_CODE);
+ AccountFilterUtil.startAccountFilterActivityForResult(this,
+ SUBACTIVITY_ACCOUNT_FILTER);
return true;
}
case R.id.menu_search: {
@@ -1444,19 +1434,9 @@
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
- case AccountFilterActivity.DEFAULT_REQUEST_CODE: {
- if (resultCode == Activity.RESULT_OK) {
- ContactListFilter filter = (ContactListFilter) data.getParcelableExtra(
- AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER);
- if (filter == null) {
- return;
- }
- if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
- mContactListFilterController.selectCustomFilter();
- } else {
- mContactListFilterController.setContactListFilter(filter, true);
- }
- }
+ case SUBACTIVITY_ACCOUNT_FILTER: {
+ AccountFilterUtil.handleAccountFilterResult(
+ mContactListFilterController, resultCode, data);
break;
}
diff --git a/src/com/android/contacts/calllog/CallLogAdapter.java b/src/com/android/contacts/calllog/CallLogAdapter.java
index 7e6770b..b38430b 100644
--- a/src/com/android/contacts/calllog/CallLogAdapter.java
+++ b/src/com/android/contacts/calllog/CallLogAdapter.java
@@ -47,7 +47,7 @@
/**
* Adapter class to fill in data for the Call Log.
*/
-public class CallLogAdapter extends GroupingListAdapter
+/*package*/ class CallLogAdapter extends GroupingListAdapter
implements Runnable, ViewTreeObserver.OnPreDrawListener, CallLogGroupBuilder.GroupCreator {
/** Interface used to initiate a refresh of the content. */
public interface CallFetcher {
@@ -193,8 +193,8 @@
}
};
- public CallLogAdapter(Context context, CallFetcher callFetcher,
- ContactInfoHelper contactInfoHelper, String voicemailNumber) {
+ CallLogAdapter(Context context, CallFetcher callFetcher,
+ ContactInfoHelper contactInfoHelper) {
super(context);
mContext = context;
@@ -209,7 +209,7 @@
CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
mContactPhotoManager = ContactPhotoManager.getInstance(mContext);
- mPhoneNumberHelper = new PhoneNumberHelper(resources, voicemailNumber);
+ mPhoneNumberHelper = new PhoneNumberHelper(resources);
PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
resources, callTypeHelper, mPhoneNumberHelper);
mCallLogViewsHelper =
@@ -240,11 +240,7 @@
}
}
- public ContactInfo getContactInfo(String number) {
- return mContactInfoCache.getPossiblyExpired(number);
- }
-
- public void startRequestProcessing() {
+ private void startRequestProcessing() {
if (mRequestProcessingDisabled) {
return;
}
@@ -368,9 +364,8 @@
mCallLogGroupBuilder.addGroups(cursor);
}
- @VisibleForTesting
@Override
- public View newStandAloneView(Context context, ViewGroup parent) {
+ protected View newStandAloneView(Context context, ViewGroup parent) {
LayoutInflater inflater =
(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.call_log_list_item, parent, false);
@@ -378,15 +373,13 @@
return view;
}
- @VisibleForTesting
@Override
- public void bindStandAloneView(View view, Context context, Cursor cursor) {
+ protected void bindStandAloneView(View view, Context context, Cursor cursor) {
bindView(view, cursor, 1);
}
- @VisibleForTesting
@Override
- public View newChildView(Context context, ViewGroup parent) {
+ protected View newChildView(Context context, ViewGroup parent) {
LayoutInflater inflater =
(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.call_log_list_item, parent, false);
@@ -394,15 +387,13 @@
return view;
}
- @VisibleForTesting
@Override
- public void bindChildView(View view, Context context, Cursor cursor) {
+ protected void bindChildView(View view, Context context, Cursor cursor) {
bindView(view, cursor, 1);
}
- @VisibleForTesting
@Override
- public View newGroupView(Context context, ViewGroup parent) {
+ protected View newGroupView(Context context, ViewGroup parent) {
LayoutInflater inflater =
(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.call_log_list_item, parent, false);
@@ -410,9 +401,8 @@
return view;
}
- @VisibleForTesting
@Override
- public void bindGroupView(View view, Context context, Cursor cursor, int groupSize,
+ protected void bindGroupView(View view, Context context, Cursor cursor, int groupSize,
boolean expanded) {
bindView(view, cursor, groupSize);
}
@@ -678,11 +668,13 @@
* This method should be called in tests to disable such processing of requests when not
* needed.
*/
- public void disableRequestProcessingForTest() {
+ @VisibleForTesting
+ void disableRequestProcessingForTest() {
mRequestProcessingDisabled = true;
}
- public void injectContactInfoForTest(String number, ContactInfo contactInfo) {
+ @VisibleForTesting
+ void injectContactInfoForTest(String number, ContactInfo contactInfo) {
mContactInfoCache.put(number, contactInfo);
}
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index 79f3499..96136a2 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -20,12 +20,12 @@
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
import com.android.contacts.activities.DialtactsActivity.ViewPagerVisibilityListener;
-import com.android.contacts.test.NeededForTesting;
import com.android.contacts.voicemail.VoicemailStatusHelper;
import com.android.contacts.voicemail.VoicemailStatusHelper.StatusMessage;
import com.android.contacts.voicemail.VoicemailStatusHelperImpl;
import com.android.internal.telephony.CallerInfo;
import com.android.internal.telephony.ITelephony;
+import com.google.common.annotations.VisibleForTesting;
import android.app.Activity;
import android.app.KeyguardManager;
@@ -39,7 +39,6 @@
import android.os.ServiceManager;
import android.provider.CallLog.Calls;
import android.telephony.PhoneNumberUtils;
-import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -62,7 +61,6 @@
private CallLogAdapter mAdapter;
private CallLogQueryHandler mCallLogQueryHandler;
- private String mVoiceMailNumber;
private boolean mScrollToTop;
private boolean mShowOptionsMenu;
@@ -81,8 +79,6 @@
public void onCreate(Bundle state) {
super.onCreate(state);
- mVoiceMailNumber = ((TelephonyManager) getActivity().getSystemService(
- Context.TELEPHONY_SERVICE)).getVoiceMailNumber();
mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(), this);
mKeyguardManager =
(KeyguardManager) getActivity().getSystemService(Context.KEYGUARD_SERVICE);
@@ -151,7 +147,7 @@
super.onViewCreated(view, savedInstanceState);
String currentCountryIso = ContactsUtils.getCurrentCountryIso(getActivity());
mAdapter = new CallLogAdapter(getActivity(), this,
- new ContactInfoHelper(getActivity(), currentCountryIso), mVoiceMailNumber);
+ new ContactInfoHelper(getActivity(), currentCountryIso));
setListAdapter(mAdapter);
getListView().setItemsCanFocus(true);
}
@@ -279,6 +275,7 @@
return false;
}
}
+
public void callSelectedEntry() {
int position = getListView().getSelectedItemPosition();
if (position < 0) {
@@ -321,16 +318,11 @@
}
}
- @NeededForTesting
- public CallLogAdapter getAdapter() {
+ @VisibleForTesting
+ CallLogAdapter getAdapter() {
return mAdapter;
}
- @NeededForTesting
- public String getVoiceMailNumber() {
- return mVoiceMailNumber;
- }
-
@Override
public void onVisibilityChanged(boolean visible) {
if (mShowOptionsMenu != visible) {
diff --git a/src/com/android/contacts/calllog/ContactInfoHelper.java b/src/com/android/contacts/calllog/ContactInfoHelper.java
index c837c9a..2d509a3 100644
--- a/src/com/android/contacts/calllog/ContactInfoHelper.java
+++ b/src/com/android/contacts/calllog/ContactInfoHelper.java
@@ -67,7 +67,14 @@
}
info = sipInfo;
} else {
- info = queryContactInfoForPhoneNumber(number, countryIso);
+ // Look for a contact that has the given phone number.
+ ContactInfo phoneInfo = queryContactInfoForPhoneNumber(number, countryIso);
+
+ if (phoneInfo == null || phoneInfo == ContactInfo.EMPTY) {
+ // Check whether the phone number has been saved as an "Internet call" number.
+ phoneInfo = queryContactInfoForSipAddress(number);
+ }
+ info = phoneInfo;
}
final ContactInfo updatedInfo;
@@ -185,13 +192,25 @@
private ContactInfo queryContactInfoForPhoneNumber(String number, String countryIso) {
final ContactInfo info;
- // "number" is a regular phone number, so use the
+ String contactNumber = number;
+ if (!TextUtils.isEmpty(countryIso)) {
+ // Normalize the number: this is needed because the PhoneLookup query below does not
+ // accept a country code as an input.
+ String numberE164 = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+ if (!TextUtils.isEmpty(numberE164)) {
+ // Only use it if the number could be formatted to E164.
+ contactNumber = numberE164;
+ }
+ }
+
+ // "contactNumber" is a regular phone number, so use the
// PhoneLookup table:
Cursor phonesCursor =
mContext.getContentResolver().query(
Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
- Uri.encode(number)),
+ Uri.encode(contactNumber)),
PhoneQuery._PROJECTION, null, null, null);
+
if (phonesCursor != null) {
if (phonesCursor.moveToFirst()) {
info = new ContactInfo();
diff --git a/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java b/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java
index c4fb36c..c5e8f91 100644
--- a/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java
+++ b/src/com/android/contacts/calllog/DefaultVoicemailNotifier.java
@@ -33,7 +33,6 @@
import android.net.Uri;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.PhoneLookup;
-import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
@@ -319,8 +318,6 @@
* called from the main thread.
*/
public static PhoneNumberHelper createPhoneNumberHelper(Context context) {
- TelephonyManager telephonyManager =
- (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
- return new PhoneNumberHelper(context.getResources(), telephonyManager.getVoiceMailNumber());
+ return new PhoneNumberHelper(context.getResources());
}
}
diff --git a/src/com/android/contacts/calllog/PhoneNumberHelper.java b/src/com/android/contacts/calllog/PhoneNumberHelper.java
index 4d96f4f..20031b2 100644
--- a/src/com/android/contacts/calllog/PhoneNumberHelper.java
+++ b/src/com/android/contacts/calllog/PhoneNumberHelper.java
@@ -29,11 +29,9 @@
*/
public class PhoneNumberHelper {
private final Resources mResources;
- private final String mVoicemailNumber;
- public PhoneNumberHelper(Resources resources, String voicemailNumber) {
+ public PhoneNumberHelper(Resources resources) {
mResources = resources;
- mVoicemailNumber = voicemailNumber;
}
/** Returns true if it is possible to place a call to the given number. */
@@ -68,7 +66,7 @@
if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
return mResources.getString(R.string.payphone);
}
- if (PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber)) {
+ if (isVoicemailNumber(number)) {
return mResources.getString(R.string.voicemail);
}
if (TextUtils.isEmpty(formattedNumber)) {
@@ -91,7 +89,7 @@
/** Returns true if the given number is the number of the configured voicemail. */
public boolean isVoicemailNumber(CharSequence number) {
- return PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber);
+ return PhoneNumberUtils.isVoiceMailNumber(number.toString());
}
/** Returns true if the given number is a SIP address. */
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 84dbb83..5d7ab93 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -299,7 +299,9 @@
mQuickFixButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- mQuickFix.execute();
+ if (mQuickFix != null) {
+ mQuickFix.execute();
+ }
}
});
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index 4b31a6e..2bcd1a0 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -324,7 +324,7 @@
// Update ViewPager to disable swipe so that it only shows the detail fragment
// and switch to the detail fragment
mViewPagerAdapter.enableSwipe(false);
- mViewPager.setCurrentItem(0);
+ mViewPager.setCurrentItem(0, false /* smooth transition */);
break;
case FRAGMENT_CAROUSEL: {
// Disable swipe so only the detail fragment shows
diff --git a/src/com/android/contacts/detail/StreamItemAdapter.java b/src/com/android/contacts/detail/StreamItemAdapter.java
index c923cf8..2d870b4 100644
--- a/src/com/android/contacts/detail/StreamItemAdapter.java
+++ b/src/com/android/contacts/detail/StreamItemAdapter.java
@@ -27,7 +27,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
-import android.widget.TextView;
import java.util.List;
@@ -37,10 +36,8 @@
public class StreamItemAdapter extends BaseAdapter {
/** The header view, hidden under the tab carousel, if present. */
private static final int ITEM_VIEW_TYPE_HEADER = 0;
- /** The title shown in the updates stream. */
- private static final int ITEM_VIEW_TYPE_TITLE = 1;
/** The updates in the list. */
- private static final int ITEM_VIEW_TYPE_STREAM_ITEM = 2;
+ private static final int ITEM_VIEW_TYPE_STREAM_ITEM = 1;
private final Context mContext;
private final View.OnClickListener mItemClickListener;
@@ -60,23 +57,23 @@
@Override
public int getCount() {
- // The header and title should only be included as items in the list if there are other
+ // The header should only be included as items in the list if there are other
// stream items.
int count = mStreamItems.size();
- return (count == 0) ? 0 : (count + 2);
+ return (count == 0) ? 0 : (count + 1);
}
@Override
public Object getItem(int position) {
- if (position == 0 || position == 1) {
+ if (position == 0) {
return null;
}
- return mStreamItems.get(position - 2);
+ return mStreamItems.get(position - 1);
}
@Override
public long getItemId(int position) {
- if (position == 0 || position == 1) {
+ if (position == 0) {
return -1;
}
return position - 1;
@@ -101,12 +98,6 @@
if (position == 0) {
return mInflater.inflate(R.layout.updates_header_contact, null);
}
- if (position == 1) {
- final View titleView = mInflater.inflate(R.layout.list_separator, null);
- TextView titleTextView = (TextView) titleView.findViewById(R.id.title);
- titleTextView.setText(mContext.getString(R.string.recent_updates));
- return titleView;
- }
final StreamItemEntry streamItem = (StreamItemEntry) getItem(position);
final AccountTypeManager manager = AccountTypeManager.getInstance(mContext);
final AccountType accountType =
@@ -143,9 +134,6 @@
if (position == 0) {
return ITEM_VIEW_TYPE_HEADER;
}
- if (position == 1) {
- return ITEM_VIEW_TYPE_TITLE;
- }
return ITEM_VIEW_TYPE_STREAM_ITEM;
}
diff --git a/src/com/android/contacts/editor/GroupMembershipView.java b/src/com/android/contacts/editor/GroupMembershipView.java
index 42d2edd..82acc33 100644
--- a/src/com/android/contacts/editor/GroupMembershipView.java
+++ b/src/com/android/contacts/editor/GroupMembershipView.java
@@ -255,6 +255,7 @@
ListView listView = mPopup.getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+ listView.setOverScrollMode(OVER_SCROLL_ALWAYS);
int count = mAdapter.getCount();
for (int i = 0; i < count; i++) {
listView.setItemChecked(i, mAdapter.getItem(i).isChecked());
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index d4f6e29..b3472ab 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -98,6 +98,7 @@
private TextView mGroupTitle;
private TextView mGroupSize;
private ListView mMemberListView;
+ private View mEmptyView;
private Listener mListener;
@@ -149,6 +150,7 @@
mGroupSize = (TextView) mRootView.findViewById(R.id.group_size);
mGroupSourceViewContainer = (ViewGroup) mRootView.findViewById(
R.id.group_source_view_container);
+ mEmptyView = mRootView.findViewById(android.R.id.empty);
mMemberListView = (ListView) mRootView.findViewById(android.R.id.list);
mMemberListView.setAdapter(mAdapter);
@@ -258,6 +260,7 @@
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
updateSize(data.getCount());
mAdapter.setContactCursor(data);
+ mMemberListView.setEmptyView(mEmptyView);
}
@Override
diff --git a/src/com/android/contacts/list/AccountFilterActivity.java b/src/com/android/contacts/list/AccountFilterActivity.java
index aa1fe27..0b4c6e0 100644
--- a/src/com/android/contacts/list/AccountFilterActivity.java
+++ b/src/com/android/contacts/list/AccountFilterActivity.java
@@ -55,15 +55,6 @@
private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 0;
- /**
- * Request code for this Activity, which will be used with
- * {@link Activity#startActivityForResult(Intent, int)}.
- *
- * This is useful when we want to share one request code among multiple Activities and
- * Fragments.
- */
- public static final int DEFAULT_REQUEST_CODE = 10001;
-
public static final String KEY_EXTRA_CONTACT_LIST_FILTER = "contactListFilter";
private static final int FILTER_LOADER_ID = 0;
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 2d5fed1..061646e 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -17,10 +17,10 @@
import com.android.common.widget.CompositeCursorAdapter.Partition;
import com.android.contacts.R;
+import com.android.contacts.util.ContactLoaderUtils;
import com.android.contacts.widget.AutoScrollListView;
import android.app.Activity;
-import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Loader;
@@ -28,6 +28,7 @@
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -92,51 +93,64 @@
private String mPersistentSelectionPrefix = PERSISTENT_SELECTION_PREFIX;
protected OnContactBrowserActionListener mListener;
+ private ContactLookupTask mContactLookupTask;
- /**
- * Refreshes a contact URI: it may have changed as a result of aggregation
- * activity.
- */
- private class ContactUriQueryHandler extends AsyncQueryHandler {
+ private final class ContactLookupTask extends AsyncTask<Void, Void, Uri> {
- public ContactUriQueryHandler(ContentResolver cr) {
- super(cr);
- }
+ private final Uri mUri;
+ private boolean mIsCancelled;
- public void runQuery() {
- startQuery(0, mSelectedContactUri, mSelectedContactUri,
- new String[] { Contacts._ID, Contacts.LOOKUP_KEY }, null, null, null);
+ public ContactLookupTask(Uri uri) {
+ mUri = uri;
}
@Override
- protected void onQueryComplete(int token, Object cookie, Cursor data) {
- long contactId = 0;
- String lookupKey = null;
- if (data != null) {
- if (data.moveToFirst()) {
- contactId = data.getLong(0);
- lookupKey = data.getString(1);
- }
- data.close();
- }
+ protected Uri doInBackground(Void... args) {
+ Cursor cursor = null;
+ try {
+ final ContentResolver resolver = getContext().getContentResolver();
+ final Uri uriCurrentFormat = ContactLoaderUtils.ensureIsContactUri(resolver, mUri);
+ cursor = resolver.query(uriCurrentFormat,
+ new String[] { Contacts._ID, Contacts.LOOKUP_KEY }, null, null, null);
- if (!cookie.equals(mSelectedContactUri)) {
+ if (cursor != null && cursor.moveToFirst()) {
+ final long contactId = cursor.getLong(0);
+ final String lookupKey = cursor.getString(1);
+ if (contactId != 0 && !TextUtils.isEmpty(lookupKey)) {
+ return Contacts.getLookupUri(contactId, lookupKey);
+ }
+ }
+
+ Log.e(TAG, "Error: No contact ID or lookup key for contact " + mUri);
+ return null;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ public void cancel() {
+ super.cancel(true);
+ // Use a flag to keep track of whether the {@link AsyncTask} was cancelled or not in
+ // order to ensure onPostExecute() is not executed after the cancel request. The flag is
+ // necessary because {@link AsyncTask} still calls onPostExecute() if the cancel request
+ // came after the worker thread was finished.
+ mIsCancelled = true;
+ }
+
+ @Override
+ protected void onPostExecute(Uri uri) {
+ // Make sure the {@link Fragment} is at least still attached to the {@link Activity}
+ // before continuing.
+ if (mIsCancelled || !isAdded() || uri == null) {
return;
}
-
- Uri uri;
- if (contactId != 0 && lookupKey != null) {
- uri = Contacts.getLookupUri(contactId, lookupKey);
- } else {
- uri = null;
- }
-
- onContactUriQueryFinished(uri);
+ mSelectedContactUri = uri;
+ onContactUriQueryFinished(mSelectedContactUri);
}
}
- private ContactUriQueryHandler mQueryHandler;
-
private boolean mDelaySelection;
private Handler getHandler() {
@@ -158,14 +172,13 @@
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
- mQueryHandler = new ContactUriQueryHandler(activity.getContentResolver());
mPrefs = PreferenceManager.getDefaultSharedPreferences(activity);
restoreFilter();
restoreSelectedUri(false);
}
@Override
- public void setSearchMode(boolean flag) {
+ protected void setSearchMode(boolean flag) {
if (isSearchMode() != flag) {
if (!flag) {
restoreSelectedUri(true);
@@ -228,12 +241,10 @@
}
protected void refreshSelectedContactUri() {
- if (mQueryHandler == null) {
- return;
+ if (mContactLookupTask != null) {
+ mContactLookupTask.cancel();
}
- mQueryHandler.cancelOperation(0);
-
if (!isSelectionVisible()) {
return;
}
@@ -249,7 +260,8 @@
&& mSelectedContactDirectoryId != Directory.LOCAL_INVISIBLE) {
onContactUriQueryFinished(mSelectedContactUri);
} else {
- mQueryHandler.runQuery();
+ mContactLookupTask = new ContactLookupTask(mSelectedContactUri);
+ mContactLookupTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[])null);
}
}
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 91c582c..8b9aaf5 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -108,7 +108,6 @@
private String mQueryString;
private int mDirectorySearchMode = DirectoryListLoader.SEARCH_MODE_NONE;
private boolean mSelectionVisible;
- private ContactsRequest mRequest;
private boolean mLegacyCompatibility;
private boolean mEnabled = true;
@@ -249,7 +248,6 @@
outState.putBoolean(KEY_LEGACY_COMPATIBILITY, mLegacyCompatibility);
outState.putString(KEY_QUERY_STRING, mQueryString);
outState.putInt(KEY_DIRECTORY_RESULT_LIMIT, mDirectoryResultLimit);
- outState.putParcelable(KEY_REQUEST, mRequest);
outState.putBoolean(KEY_DARK_THEME, mDarkTheme);
if (mListView != null) {
@@ -282,27 +280,12 @@
mLegacyCompatibility = savedState.getBoolean(KEY_LEGACY_COMPATIBILITY);
mQueryString = savedState.getString(KEY_QUERY_STRING);
mDirectoryResultLimit = savedState.getInt(KEY_DIRECTORY_RESULT_LIMIT);
- mRequest = savedState.getParcelable(KEY_REQUEST);
mDarkTheme = savedState.getBoolean(KEY_DARK_THEME);
// Retrieve list state. This will be applied in onLoadFinished
mListState = savedState.getParcelable(KEY_LIST_STATE);
}
- /**
- * Returns the parsed intent that started the activity hosting this fragment.
- */
- public ContactsRequest getContactsRequest() {
- return mRequest;
- }
-
- /**
- * Sets a parsed intent that started the activity hosting this fragment.
- */
- public void setContactsRequest(ContactsRequest request) {
- mRequest = request;
- }
-
@Override
public void onStart() {
super.onStart();
@@ -608,7 +591,14 @@
}
}
- public void setSearchMode(boolean flag) {
+ /**
+ * Enter/exit search mode. By design, a fragment enters search mode only when it has a
+ * non-empty query text, so the mode must be tightly related to the current query.
+ * For this reason this method must only be called by {@link #setQueryString}.
+ *
+ * Also note this method doesn't call {@link #reloadData()}; {@link #setQueryString} does it.
+ */
+ protected void setSearchMode(boolean flag) {
if (mSearchMode != flag) {
mSearchMode = flag;
setSectionHeaderDisplayEnabled(!mSearchMode);
@@ -632,7 +622,6 @@
}
}
mAdapter.configureDefaultPartition(false, flag);
- reloadData();
}
if (mListView != null) {
@@ -641,17 +630,22 @@
}
}
- public boolean isSearchMode() {
+ public final boolean isSearchMode() {
return mSearchMode;
}
- public String getQueryString() {
+ public final String getQueryString() {
return mQueryString;
}
public void setQueryString(String queryString, boolean delaySelection) {
+ // Normalize the empty query.
+ if (TextUtils.isEmpty(queryString)) queryString = null;
+
if (!TextUtils.equals(mQueryString, queryString)) {
mQueryString = queryString;
+ setSearchMode(!TextUtils.isEmpty(mQueryString));
+
if (mAdapter != null) {
mAdapter.setQueryString(queryString);
reloadData();
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 01d76a2..152b152 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -20,7 +20,6 @@
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
-import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;
/**
@@ -296,4 +295,45 @@
}
return mId;
}
+
+ public String toDebugString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("[filter type: " + filterType + " (" + filterTypeToString(filterType) + ")");
+ if (filterType == FILTER_TYPE_ACCOUNT) {
+ builder.append(", accountType: " + accountType)
+ .append(", accountName: " + accountName)
+ .append(", dataSet: " + dataSet);
+ }
+ if (filterType == FILTER_TYPE_GROUP) {
+ builder.append(", groupId: " + groupId)
+ .append(", groupSourceId: " + groupSourceId)
+ .append(", groupReadOnly: " + groupReadOnly)
+ .append("title: " + title);
+ }
+ builder.append(", icon: " + icon + "]");
+ return builder.toString();
+ }
+
+ public static final String filterTypeToString(int filterType) {
+ switch (filterType) {
+ case FILTER_TYPE_DEFAULT:
+ return "FILTER_TYPE_DEFAULT";
+ case FILTER_TYPE_ALL_ACCOUNTS:
+ return "FILTER_TYPE_ALL_ACCOUNTS";
+ case FILTER_TYPE_CUSTOM:
+ return "FILTER_TYPE_CUSTOM";
+ case FILTER_TYPE_STARRED:
+ return "FILTER_TYPE_STARRED";
+ case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+ return "FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY";
+ case FILTER_TYPE_SINGLE_CONTACT:
+ return "FILTER_TYPE_SINGLE_CONTACT";
+ case FILTER_TYPE_ACCOUNT:
+ return "FILTER_TYPE_ACCOUNT";
+ case FILTER_TYPE_GROUP:
+ return "FILTER_TYPE_GROUP";
+ default:
+ return "(unknown)";
+ }
+ }
}
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
index ead3a60..bf52188 100644
--- a/src/com/android/contacts/list/ContactListFilterController.java
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -15,7 +15,9 @@
*/
package com.android.contacts.list;
-import android.app.Activity;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.AccountWithDataSet;
+
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
@@ -24,48 +26,77 @@
import java.util.List;
/**
- * Stores the {@link ContactListFilter} selected by the user and saves it to
- * {@link SharedPreferences} if necessary.
+ * Manages {@link ContactListFilter}. All methods must be called from UI thread.
*/
-public class ContactListFilterController {
+public abstract class ContactListFilterController {
+
+ public static final String CONTACT_LIST_FILTER_SERVICE = "contactListFilter";
public interface ContactListFilterListener {
void onContactListFilterChanged();
}
- private Context mContext;
- private List<ContactListFilterListener> mListeners = new ArrayList<ContactListFilterListener>();
- private ContactListFilter mFilter;
-
- private boolean mIsInitialized;
-
- public ContactListFilterController(Activity activity) {
- mContext = activity;
+ public static ContactListFilterController getInstance(Context context) {
+ return (ContactListFilterController)
+ context.getApplicationContext().getSystemService(CONTACT_LIST_FILTER_SERVICE);
}
+ public static ContactListFilterController
+ createContactListFilterController(Context context) {
+ return new ContactListFilterControllerImpl(context);
+ }
+
+ public abstract void addListener(ContactListFilterListener listener);
+
+ public abstract void removeListener(ContactListFilterListener listener);
+
+ public abstract ContactListFilter getFilter();
+
/**
- * @param forceFilterReload when true filter is reloaded even when there's already a cache
- * for it.
+ * @param filter the filter
+ * @param persistent True when the given filter should be saved soon. False when the filter
+ * should not be saved. The latter case may happen when some Intent requires a certain type of
+ * UI (e.g. single contact) temporarily.
*/
- public void onStart(boolean forceFilterReload) {
- if (mFilter == null || forceFilterReload) {
- mFilter = ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
- }
- mIsInitialized = true;
+ public abstract void setContactListFilter(ContactListFilter filter, boolean persistent);
+
+ public abstract void selectCustomFilter();
+
+ /**
+ * Checks if the current filter is valid and reset the filter if not. It may happen when
+ * an account is removed while the filter points to the account with
+ * {@link ContactListFilter#FILTER_TYPE_ACCOUNT} type, for example.
+ */
+ public abstract void checkFilterValidity();
+}
+
+/**
+ * Stores the {@link ContactListFilter} selected by the user and saves it to
+ * {@link SharedPreferences} if necessary.
+ */
+class ContactListFilterControllerImpl extends ContactListFilterController {
+ private final Context mContext;
+ private final List<ContactListFilterListener> mListeners =
+ new ArrayList<ContactListFilterListener>();
+ private ContactListFilter mFilter;
+
+ public ContactListFilterControllerImpl(Context context) {
+ mContext = context;
+ mFilter = ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
+ checkFilterValidity();
}
- public boolean isInitialized() {
- return mIsInitialized;
- }
-
+ @Override
public void addListener(ContactListFilterListener listener) {
mListeners.add(listener);
}
+ @Override
public void removeListener(ContactListFilterListener listener) {
mListeners.remove(listener);
}
+ @Override
public ContactListFilter getFilter() {
return mFilter;
}
@@ -74,18 +105,20 @@
return PreferenceManager.getDefaultSharedPreferences(mContext);
}
+ @Override
public void setContactListFilter(ContactListFilter filter, boolean persistent) {
if (!filter.equals(mFilter)) {
mFilter = filter;
if (persistent) {
ContactListFilter.storeToPreferences(getSharedPreferences(), mFilter);
}
- if (mListeners != null) {
- notifyContactListFilterChanged();
+ if (!mListeners.isEmpty()) {
+ notifyContactListFilterChanged();
}
}
}
+ @Override
public void selectCustomFilter() {
setContactListFilter(ContactListFilter.createFilterWithType(
ContactListFilter.FILTER_TYPE_CUSTOM), true);
@@ -97,4 +130,27 @@
}
}
+ @Override
+ public void checkFilterValidity() {
+ if (mFilter == null || mFilter.filterType != ContactListFilter.FILTER_TYPE_ACCOUNT) {
+ return;
+ }
+
+ if (!filterAccountExists()) {
+ // The current account filter points to invalid account. Use "all" filter instead.
+ setContactListFilter(
+ ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), true);
+ }
+ }
+
+ /**
+ * @return true if the Account for the current filter exists.
+ */
+ private boolean filterAccountExists() {
+ final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(mContext);
+ final AccountWithDataSet filterAccount = new AccountWithDataSet(
+ mFilter.accountName, mFilter.accountType, mFilter.dataSet);
+ return accountTypeManager.contains(filterAccount, false);
+ }
}
diff --git a/src/com/android/contacts/list/ContactListItemView.java b/src/com/android/contacts/list/ContactListItemView.java
index 49957dc..5d549b8 100644
--- a/src/com/android/contacts/list/ContactListItemView.java
+++ b/src/com/android/contacts/list/ContactListItemView.java
@@ -35,6 +35,8 @@
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.TextUtils.TruncateAt;
import android.util.AttributeSet;
@@ -89,11 +91,14 @@
private final int mTextIndent;
private Drawable mActivatedBackgroundDrawable;
- // In the future we may need to merge these local padding to View's mPaddingXXX
- private final int mExtraPaddingTop;
- private final int mExtraPaddingBottom;
- private int mExtraPaddingLeft;
- private int mExtraPaddingRight;
+ /**
+ * Used with {@link #mLabelView}, specifying the width ratio between label and data.
+ */
+ private final int mLabelViewWidthWeight;
+ /**
+ * Used with {@link #mDataView}, specifying the width ratio between label and data.
+ */
+ private final int mDataViewWidthWeight;
// Will be used with adjustListItemSelectionBounds().
private int mSelectionBoundsMarginLeft;
@@ -173,7 +178,7 @@
private int mNameTextViewHeight;
private int mPhoneticNameTextViewHeight;
- private int mLabelTextViewHeight;
+ private int mLabelViewHeight;
private int mDataViewHeight;
private int mSnippetTextViewHeight;
private int mStatusTextViewHeight;
@@ -230,14 +235,7 @@
R.styleable.ContactListItemView_list_item_divider);
mVerticalDividerMargin = a.getDimensionPixelOffset(
R.styleable.ContactListItemView_list_item_vertical_divider_margin, 0);
- mExtraPaddingTop = a.getDimensionPixelOffset(
- R.styleable.ContactListItemView_list_item_padding_top, 0);
- mExtraPaddingBottom = a.getDimensionPixelOffset(
- R.styleable.ContactListItemView_list_item_padding_bottom, 0);
- mExtraPaddingLeft = a.getDimensionPixelOffset(
- R.styleable.ContactListItemView_list_item_padding_left, 0);
- mExtraPaddingRight = a.getDimensionPixelOffset(
- R.styleable.ContactListItemView_list_item_padding_right, 0);
+
mGapBetweenImageAndText = a.getDimensionPixelOffset(
R.styleable.ContactListItemView_list_item_gap_between_image_and_text, 0);
mGapBetweenLabelAndData = a.getDimensionPixelOffset(
@@ -268,6 +266,20 @@
R.styleable.ContactListItemView_list_item_contacts_count_text_size, 12);
mContactsCountTextColor = a.getColor(
R.styleable.ContactListItemView_list_item_contacts_count_text_color, Color.BLACK);
+ mDataViewWidthWeight = a.getInteger(
+ R.styleable.ContactListItemView_list_item_data_width_weight, 5);
+ mLabelViewWidthWeight = a.getInteger(
+ R.styleable.ContactListItemView_list_item_label_width_weight, 3);
+
+ setPadding(
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_left, 0),
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_top, 0),
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_right, 0),
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_bottom, 0));
mPrefixHighligher = new PrefixHighlighter(
a.getColor(R.styleable.ContactListItemView_list_item_prefix_highlight_color,
@@ -306,63 +318,92 @@
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// We will match parent's width and wrap content vertically, but make sure
// height is no less than listPreferredItemHeight.
- int width = resolveSize(0, widthMeasureSpec);
- int height = 0;
- int preferredHeight = mPreferredHeight;
+ final int specWidth = resolveSize(0, widthMeasureSpec);
+ final int preferredHeight;
+ if (mHorizontalDividerVisible) {
+ preferredHeight = mPreferredHeight + mHorizontalDividerHeight;
+ } else {
+ preferredHeight = mPreferredHeight;
+ }
mNameTextViewHeight = 0;
mPhoneticNameTextViewHeight = 0;
- mLabelTextViewHeight = 0;
+ mLabelViewHeight = 0;
mDataViewHeight = 0;
mLabelAndDataViewMaxHeight = 0;
mSnippetTextViewHeight = 0;
mStatusTextViewHeight = 0;
- // TODO: measure(0, 0) is *wrong*. At least, we should use correct width for each TextView.
- //
- // Reason: TextView applies ellipsis effect in this phase, while measure(0, 0) have those
- // views prepare the effect based on "unlimited width", which makes ellipsis setting
- // meaningless. We should pass a widthMeasureSpec with appropriate width setting.
- // See issue 5439903.
-
ensurePhotoViewSize();
- // Go over all visible text views and add their heights to get the total height
+ // Width each TextView is able to use.
+ final int effectiveWidth;
+ // All the other Views will honor the photo, so available width for them may be shrunk.
+ if (mPhotoViewWidth > 0 || mKeepHorizontalPaddingForPhotoView) {
+ effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight()
+ - (mPhotoViewWidth + mGapBetweenImageAndText);
+ } else {
+ effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight();
+ }
+
+ // Go over all visible text views and measure actual width of each of them.
+ // Also calculate their heights to get the total height for this entire view.
+
if (isVisible(mNameTextView)) {
- mNameTextView.measure(0, 0);
+ mNameTextView.measure(
+ MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
mNameTextViewHeight = mNameTextView.getMeasuredHeight();
}
if (isVisible(mPhoneticNameTextView)) {
- mPhoneticNameTextView.measure(0, 0);
+ mPhoneticNameTextView.measure(
+ MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
mPhoneticNameTextViewHeight = mPhoneticNameTextView.getMeasuredHeight();
}
+ // If both data (phone number/email address) and label (type like "MOBILE") are quite long,
+ // we should ellipsize both using appropriate ratio.
+ final int dataWidth;
+ final int labelWidth;
if (isVisible(mDataView)) {
- mDataView.measure(0, 0);
+ if (isVisible(mLabelView)) {
+ final int totalWidth = effectiveWidth - mGapBetweenLabelAndData;
+ dataWidth = ((totalWidth * mDataViewWidthWeight)
+ / (mDataViewWidthWeight + mLabelViewWidthWeight));
+ labelWidth = ((totalWidth * mLabelViewWidthWeight) /
+ (mDataViewWidthWeight + mLabelViewWidthWeight));
+ } else {
+ dataWidth = effectiveWidth;
+ labelWidth = 0;
+ }
+ } else {
+ dataWidth = 0;
+ if (isVisible(mLabelView)) {
+ labelWidth = effectiveWidth;
+ } else {
+ labelWidth = 0;
+ }
+ }
+
+ if (isVisible(mDataView)) {
+ mDataView.measure(MeasureSpec.makeMeasureSpec(dataWidth, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
mDataViewHeight = mDataView.getMeasuredHeight();
}
if (isVisible(mLabelView)) {
- if (mPhotoPosition == PhotoPosition.LEFT) {
- // Manually calculate the width now and see if ellipsis becomes effective or not.
- // See also issue 5438757 and 5439903.
- final int labelViewWidth = width - mExtraPaddingLeft - mExtraPaddingRight
- - (mPhotoViewWidth + mGapBetweenImageAndText)
- - mDataView.getMeasuredWidth()
- - mGapBetweenLabelAndData;
- final int labelViewWidthMeasureSpec = MeasureSpec.makeMeasureSpec(
- labelViewWidth, MeasureSpec.AT_MOST);
- mLabelView.measure(labelViewWidthMeasureSpec, 0);
- } else {
- mLabelView.measure(0, 0);
- }
- mLabelTextViewHeight = mLabelView.getMeasuredHeight();
+ mLabelView.measure(MeasureSpec.makeMeasureSpec(labelWidth, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mLabelViewHeight = mLabelView.getMeasuredHeight();
}
- mLabelAndDataViewMaxHeight = Math.max(mLabelTextViewHeight, mDataViewHeight);
+ mLabelAndDataViewMaxHeight = Math.max(mLabelViewHeight, mDataViewHeight);
if (isVisible(mSnippetView)) {
- mSnippetView.measure(0, 0);
+ mSnippetView.measure(
+ MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
mSnippetTextViewHeight = mSnippetView.getMeasuredHeight();
}
@@ -373,27 +414,36 @@
}
if (isVisible(mStatusView)) {
- mStatusView.measure(0, 0);
- mStatusTextViewHeight = Math.max(mStatusTextViewHeight,
- mStatusView.getMeasuredHeight());
+ // Presence and status are in a same row, so status will be affected by icon size.
+ final int statusWidth;
+ if (isVisible(mPresenceIcon)) {
+ statusWidth = (effectiveWidth - mPresenceIcon.getMeasuredWidth()
+ - mPresenceIconMargin);
+ } else {
+ statusWidth = effectiveWidth;
+ }
+ mStatusView.measure(MeasureSpec.makeMeasureSpec(statusWidth, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mStatusTextViewHeight =
+ Math.max(mStatusTextViewHeight, mStatusView.getMeasuredHeight());
}
- // Calculate height including padding
- height += mNameTextViewHeight + mPhoneticNameTextViewHeight + mLabelAndDataViewMaxHeight +
- mSnippetTextViewHeight + mStatusTextViewHeight +
- mExtraPaddingTop + mExtraPaddingBottom;
+ // Calculate height including padding.
+ int height = (mNameTextViewHeight + mPhoneticNameTextViewHeight +
+ mLabelAndDataViewMaxHeight +
+ mSnippetTextViewHeight + mStatusTextViewHeight);
if (isVisible(mCallButton)) {
- mCallButton.measure(0, 0);
+ mCallButton.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
}
// Make sure the height is at least as high as the photo
- height = Math.max(height, mPhotoViewHeight + mExtraPaddingBottom + mExtraPaddingTop);
+ height = Math.max(height, mPhotoViewHeight + getPaddingBottom() + getPaddingTop());
// Add horizontal divider height
if (mHorizontalDividerVisible) {
height += mHorizontalDividerHeight;
- preferredHeight += mHorizontalDividerHeight;
}
// Make sure height is at least the preferred height
@@ -402,11 +452,11 @@
// Add the height of the header if visible
if (mHeaderVisible) {
mHeaderTextView.measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(specWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(mHeaderBackgroundHeight, MeasureSpec.EXACTLY));
if (mCountView != null) {
mCountView.measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(specWidth, MeasureSpec.AT_MOST),
MeasureSpec.makeMeasureSpec(mHeaderBackgroundHeight, MeasureSpec.EXACTLY));
}
mHeaderBackgroundHeight = Math.max(mHeaderBackgroundHeight,
@@ -414,7 +464,7 @@
height += (mHeaderBackgroundHeight + mHeaderUnderlineHeight);
}
- setMeasuredDimension(width, height);
+ setMeasuredDimension(specWidth, height);
}
@Override
@@ -425,8 +475,8 @@
// Determine the vertical bounds by laying out the header first.
int topBound = 0;
int bottomBound = height;
- int leftBound = mExtraPaddingLeft;
- int rightBound = width - mExtraPaddingRight;
+ int leftBound = getPaddingLeft();
+ int rightBound = width - getPaddingRight();
// Put the header in the top of the contact view (Text + underline view)
if (mHeaderVisible) {
@@ -435,7 +485,7 @@
rightBound,
mHeaderBackgroundHeight);
if (mCountView != null) {
- mCountView.layout(width - mExtraPaddingRight - mCountView.getMeasuredWidth(),
+ mCountView.layout(rightBound - mCountView.getMeasuredWidth(),
0,
rightBound,
mHeaderBackgroundHeight);
@@ -463,10 +513,6 @@
mActivatedBackgroundDrawable.setBounds(mBoundsWithoutHeader);
}
- // Set the top/bottom padding
- topBound += mExtraPaddingTop;
- bottomBound -= mExtraPaddingBottom;
-
final View photoView = mQuickContact != null ? mQuickContact : mPhotoView;
if (mPhotoPosition == PhotoPosition.LEFT) {
// Photo is the left most view. All the other Views should on the right of the photo.
@@ -556,14 +602,15 @@
if (mPhotoPosition == PhotoPosition.LEFT) {
// When photo is on left, label is placed on the right edge of the list item.
mLabelView.layout(rightBound - mLabelView.getMeasuredWidth(),
- textTopBound + mLabelAndDataViewMaxHeight - mLabelTextViewHeight,
+ textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
rightBound,
textTopBound + mLabelAndDataViewMaxHeight);
+ rightBound -= mLabelView.getMeasuredWidth();
} else {
// When photo is on right, label is placed on the left of data view.
dataLeftBound = leftBound + mLabelView.getMeasuredWidth();
mLabelView.layout(leftBound,
- textTopBound + mLabelAndDataViewMaxHeight - mLabelTextViewHeight,
+ textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
dataLeftBound,
textTopBound + mLabelAndDataViewMaxHeight);
dataLeftBound += mGapBetweenLabelAndData;
@@ -739,7 +786,7 @@
mHeaderDivider.setBackgroundColor(mHeaderUnderlineColor);
addView(mHeaderDivider);
}
- mHeaderTextView.setText(title);
+ mHeaderTextView.setText(getMarqueeText(title));
mHeaderTextView.setVisibility(View.VISIBLE);
mHeaderDivider.setVisibility(View.VISIBLE);
mHeaderTextView.setAllCaps(true);
@@ -885,7 +932,7 @@
}
} else {
getPhoneticNameTextView();
- mPhoneticNameTextView.setText(text, 0, size);
+ mPhoneticNameTextView.setText(getMarqueeText(text, size));
mPhoneticNameTextView.setVisibility(VISIBLE);
}
}
@@ -916,7 +963,7 @@
}
} else {
getLabelView();
- mLabelView.setText(text);
+ mLabelView.setText(getMarqueeText(text));
mLabelView.setVisibility(VISIBLE);
}
}
@@ -931,7 +978,7 @@
}
} else {
getLabelView();
- mLabelView.setText(text, 0, size);
+ mLabelView.setText(getMarqueeText(text, size));
mLabelView.setVisibility(VISIBLE);
}
}
@@ -947,8 +994,8 @@
mLabelView.setTextAppearance(mContext, android.R.style.TextAppearance_Small);
if (mPhotoPosition == PhotoPosition.LEFT) {
mLabelView.setTextSize(TypedValue.COMPLEX_UNIT_SP, mCountViewTextSize);
- mLabelView.setEllipsize(TruncateAt.MIDDLE);
mLabelView.setAllCaps(true);
+ mLabelView.setGravity(Gravity.RIGHT);
} else {
mLabelView.setTypeface(mLabelView.getTypeface(), Typeface.BOLD);
}
@@ -969,11 +1016,28 @@
return;
} else {
getDataView();
- mDataView.setText(text, 0, size);
+ mDataView.setText(getMarqueeText(text, size));
mDataView.setVisibility(VISIBLE);
}
}
+ private CharSequence getMarqueeText(char[] text, int size) {
+ return getMarqueeText(new String(text, 0, size));
+ }
+
+ private CharSequence getMarqueeText(CharSequence text) {
+ if (getTextEllipsis() == TruncateAt.MARQUEE) {
+ // To show MARQUEE correctly (with END effect during non-active state), we need
+ // to build Spanned with MARQUEE in addition to TextView's ellipsize setting.
+ final SpannableStringBuilder builder = new SpannableStringBuilder(text);
+ builder.setSpan(TruncateAt.MARQUEE, 0, builder.length(),
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ return builder;
+ } else {
+ return text;
+ }
+ }
+
/**
* Returns the text view for the data text, creating it if necessary.
*/
@@ -1060,7 +1124,7 @@
}
} else {
getCountView();
- mCountView.setText(text);
+ mCountView.setText(getMarqueeText(text));
mCountView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mCountViewTextSize);
mCountView.setGravity(Gravity.CENTER_VERTICAL);
mCountView.setTextColor(mContactsCountTextColor);
@@ -1078,7 +1142,7 @@
}
} else {
getStatusView();
- mStatusView.setText(text);
+ mStatusView.setText(getMarqueeText(text));
mStatusView.setVisibility(VISIBLE);
}
}
@@ -1103,7 +1167,7 @@
}
private TruncateAt getTextEllipsis() {
- return mActivatedStateSupported ? TruncateAt.START : TruncateAt.MARQUEE;
+ return TruncateAt.MARQUEE;
}
public void showDisplayName(Cursor cursor, int nameColumnIndex, int alternativeNameColumnIndex,
@@ -1113,8 +1177,10 @@
cursor.copyStringToBuffer(alternativeNameColumnIndex,
mDisplayNameFormatter.getAlternateNameBuffer());
- mDisplayNameFormatter.setDisplayName(
- getNameTextView(), displayOrder, highlightingEnabled, mHighlightedPrefix);
+ CharSequence displayName = mDisplayNameFormatter.getDisplayName(
+ displayOrder, highlightingEnabled, mHighlightedPrefix);
+ getNameTextView().setText(getMarqueeText(displayName));
+
// Since the quick contact content description is derived from the display name and there is
// no guarantee that when the quick contact is initialized the display name is already set,
// do it here too.
@@ -1262,29 +1328,6 @@
}
/**
- * Sets custom padding inside this object. Do not use this method without any strong reason.
- *
- * Detail: we cannot simply override {@link #setPadding(int, int, int, int)}. {@link View}
- * does *not* know this view's local padding but has completely different ones.
- * See View#mPaddingLeft and View#mPaddingRight. View also has View#mUserPaddingLeft, and
- * View#mUserPaddingRight in addition to View#mPaddingLeft and View#mPaddingRight, to handle
- * {@link View#setPadding(int, int, int, int)} correctly. If setPadding() is overridden to
- * reset our {@link #mExtraPaddingLeft} and {@link #mExtraPaddingRight} carelessly, the whole
- * View layout gets confused.
- *
- * To simplify our implementation, this method just modify the local two padding without
- * confusing its parent.
- *
- * If we want to fix this multiple padding issue correctly, we should merge local padding
- * in this class into View's ones. Also we should remove "list_item_padding_left" and
- * "list_item_padding_right" attributes, using "android:paddingLeft" and "android:paddingRight".
- */
- public void setExtraPadding(int left, int right) {
- mExtraPaddingLeft = left;
- mExtraPaddingRight = right;
- }
-
- /**
* Specifies left and right margin for selection bounds. See also
* {@link #adjustListItemSelectionBounds(Rect)}.
*/
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index a3fa7b0..8d14591 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -73,16 +73,7 @@
request.setActionCode(ContactsRequest.ACTION_STREQUENT);
} else if (UI.LIST_GROUP_ACTION.equals(action)) {
request.setActionCode(ContactsRequest.ACTION_GROUP);
-
- // TODO Selecting a group is not implemented, but it doesn't seem to be used anywhere.
- // Can we remove this?
- String groupName = intent.getStringExtra(UI.GROUP_NAME_EXTRA_KEY);
- if (!TextUtils.isEmpty(groupName)) {
- request.setGroupName(groupName);
- } else {
- Log.e(TAG, "Intent missing a required extra: " + UI.GROUP_NAME_EXTRA_KEY);
- request.setValid(false);
- }
+ // We no longer support UI.GROUP_NAME_EXTRA_KEY
} else if (Intent.ACTION_PICK.equals(action)) {
final String resolvedType = intent.resolveType(mContext);
if (Contacts.CONTENT_TYPE.equals(resolvedType)) {
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index b7e21b4..2a26ddf 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -84,7 +84,6 @@
private boolean mSearchMode;
private String mQueryString;
private boolean mIncludeProfile;
- private String mGroupName;
private boolean mLegacyCompatibilityMode;
private boolean mDirectorySearchEnabled = true;
private Uri mContactUri;
@@ -98,7 +97,6 @@
+ " mSearchMode=" + mSearchMode
+ " mQueryString=" + mQueryString
+ " mIncludeProfile=" + mIncludeProfile
- + " mGroupName=" + mGroupName
+ " mLegacyCompatibilityMode=" + mLegacyCompatibilityMode
+ " mDirectorySearchEnabled=" + mDirectorySearchEnabled
+ " mContactUri=" + mContactUri
@@ -116,7 +114,6 @@
mSearchMode = request.mSearchMode;
mQueryString = request.mQueryString;
mIncludeProfile = request.mIncludeProfile;
- mGroupName = request.mGroupName;
mLegacyCompatibilityMode = request.mLegacyCompatibilityMode;
mDirectorySearchEnabled = request.mDirectorySearchEnabled;
mContactUri = request.mContactUri;
@@ -138,7 +135,6 @@
request.mSearchMode = source.readInt() != 0;
request.mQueryString = source.readString();
request.mIncludeProfile = source.readInt() != 0;
- request.mGroupName = source.readString();
request.mLegacyCompatibilityMode = source.readInt() != 0;
request.mDirectorySearchEnabled = source.readInt() != 0;
request.mContactUri = source.readParcelable(classLoader);
@@ -154,7 +150,6 @@
dest.writeInt(mSearchMode ? 1 : 0);
dest.writeString(mQueryString);
dest.writeInt(mIncludeProfile ? 1 : 0);
- dest.writeString(mGroupName);
dest.writeInt(mLegacyCompatibilityMode ? 1 : 0);
dest.writeInt(mDirectorySearchEnabled ? 1 : 0);
dest.writeParcelable(mContactUri, 0);
@@ -220,14 +215,6 @@
mIncludeProfile = includeProfile;
}
- public String getGroupName() {
- return mGroupName;
- }
-
- public void setGroupName(String groupName) {
- mGroupName = groupName;
- }
-
public boolean isLegacyCompatibilityMode() {
return mLegacyCompatibilityMode;
}
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 30c3c48..0cc211a 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -17,13 +17,14 @@
import com.android.contacts.R;
import com.android.contacts.editor.ContactEditorFragment;
+import com.android.contacts.util.AccountFilterUtil;
-import android.app.Activity;
import android.content.CursorLoader;
import android.content.Intent;
import android.database.Cursor;
import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -40,11 +41,13 @@
* picking a contact with one of the PICK intents).
*/
public class DefaultContactBrowseListFragment extends ContactBrowseListFragment {
+ private static final String TAG = DefaultContactBrowseListFragment.class.getSimpleName();
+
+ private static final int REQUEST_CODE_ACCOUNT_FILTER = 1;
private TextView mCounterHeaderView;
private View mSearchHeaderView;
- private TextView mAccountFilterHeaderView;
- private View mAccountFilterHeaderContainer;
+ private View mAccountFilterHeader;
private FrameLayout mProfileHeaderContainer;
private View mProfileHeader;
private Button mProfileMessage;
@@ -56,12 +59,8 @@
private class FilterHeaderClickListener implements OnClickListener {
@Override
public void onClick(View view) {
- final Activity activity = getActivity();
- if (activity != null) {
- final Intent intent = new Intent(activity, AccountFilterActivity.class);
- activity.startActivityForResult(
- intent, AccountFilterActivity.DEFAULT_REQUEST_CODE);
- }
+ AccountFilterUtil.startAccountFilterActivityForResult(
+ DefaultContactBrowseListFragment.this, REQUEST_CODE_ACCOUNT_FILTER);
}
}
private OnClickListener mFilterHeaderClickListener = new FilterHeaderClickListener();
@@ -92,17 +91,15 @@
@Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
- return inflater.inflate(R.layout.contacts_list_content, null);
+ return inflater.inflate(R.layout.contact_list_content, null);
}
@Override
protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
super.onCreateView(inflater, container);
- mAccountFilterHeaderView = (TextView) getView().findViewById(R.id.account_filter_header);
- mAccountFilterHeaderContainer =
- getView().findViewById(R.id.account_filter_header_container);
- mAccountFilterHeaderContainer.setOnClickListener(mFilterHeaderClickListener);
+ mAccountFilterHeader = getView().findViewById(R.id.account_filter_header_container);
+ mAccountFilterHeader.setOnClickListener(mFilterHeaderClickListener);
mCounterHeaderView = (TextView) getView().findViewById(R.id.contacts_count);
// Create an empty user profile header and hide it for now (it will be visible if the
@@ -120,7 +117,7 @@
}
@Override
- public void setSearchMode(boolean flag) {
+ protected void setSearchMode(boolean flag) {
super.setSearchMode(flag);
checkHeaderViewVisibility();
}
@@ -144,29 +141,17 @@
}
private void updateFilterHeaderView() {
- ContactListFilter filter = getFilter();
- if (mAccountFilterHeaderView == null) {
+ if (mAccountFilterHeader == null) {
return; // Before onCreateView -- just ignore it.
}
+ final ContactListFilter filter = getFilter();
if (filter != null && !isSearchMode()) {
- if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
- mAccountFilterHeaderContainer.setVisibility(View.VISIBLE);
- mAccountFilterHeaderView.setText(getContext().getString(
- R.string.listSingleContact));
- return;
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
- mAccountFilterHeaderContainer.setVisibility(View.VISIBLE);
- mAccountFilterHeaderView.setText(getContext().getString(
- R.string.listCustomView));
- return;
- } else if (filter.filterType != ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
- mAccountFilterHeaderContainer.setVisibility(View.VISIBLE);
- mAccountFilterHeaderView.setText(getContext().getString(
- R.string.listAllContactsInAccount, filter.accountName));
- return;
- }
+ final boolean shouldShowHeader = AccountFilterUtil.updateAccountFilterTitleForPeople(
+ mAccountFilterHeader, filter, false, false);
+ mAccountFilterHeader.setVisibility(shouldShowHeader ? View.VISIBLE : View.GONE);
+ } else {
+ mAccountFilterHeader.setVisibility(View.GONE);
}
- mAccountFilterHeaderContainer.setVisibility(View.GONE);
}
@Override
@@ -244,6 +229,18 @@
showEmptyUserProfile(!mUserProfileExists && !isSearchMode());
}
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_CODE_ACCOUNT_FILTER) {
+ if (getActivity() != null) {
+ AccountFilterUtil.handleAccountFilterResult(
+ ContactListFilterController.getInstance(getActivity()), resultCode, data);
+ } else {
+ Log.e(TAG, "getActivity() returns null during Fragment#onActivityResult()");
+ }
+ }
+ }
+
private void showEmptyUserProfile(boolean show) {
// Changing visibility of just the mProfileHeader doesn't do anything unless
// you change visibility of its children, hence the call to mCounterHeaderView
diff --git a/src/com/android/contacts/list/EmailAddressPickerFragment.java b/src/com/android/contacts/list/EmailAddressPickerFragment.java
index 168e135..14b6c23 100644
--- a/src/com/android/contacts/list/EmailAddressPickerFragment.java
+++ b/src/com/android/contacts/list/EmailAddressPickerFragment.java
@@ -55,7 +55,7 @@
@Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
- return inflater.inflate(R.layout.contacts_list_content, null);
+ return inflater.inflate(R.layout.contact_list_content, null);
}
private void pickEmailAddress(Uri uri) {
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index e764125..73bca52 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -39,20 +39,12 @@
private static final int MAX_SUGGESTIONS = 4;
public static final int PARTITION_SUGGESTIONS = 0;
- public static final int PARTITION_SHOW_ALL_CONTACTS = 1;
- public static final int PARTITION_ALL_CONTACTS = 2;
+ public static final int PARTITION_ALL_CONTACTS = 1;
private long mTargetContactId;
private int mShowAllContactsViewType;
- /**
- * Determines whether we display a list item with the label
- * "Show all contacts" or actually show all contacts
- */
- private boolean mAllContactsListShown;
-
-
public JoinContactListAdapter(Context context) {
super(context);
setPinnedPartitionHeadersEnabled(true);
@@ -68,10 +60,7 @@
// Partition 0: suggestions
addPartition(false, true);
- // Partition 1: "Show all contacts"
- addPartition(false, false);
-
- // Partition 2: All contacts
+ // Partition 1: All contacts
addPartition(createDefaultDirectoryPartition());
}
@@ -82,7 +71,6 @@
@Override
public void configureLoader(CursorLoader cursorLoader, long directoryId) {
JoinContactLoader loader = (JoinContactLoader)cursorLoader;
- loader.setLoadSuggestionsAndAllContacts(mAllContactsListShown);
Builder builder = Contacts.CONTENT_URI.buildUpon();
builder.appendEncodedPath(String.valueOf(mTargetContactId));
@@ -118,21 +106,8 @@
return false;
}
- public boolean isAllContactsListShown() {
- return mAllContactsListShown;
- }
-
- public void setAllContactsListShown(boolean flag) {
- mAllContactsListShown = flag;
- }
-
public void setSuggestionsCursor(Cursor cursor) {
changeCursor(PARTITION_SUGGESTIONS, cursor);
- if (cursor != null && cursor.getCount() != 0 && !mAllContactsListShown) {
- changeCursor(PARTITION_SHOW_ALL_CONTACTS, getShowAllContactsLabelCursor());
- } else {
- changeCursor(PARTITION_SHOW_ALL_CONTACTS, null);
- }
}
@Override
@@ -153,9 +128,6 @@
@Override
public int getItemViewType(int partition, int position) {
- if (partition == PARTITION_SHOW_ALL_CONTACTS) {
- return mShowAllContactsViewType;
- }
return super.getItemViewType(partition, position);
}
@@ -164,13 +136,13 @@
ViewGroup parent) {
switch (partition) {
case PARTITION_SUGGESTIONS: {
- View view = inflate(R.layout.join_contact_picker_section, parent);
+ View view = inflate(R.layout.join_contact_picker_section_header, parent);
((TextView) view.findViewById(R.id.text)).setText(
R.string.separatorJoinAggregateSuggestions);
return view;
}
case PARTITION_ALL_CONTACTS: {
- View view = inflate(R.layout.join_contact_picker_section, parent);
+ View view = inflate(R.layout.join_contact_picker_section_header, parent);
((TextView) view.findViewById(R.id.text)).setText(
R.string.separatorJoinAggregateAll);
return view;
@@ -192,8 +164,6 @@
case PARTITION_SUGGESTIONS:
case PARTITION_ALL_CONTACTS:
return super.newView(context, partition, cursor, position, parent);
- case PARTITION_SHOW_ALL_CONTACTS:
- return inflate(R.layout.join_contact_picker_show_all, parent);
}
return null;
}
@@ -212,9 +182,6 @@
bindName(view, cursor);
break;
}
- case PARTITION_SHOW_ALL_CONTACTS: {
- break;
- }
case PARTITION_ALL_CONTACTS: {
final ContactListItemView view = (ContactListItemView)itemView;
bindSectionHeaderAndDivider(view, position, cursor);
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index 7931699..5b27bdf 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -15,7 +15,6 @@
*/
package com.android.contacts.list;
-import com.android.contacts.ContactsSearchManager;
import com.android.contacts.R;
import android.app.Activity;
@@ -39,13 +38,12 @@
private static final int DISPLAY_NAME_LOADER = -2;
- private static final String KEY_ALL_CONTACTS_LIST_SHOWN = "allContactsShown";
+ private static final String KEY_TARGET_CONTACT_ID = "targetContactId";
private OnContactPickerActionListener mListener;
private long mTargetContactId;
- private boolean mAllContactsListShown = false;
- private LoaderCallbacks<Cursor> mLoaderCallbacks = new LoaderCallbacks<Cursor>() {
+ private final LoaderCallbacks<Cursor> mLoaderCallbacks = new LoaderCallbacks<Cursor>() {
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
@@ -78,7 +76,7 @@
break;
}
case JoinContactListAdapter.PARTITION_ALL_CONTACTS: {
- Cursor suggestionsCursor = ((JoinContactLoader)loader).getSuggestionsCursor();
+ Cursor suggestionsCursor = ((JoinContactLoader) loader).getSuggestionsCursor();
onContactListLoaded(suggestionsCursor, data);
break;
}
@@ -109,19 +107,16 @@
null, mLoaderCallbacks);
}
- void onContactListLoaded(Cursor suggestionsCursor, Cursor allContacts) {
+ private void onContactListLoaded(Cursor suggestionsCursor, Cursor allContactsCursor) {
JoinContactListAdapter adapter = getAdapter();
adapter.setSuggestionsCursor(suggestionsCursor);
- if (suggestionsCursor == null || suggestionsCursor.getCount() == 0) {
- mAllContactsListShown = true;
- }
- setVisibleScrollbarEnabled(mAllContactsListShown);
- onPartitionLoaded(JoinContactListAdapter.PARTITION_ALL_CONTACTS, allContacts);
+ setVisibleScrollbarEnabled(true);
+ onPartitionLoaded(JoinContactListAdapter.PARTITION_ALL_CONTACTS, allContactsCursor);
}
private void showTargetContactName(String displayName) {
Activity activity = getActivity();
- TextView blurbView = (TextView)activity.findViewById(R.id.join_contact_blurb);
+ TextView blurbView = (TextView) activity.findViewById(R.id.join_contact_blurb);
String blurb = activity.getString(R.string.blurbJoinContactDataWith, displayName);
blurbView.setText(blurb);
}
@@ -139,7 +134,6 @@
protected void configureAdapter() {
super.configureAdapter();
JoinContactListAdapter adapter = getAdapter();
- adapter.setAllContactsListShown(mAllContactsListShown);
adapter.setTargetContactId(mTargetContactId);
}
@@ -152,14 +146,7 @@
protected void onItemClick(int position, long id) {
JoinContactListAdapter adapter = getAdapter();
int partition = adapter.getPartitionForPosition(position);
- if (partition == JoinContactListAdapter.PARTITION_SHOW_ALL_CONTACTS) {
- mAllContactsListShown = true;
- configureAdapter();
- getLoaderManager().restartLoader(JoinContactListAdapter.PARTITION_ALL_CONTACTS,
- null, mLoaderCallbacks);
- } else {
- mListener.onPickContactAction(adapter.getContactUri(position));
- }
+ mListener.onPickContactAction(adapter.getContactUri(position));
}
@Override
@@ -170,14 +157,14 @@
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putBoolean(KEY_ALL_CONTACTS_LIST_SHOWN, mAllContactsListShown);
+ outState.putLong(KEY_TARGET_CONTACT_ID, mTargetContactId);
}
@Override
public void restoreSavedState(Bundle savedState) {
super.restoreSavedState(savedState);
if (savedState != null) {
- mAllContactsListShown = savedState.getBoolean(KEY_ALL_CONTACTS_LIST_SHOWN);
+ mTargetContactId = savedState.getLong(KEY_TARGET_CONTACT_ID);
}
}
}
diff --git a/src/com/android/contacts/list/JoinContactLoader.java b/src/com/android/contacts/list/JoinContactLoader.java
index a137961..2f1f9b0 100644
--- a/src/com/android/contacts/list/JoinContactLoader.java
+++ b/src/com/android/contacts/list/JoinContactLoader.java
@@ -27,7 +27,6 @@
*/
public class JoinContactLoader extends CursorLoader {
- private boolean mLoadSuggestionsAndAllContacts;
private String[] mProjection;
private Uri mSuggestionUri;
private MatrixCursor mSuggestionsCursor;
@@ -36,10 +35,6 @@
super(context, null, null, null, null, null);
}
- public void setLoadSuggestionsAndAllContacts(boolean flag) {
- mLoadSuggestionsAndAllContacts = flag;
- }
-
public void setSuggestionUri(Uri uri) {
this.mSuggestionUri = uri;
}
@@ -59,13 +54,6 @@
// First execute the suggestions query, then call super.loadInBackground
// to load the entire list
mSuggestionsCursor = loadSuggestions();
- if (!mLoadSuggestionsAndAllContacts && mSuggestionsCursor.getCount() != 0) {
- // In case we only need suggestions, send "0" as the search query, which
- // will always return an empty cursor (but we can still register to
- // listen for changes on it).
- setSelection("0");
- setSelectionArgs(null);
- }
return super.loadInBackground();
}
diff --git a/src/com/android/contacts/list/PhoneFavoriteFragment.java b/src/com/android/contacts/list/PhoneFavoriteFragment.java
index 5e53eb8..9ee2d3c 100644
--- a/src/com/android/contacts/list/PhoneFavoriteFragment.java
+++ b/src/com/android/contacts/list/PhoneFavoriteFragment.java
@@ -19,6 +19,7 @@
import com.android.contacts.ContactTileLoaderFactory;
import com.android.contacts.R;
import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.AccountFilterUtil;
import android.app.Activity;
import android.app.Fragment;
@@ -27,11 +28,9 @@
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
-import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.provider.ContactsContract.Directory;
import android.util.Log;
import android.view.LayoutInflater;
@@ -41,6 +40,7 @@
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
+import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
@@ -64,6 +64,8 @@
private static final String KEY_FILTER = "filter";
+ private static final int REQUEST_CODE_ACCOUNT_FILTER = 1;
+
public interface Listener {
public void onContactSelected(Uri contactUri);
}
@@ -95,7 +97,7 @@
// Show the filter header with "loading" state.
updateFilterHeaderView();
- mAccountFilterHeaderContainer.setVisibility(View.VISIBLE);
+ mAccountFilterHeader.setVisibility(View.VISIBLE);
}
@Override
@@ -139,12 +141,8 @@
private class FilterHeaderClickListener implements OnClickListener {
@Override
public void onClick(View view) {
- final Activity activity = getActivity();
- if (activity != null) {
- final Intent intent = new Intent(activity, AccountFilterActivity.class);
- activity.startActivityForResult(
- intent, AccountFilterActivity.DEFAULT_REQUEST_CODE);
- }
+ AccountFilterUtil.startAccountFilterActivityForResult(
+ PhoneFavoriteFragment.this, REQUEST_CODE_ACCOUNT_FILTER);
}
}
@@ -166,6 +164,7 @@
// FastScroller should be visible only when the user is seeing "all" contacts section.
final boolean shouldShow = mAdapter.shouldShowFirstScroller(firstVisibleItem);
if (shouldShow != mShouldShowFastScroller) {
+ mListView.setVerticalScrollBarEnabled(shouldShow);
mListView.setFastScrollEnabled(shouldShow);
mListView.setFastScrollAlwaysVisible(shouldShow);
mShouldShowFastScroller = shouldShow;
@@ -193,14 +192,16 @@
*/
private boolean mAllContactsForceReload;
- private SharedPreferences mPrefs;
private ContactsPreferences mContactsPrefs;
private ContactListFilter mFilter;
private TextView mEmptyView;
private ListView mListView;
- private View mAccountFilterHeaderContainer;
- private TextView mAccountFilterHeaderView;
+ /**
+ * Layout containing {@link #mAccountFilterHeader}. Used to limit area being "pressed".
+ */
+ private FrameLayout mAccountFilterHeaderContainer;
+ private View mAccountFilterHeader;
private final ContactTileAdapter.Listener mContactTileAdapterListener =
new ContactTileAdapterListener();
@@ -231,7 +232,6 @@
public void onAttach(Activity activity) {
super.onAttach(activity);
- mPrefs = PreferenceManager.getDefaultSharedPreferences(activity);
mContactsPrefs = new ContactsPreferences(activity);
}
@@ -243,7 +243,7 @@
mListView = (ListView) listLayout.findViewById(R.id.contact_tile_list);
mListView.setItemsCanFocus(true);
mListView.setOnItemClickListener(this);
- mListView.setVerticalScrollBarEnabled(true);
+ mListView.setVerticalScrollBarEnabled(false);
mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
@@ -303,11 +303,10 @@
}
// Create the account filter header but keep it hidden until "all" contacts are loaded.
- mAccountFilterHeaderContainer = inflater.inflate(
- R.layout.phone_favorite_account_filter_header, mListView, false);
- mAccountFilterHeaderView =
- (TextView) mAccountFilterHeaderContainer.findViewById(R.id.account_filter_header);
- mAccountFilterHeaderContainer.setOnClickListener(mFilterHeaderClickListener);
+ mAccountFilterHeaderContainer = new FrameLayout(context, null);
+ mAccountFilterHeader = inflater.inflate(R.layout.account_filter_header, mListView, false);
+ mAccountFilterHeader.setOnClickListener(mFilterHeaderClickListener);
+ mAccountFilterHeaderContainer.addView(mAccountFilterHeader);
mAccountFilterHeaderContainer.setVisibility(View.GONE);
mAdapter = new PhoneFavoriteMergedAdapter(context,
@@ -316,12 +315,6 @@
}
@Override
- public void onDetach() {
- super.onDetach();
- mPrefs = null;
- }
-
- @Override
public void onStart() {
super.onStart();
@@ -365,6 +358,18 @@
}
}
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_CODE_ACCOUNT_FILTER) {
+ if (getActivity() != null) {
+ AccountFilterUtil.handleAccountFilterResult(
+ ContactListFilterController.getInstance(getActivity()), resultCode, data);
+ } else {
+ Log.e(TAG, "getActivity() returns null during Fragment#onActivityResult()");
+ }
+ }
+ }
+
private boolean loadContactsPreferences() {
if (mContactsPrefs == null || mAllContactsAdapter == null) {
return false;
@@ -410,27 +415,12 @@
}
private void updateFilterHeaderView() {
- if (mAccountFilterHeaderContainer == null || mAllContactsAdapter == null) {
+ final ContactListFilter filter = getFilter();
+ if (mAccountFilterHeader == null || mAllContactsAdapter == null || filter == null) {
return;
}
-
- final ContactListFilter filter = getFilter();
- if (mAllContactsAdapter.isLoading()) {
- mAccountFilterHeaderView.setText(R.string.contact_list_loading);
- } else if (filter != null) {
- if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
- mAccountFilterHeaderView.setText(R.string.list_filter_phones);
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
- mAccountFilterHeaderView.setText(getString(
- R.string.listAllContactsInAccount, filter.accountName));
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
- mAccountFilterHeaderView.setText(R.string.listCustomView);
- } else {
- Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
- }
- } else {
- Log.w(TAG, "Filter is null.");
- }
+ AccountFilterUtil.updateAccountFilterTitleForPhone(
+ mAccountFilterHeader, filter, mAllContactsAdapter.isLoading(), true);
}
public ContactListFilter getFilter() {
@@ -448,10 +438,6 @@
}
mFilter = filter;
- if (mPrefs != null) {
- // Save the preference now.
- ContactListFilter.storeToPreferences(mPrefs, mFilter);
- }
if (mAllContactsAdapter != null) {
mAllContactsAdapter.setFilter(mFilter);
diff --git a/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java b/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java
index cca818e..205e156 100644
--- a/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java
+++ b/src/com/android/contacts/list/PhoneFavoriteMergedAdapter.java
@@ -163,9 +163,8 @@
final int localPosition = position - contactTileAdapterCount - 1;
final ContactListItemView itemView = (ContactListItemView)
mContactEntryListAdapter.getView(localPosition, convertView, null);
- // We cannot simply use setPadding() because of ContactListItemView's restriction.
- // See comments for setExtraPaddingPadding().
- itemView.setExtraPadding(mItemPaddingLeft, mItemPaddingRight);
+ itemView.setPadding(mItemPaddingLeft, itemView.getPaddingTop(),
+ mItemPaddingRight, itemView.getPaddingBottom());
itemView.setSelectionBoundsHorizontalMargin(mItemPaddingLeft, mItemPaddingRight);
return itemView;
}
@@ -185,7 +184,8 @@
if (position < contactTileAdapterCount) {
return mContactTileAdapter.isEnabled(position);
} else if (position == contactTileAdapterCount) {
- return mAccountFilterHeaderContainer.isEnabled();
+ // This will be handled by View's onClick event instead of ListView's onItemClick event.
+ return false;
} else {
final int localPosition = position - contactTileAdapterCount - 1;
return mContactEntryListAdapter.isEnabled(localPosition);
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
index dd53b4b..052c32f 100644
--- a/src/com/android/contacts/list/PhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -17,20 +17,17 @@
import com.android.contacts.R;
import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
+import com.android.contacts.util.AccountFilterUtil;
-import android.app.Activity;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import android.widget.TextView;
/**
* Fragment containing a phone number list for picking.
@@ -39,16 +36,16 @@
implements OnShortcutIntentCreatedListener {
private static final String TAG = PhoneNumberPickerFragment.class.getSimpleName();
+ private static final int REQUEST_CODE_ACCOUNT_FILTER = 1;
+
private OnPhoneNumberPickerActionListener mListener;
private String mShortcutAction;
- private SharedPreferences mPrefs;
private ContactListFilter mFilter;
- private TextView mAccountFilterHeaderView;
- private View mAccountFilterHeaderContainer;
+ private View mAccountFilterHeader;
/**
- * Lives as ListView's header and is shown when {@link #mAccountFilterHeaderContainer} is set
+ * Lives as ListView's header and is shown when {@link #mAccountFilterHeader} is set
* to View.GONE.
*/
private View mPaddingView;
@@ -61,17 +58,11 @@
private ContactListItemView.PhotoPosition mPhotoPosition =
ContactListItemView.DEFAULT_PHOTO_POSITION;
- // A complete copy from DefaultContactBrowserListFragment
- // TODO: should be able to share logic around filter header.
private class FilterHeaderClickListener implements OnClickListener {
@Override
public void onClick(View view) {
- final Activity activity = getActivity();
- if (activity != null) {
- final Intent intent = new Intent(activity, AccountFilterActivity.class);
- activity.startActivityForResult(
- intent, AccountFilterActivity.DEFAULT_REQUEST_CODE);
- }
+ AccountFilterUtil.startAccountFilterActivityForResult(
+ PhoneNumberPickerFragment.this, REQUEST_CODE_ACCOUNT_FILTER);
}
}
private OnClickListener mFilterHeaderClickListener = new FilterHeaderClickListener();
@@ -99,58 +90,31 @@
mPaddingView = paddingView.findViewById(R.id.contact_detail_list_padding);
getListView().addHeaderView(paddingView);
- mAccountFilterHeaderView = (TextView) getView().findViewById(R.id.account_filter_header);
- mAccountFilterHeaderContainer =
- getView().findViewById(R.id.account_filter_header_container);
- mAccountFilterHeaderContainer.setOnClickListener(mFilterHeaderClickListener);
+ mAccountFilterHeader = getView().findViewById(R.id.account_filter_header_container);
+ mAccountFilterHeader.setOnClickListener(mFilterHeaderClickListener);
updateFilterHeaderView();
}
@Override
- public void setSearchMode(boolean flag) {
+ protected void setSearchMode(boolean flag) {
super.setSearchMode(flag);
updateFilterHeaderView();
}
private void updateFilterHeaderView() {
- if (mAccountFilterHeaderView != null) {
- ContactListFilter filter = getFilter();
- if (filter != null && !isSearchMode()) {
- if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
- mAccountFilterHeaderContainer.setVisibility(View.VISIBLE);
- mAccountFilterHeaderView.setText(getContext().getString(
- R.string.listSingleContact));
- mPaddingView.setVisibility(View.GONE);
- return;
- } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
- mAccountFilterHeaderContainer.setVisibility(View.VISIBLE);
- mAccountFilterHeaderView.setText(getContext().getString(
- R.string.listCustomView));
- mPaddingView.setVisibility(View.GONE);
- return;
- } else if (filter.filterType != ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
- mAccountFilterHeaderContainer.setVisibility(View.VISIBLE);
- mAccountFilterHeaderView.setText(getContext().getString(
- R.string.listAllContactsInAccount, filter.accountName));
- mPaddingView.setVisibility(View.GONE);
- return;
- }
- }
- mAccountFilterHeaderContainer.setVisibility(View.GONE);
- mPaddingView.setVisibility(View.VISIBLE);
+ final ContactListFilter filter = getFilter();
+ if (mAccountFilterHeader == null || filter == null) {
+ return;
}
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mPrefs = PreferenceManager.getDefaultSharedPreferences(activity);
- }
-
- @Override
- public void onDetach() {
- super.onDetach();
- mPrefs = null;
+ final boolean shouldShowHeader = AccountFilterUtil.updateAccountFilterTitleForPhone(
+ mAccountFilterHeader, filter, false, false);
+ if (shouldShowHeader) {
+ mPaddingView.setVisibility(View.GONE);
+ mAccountFilterHeader.setVisibility(View.VISIBLE);
+ } else {
+ mPaddingView.setVisibility(View.VISIBLE);
+ mAccountFilterHeader.setVisibility(View.GONE);
+ }
}
@Override
@@ -248,7 +212,7 @@
@Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
- return inflater.inflate(R.layout.contacts_list_content, null);
+ return inflater.inflate(R.layout.contact_list_content, null);
}
public void pickPhoneNumber(Uri uri) {
@@ -272,6 +236,18 @@
mListener.onPickPhoneNumberAction(data.getData());
}
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_CODE_ACCOUNT_FILTER) {
+ if (getActivity() != null) {
+ AccountFilterUtil.handleAccountFilterResult(
+ ContactListFilterController.getInstance(getActivity()), resultCode, data);
+ } else {
+ Log.e(TAG, "getActivity() returns null during Fragment#onActivityResult()");
+ }
+ }
+ }
+
public ContactListFilter getFilter() {
return mFilter;
}
@@ -283,13 +259,6 @@
}
mFilter = filter;
- if (mPrefs != null) {
- // Save the preference now.
- ContactListFilter.storeToPreferences(mPrefs, mFilter);
- }
-
- // This method can be called before {@link #onStart} where we start the loader. In that
- // case we shouldn't start the loader yet, as we haven't done all initialization yet.
if (mLoaderStarted) {
reloadData();
}
diff --git a/src/com/android/contacts/list/PostalAddressPickerFragment.java b/src/com/android/contacts/list/PostalAddressPickerFragment.java
index 5f7ca56..85fc155 100644
--- a/src/com/android/contacts/list/PostalAddressPickerFragment.java
+++ b/src/com/android/contacts/list/PostalAddressPickerFragment.java
@@ -70,7 +70,7 @@
@Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
- return inflater.inflate(R.layout.contacts_list_content, null);
+ return inflater.inflate(R.layout.contact_list_content, null);
}
private void pickPostalAddress(Uri uri) {
diff --git a/src/com/android/contacts/model/AccountType.java b/src/com/android/contacts/model/AccountType.java
index 7871dbb..23d39d3 100644
--- a/src/com/android/contacts/model/AccountType.java
+++ b/src/com/android/contacts/model/AccountType.java
@@ -82,6 +82,38 @@
*/
private HashMap<String, DataKind> mMimeKinds = Maps.newHashMap();
+ protected boolean mIsInitialized;
+
+ protected static class DefinitionException extends Exception {
+ public DefinitionException(String message) {
+ super(message);
+ }
+
+ public DefinitionException(String message, Exception inner) {
+ super(message, inner);
+ }
+ }
+
+ /**
+ * Whether this account type was able to be fully initialized. This may be false if
+ * (for example) the package name associated with the account type could not be found.
+ */
+ public final boolean isInitialized() {
+ return mIsInitialized;
+ }
+
+ /**
+ * @return Whether this type is an "embedded" type. i.e. any of {@link FallbackAccountType},
+ * {@link GoogleAccountType} or {@link ExternalAccountType}.
+ *
+ * If an embedded type cannot be initialized (i.e. if {@link #isInitialized()} returns
+ * {@code false}) it's considered critical, and the application will crash. On the other
+ * hand if it's not an embedded type, we just skip loading the type.
+ */
+ public boolean isEmbedded() {
+ return true;
+ }
+
public boolean isExtension() {
return false;
}
@@ -234,10 +266,6 @@
*/
abstract public boolean isGroupMembershipEditable();
- abstract public int getHeaderColor(Context context);
-
- abstract public int getSideBarColor(Context context);
-
/**
* {@link Comparator} to sort by {@link DataKind#weight}.
*/
@@ -269,7 +297,12 @@
/**
* Add given {@link DataKind} to list of those provided by this source.
*/
- public DataKind addKind(DataKind kind) {
+ public DataKind addKind(DataKind kind) throws DefinitionException {
+ if (mMimeKinds.get(kind.mimeType) != null) {
+ throw new DefinitionException(
+ "mime type '" + kind.mimeType + "' is already registered");
+ }
+
kind.resPackageName = this.resPackageName;
this.mKinds.add(kind);
this.mMimeKinds.put(kind.mimeType, kind);
@@ -327,6 +360,16 @@
public int hashCode() {
return rawValue;
}
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName()
+ + " rawValue=" + rawValue
+ + " labelRes=" + labelRes
+ + " secondary=" + secondary
+ + " specificMax=" + specificMax
+ + " customColumn=" + customColumn;
+ }
}
public static class EventEditType extends EditType {
@@ -344,6 +387,11 @@
mYearOptional = yearOptional;
return this;
}
+
+ @Override
+ public String toString() {
+ return super.toString() + " mYearOptional=" + mYearOptional;
+ }
}
/**
@@ -351,7 +399,7 @@
* {@link Phone#NUMBER}. Includes flags to apply to an {@link EditText}, and
* the column where this field is stored.
*/
- public static class EditField {
+ public static final class EditField {
public String column;
public int titleRes;
public int inputType;
@@ -393,6 +441,19 @@
public boolean isMultiLine() {
return (inputType & EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) != 0;
}
+
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName() + ":"
+ + " column=" + column
+ + " titleRes=" + titleRes
+ + " inputType=" + inputType
+ + " minLines=" + minLines
+ + " optional=" + optional
+ + " shortForm=" + shortForm
+ + " longForm=" + longForm;
+ }
}
/**
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
index 6a438c6..43bb579 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -17,6 +17,7 @@
package com.android.contacts.model;
import com.android.contacts.ContactsUtils;
+import com.android.contacts.list.ContactListFilterController;
import com.android.contacts.util.Constants;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
import com.android.internal.util.Objects;
@@ -43,6 +44,7 @@
import android.os.AsyncTask;
import android.os.Handler;
import android.os.HandlerThread;
+import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -137,12 +139,25 @@
return type == null ? null : type.getKindForMimetype(mimeType);
}
- /*
+ /**
* Returns all registered {@link AccountType}s, including extension ones.
*
* @param contactWritableOnly if true, it only returns ones that support writing contacts.
*/
public abstract List<AccountType> getAccountTypes(boolean contactWritableOnly);
+
+ /**
+ * @param contactWritableOnly if true, it only returns ones that support writing contacts.
+ * @return true when this instance contains the given account.
+ */
+ public boolean contains(AccountWithDataSet account, boolean contactWritableOnly) {
+ for (AccountWithDataSet account_2 : getAccounts(false)) {
+ if (account.equals(account_2)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
class AccountTypeManagerImpl extends AccountTypeManager
@@ -193,6 +208,14 @@
private HandlerThread mListenerThread;
private Handler mListenerHandler;
+ private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
+ private final Runnable mCheckFilterValidityRunnable = new Runnable () {
+ @Override
+ public void run() {
+ ContactListFilterController.getInstance(mContext).checkFilterValidity();
+ }
+ };
+
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
@@ -388,7 +411,12 @@
Log.d(TAG, "Registering external account type=" + type
+ ", packageName=" + auth.packageName);
accountType = new ExternalAccountType(mContext, auth.packageName, false);
- if (!((ExternalAccountType) accountType).isInitialized()) {
+ }
+ if (!accountType.isInitialized()) {
+ if (accountType.isEmbedded()) {
+ throw new IllegalStateException("Problem initializing embedded type "
+ + accountType.getClass().getCanonicalName());
+ } else {
// Skip external account types that couldn't be initialized.
continue;
}
@@ -498,6 +526,10 @@
if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
Log.d(Constants.PERFORMANCE_TAG, "AccountTypeManager.loadAccountsInBackground finish");
}
+
+ // Check filter validity since filter may become obsolete after account update. It must be
+ // done from UI thread.
+ mMainThreadHandler.post(mCheckFilterValidityRunnable);
}
// Bookkeeping method for tracking the known account types in the given maps.
diff --git a/src/com/android/contacts/model/BaseAccountType.java b/src/com/android/contacts/model/BaseAccountType.java
index a685dee..0d766da 100644
--- a/src/com/android/contacts/model/BaseAccountType.java
+++ b/src/com/android/contacts/model/BaseAccountType.java
@@ -17,7 +17,13 @@
package com.android.contacts.model;
import com.android.contacts.R;
+import com.android.contacts.model.AccountType.DefinitionException;
+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;
@@ -38,9 +44,18 @@
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.util.AttributeSet;
+import android.util.Log;
import android.view.inputmethod.EditorInfo;
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
public abstract class BaseAccountType extends AccountType {
+ private static final String TAG = "BaseAccountType";
+
protected static final int FLAGS_PHONE = EditorInfo.TYPE_CLASS_PHONE;
protected static final int FLAGS_EMAIL = EditorInfo.TYPE_CLASS_TEXT
| EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
@@ -61,6 +76,37 @@
protected static final int FLAGS_SIP_ADDRESS = EditorInfo.TYPE_CLASS_TEXT
| EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS; // since SIP addresses have the same
// basic format as email addresses
+ protected static final int FLAGS_RELATION = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
+
+ private interface Tag {
+ static final String DATA_KIND = "DataKind";
+ static final String TYPE = "Type";
+ }
+
+ private interface Attr {
+ static final String MAX_OCCURRENCE = "maxOccurs";
+ static final String DATE_WITH_TIME = "dateWithTime";
+ static final String YEAR_OPTIONAL = "yearOptional";
+ static final String KIND = "kind";
+ static final String TYPE = "type";
+ }
+
+ private interface Weight {
+ static final int NONE = -1;
+ static final int ORGANIZATION = 5;
+ static final int PHONE = 10;
+ static final int EMAIL = 15;
+ static final int IM = 20;
+ static final int STRUCTURED_POSTAL = 25;
+ static final int NOTE = 110;
+ static final int NICKNAME = 115;
+ static final int WEBSITE = 120;
+ static final int SIP_ADDRESS = 130;
+ static final int EVENT = 150;
+ static final int RELATIONSHIP = 160;
+ static final int GROUP_MEMBERSHIP = 999;
+ }
public BaseAccountType() {
this.accountType = null;
@@ -69,35 +115,36 @@
this.iconRes = R.mipmap.ic_launcher_contacts;
}
- protected EditType buildPhoneType(int type) {
+ protected static EditType buildPhoneType(int type) {
return new EditType(type, Phone.getTypeLabelResource(type));
}
- protected EditType buildEmailType(int type) {
+ protected static EditType buildEmailType(int type) {
return new EditType(type, Email.getTypeLabelResource(type));
}
- protected EditType buildPostalType(int type) {
+ protected static EditType buildPostalType(int type) {
return new EditType(type, StructuredPostal.getTypeLabelResource(type));
}
- protected EditType buildImType(int type) {
+ protected static EditType buildImType(int type) {
return new EditType(type, Im.getProtocolLabelResource(type));
}
- protected EditType buildEventType(int type, boolean yearOptional) {
+ protected static EditType buildEventType(int type, boolean yearOptional) {
return new EventEditType(type, Event.getTypeResource(type)).setYearOptional(yearOptional);
}
- protected EditType buildRelationType(int type) {
+ protected static EditType buildRelationType(int type) {
return new EditType(type, Relation.getTypeLabelResource(type));
}
- protected DataKind addDataKindStructuredName(Context context) {
+ protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
R.string.nameLabelsGroup, -1, true, R.layout.structured_name_editor_view));
kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(StructuredName.DISPLAY_NAME,
@@ -122,11 +169,12 @@
return kind;
}
- protected DataKind addDataKindDisplayName(Context context) {
+ protected DataKind addDataKindDisplayName(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME,
R.string.nameLabelsGroup, -1, true, R.layout.text_fields_editor_view));
kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(StructuredName.DISPLAY_NAME,
@@ -162,11 +210,12 @@
return kind;
}
- protected DataKind addDataKindPhoneticName(Context context) {
+ protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
R.string.name_phonetic, -1, true, R.layout.phonetic_name_editor_view));
kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
@@ -181,7 +230,7 @@
return kind;
}
- protected DataKind addDataKindNickname(Context context) {
+ protected DataKind addDataKindNickname(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Nickname.CONTENT_ITEM_TYPE,
R.string.nicknameLabelsGroup, 115, true, R.layout.text_fields_editor_view));
kind.typeOverallMax = 1;
@@ -197,7 +246,7 @@
return kind;
}
- protected DataKind addDataKindPhone(Context context) {
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Phone.CONTENT_ITEM_TYPE, R.string.phoneLabelsGroup,
10, true, R.layout.text_fields_editor_view));
kind.iconAltRes = R.drawable.ic_text_holo_light;
@@ -207,8 +256,8 @@
kind.actionBody = new SimpleInflater(Phone.NUMBER);
kind.typeColumn = Phone.TYPE;
kind.typeList = Lists.newArrayList();
- kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
@@ -227,8 +276,7 @@
kind.typeList.add(buildPhoneType(Phone.TYPE_TTY_TDD).setSecondary(true));
kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_MOBILE).setSecondary(true));
kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_PAGER).setSecondary(true));
- kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true).setCustomColumn(
- Phone.LABEL));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true));
kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true));
kind.fieldList = Lists.newArrayList();
@@ -237,7 +285,7 @@
return kind;
}
- protected DataKind addDataKindEmail(Context context) {
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Email.CONTENT_ITEM_TYPE, R.string.emailLabelsGroup,
15, true, R.layout.text_fields_editor_view));
kind.actionHeader = new EmailActionInflater();
@@ -257,7 +305,7 @@
return kind;
}
- protected DataKind addDataKindStructuredPostal(Context context) {
+ protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(StructuredPostal.CONTENT_ITEM_TYPE,
R.string.postalLabelsGroup, 25, true, R.layout.text_fields_editor_view));
kind.actionHeader = new PostalActionInflater();
@@ -278,7 +326,7 @@
return kind;
}
- protected DataKind addDataKindIm(Context context) {
+ protected DataKind addDataKindIm(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Im.CONTENT_ITEM_TYPE, R.string.imLabelsGroup, 20, true,
R.layout.text_fields_editor_view));
kind.actionHeader = new ImActionInflater();
@@ -309,7 +357,7 @@
return kind;
}
- protected DataKind addDataKindOrganization(Context context) {
+ protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Organization.CONTENT_ITEM_TYPE,
R.string.organizationLabelsGroup, 5, true,
R.layout.text_fields_editor_view));
@@ -326,14 +374,15 @@
return kind;
}
- protected DataKind addDataKindPhoto(Context context) {
+ protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Photo.CONTENT_ITEM_TYPE, -1, -1, true, -1));
+ kind.typeOverallMax = 1;
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
return kind;
}
- protected DataKind addDataKindNote(Context context) {
+ protected DataKind addDataKindNote(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Note.CONTENT_ITEM_TYPE,
R.string.label_notes, 110, true, R.layout.text_fields_editor_view));
kind.typeOverallMax = 1;
@@ -345,7 +394,7 @@
return kind;
}
- protected DataKind addDataKindWebsite(Context context) {
+ protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Website.CONTENT_ITEM_TYPE,
R.string.websiteLabelsGroup, 120, true, R.layout.text_fields_editor_view));
kind.actionHeader = new SimpleInflater(R.string.websiteLabelsGroup);
@@ -359,15 +408,7 @@
return kind;
}
- protected DataKind addDataKindSipAddress(Context context) {
- // The icon specified here is the one that gets displayed for
- // "Internet call" items, in the "view contact" UI within the
- // Contacts app.
- //
- // This is independent of the "SIP call" icon that gets
- // displayed in the Quick Contacts widget, which comes from
- // the android:icon attribute of the SIP-related
- // intent-filters in the Phone app's manifest.
+ protected DataKind addDataKindSipAddress(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(SipAddress.CONTENT_ITEM_TYPE,
R.string.label_sip_address, 130, true, R.layout.text_fields_editor_view));
@@ -381,9 +422,8 @@
return kind;
}
- protected DataKind addDataKindGroupMembership(Context context) {
- DataKind kind = getKindForMimetype(GroupMembership.CONTENT_ITEM_TYPE);
- kind = addKind(new DataKind(GroupMembership.CONTENT_ITEM_TYPE,
+ protected DataKind addDataKindGroupMembership(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(GroupMembership.CONTENT_ITEM_TYPE,
R.string.groupsLabel, 999, true, -1));
kind.typeOverallMax = 1;
@@ -450,6 +490,13 @@
return null;
}
}
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName()
+ + " mStringRes=" + mStringRes
+ + " mColumnName" + mColumnName;
+ }
}
public static abstract class CommonInflater implements StringInflater {
@@ -489,6 +536,11 @@
final String label = values.getAsString(getLabelColumn());
return getTypeLabel(context.getResources(), type, label);
}
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
}
public static class PhoneActionInflater extends CommonInflater {
@@ -632,17 +684,849 @@
}
@Override
- public int getHeaderColor(Context context) {
- return 0xff7f93bc;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0xffbdc7b8;
- }
-
- @Override
public boolean isGroupMembershipEditable() {
return false;
}
+
+ /**
+ * Parses the content of the EditSchema tag in contacts.xml.
+ */
+ protected final void parseEditSchema(Context context, XmlPullParser parser, AttributeSet attrs)
+ throws XmlPullParserException, IOException, DefinitionException {
+
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ final int depth = parser.getDepth();
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT
+ || depth != outerDepth + 1) {
+ continue; // Not direct child tag
+ }
+
+ final String tag = parser.getName();
+
+ if (Tag.DATA_KIND.equals(tag)) {
+ for (DataKind kind : KindParser.INSTANCE.parseDataKindTag(context, parser, attrs)) {
+ addKind(kind);
+ }
+ } else {
+ Log.w(TAG, "Skipping unknown tag " + tag);
+ }
+ }
+ }
+
+ // Utility methods to keep code shorter.
+ private static boolean getAttr(AttributeSet attrs, String attribute, boolean defaultValue) {
+ return attrs.getAttributeBooleanValue(null, attribute, defaultValue);
+ }
+
+ private static int getAttr(AttributeSet attrs, String attribute, int defaultValue) {
+ return attrs.getAttributeIntValue(null, attribute, defaultValue);
+ }
+
+ private static String getAttr(AttributeSet attrs, String attribute) {
+ return attrs.getAttributeValue(null, attribute);
+ }
+
+ // TODO Extract it to its own class, and move all KindBuilders to it as well.
+ private static class KindParser {
+ public static final KindParser INSTANCE = new KindParser();
+
+ private final Map<String, KindBuilder> mBuilders = Maps.newHashMap();
+
+ private KindParser() {
+ addBuilder(new NameKindBuilder());
+ addBuilder(new NicknameKindBuilder());
+ addBuilder(new PhoneKindBuilder());
+ addBuilder(new EmailKindBuilder());
+ addBuilder(new StructuredPostalKindBuilder());
+ addBuilder(new ImKindBuilder());
+ addBuilder(new OrganizationKindBuilder());
+ addBuilder(new PhotoKindBuilder());
+ addBuilder(new NoteKindBuilder());
+ addBuilder(new WebsiteKindBuilder());
+ addBuilder(new SipAddressKindBuilder());
+ addBuilder(new GroupMembershipKindBuilder());
+ addBuilder(new EventKindBuilder());
+ addBuilder(new RelationshipKindBuilder());
+ }
+
+ private void addBuilder(KindBuilder builder) {
+ mBuilders.put(builder.getTagName(), builder);
+ }
+
+ /**
+ * Takes a {@link XmlPullParser} at the start of a DataKind tag, parses it and returns
+ * {@link DataKind}s. (Usually just one, but there are three for the "name" kind.)
+ *
+ * This method returns a list, because we need to add 3 kinds for the name data kind.
+ * (structured, display and phonetic)
+ */
+ public List<DataKind> parseDataKindTag(Context context, XmlPullParser parser,
+ AttributeSet attrs)
+ throws DefinitionException, XmlPullParserException, IOException {
+ final String kind = getAttr(attrs, Attr.KIND);
+ final KindBuilder builder = mBuilders.get(kind);
+ if (builder != null) {
+ return builder.parseDataKind(context, parser, attrs);
+ } else {
+ throw new DefinitionException("Undefined data kind '" + kind + "'");
+ }
+ }
+ }
+
+ private static abstract class KindBuilder {
+
+ public abstract String getTagName();
+
+ /**
+ * DataKind tag parser specific to each kind. Subclasses must implement it.
+ */
+ public abstract List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException, IOException;
+
+ /**
+ * Creates a new {@link DataKind}, and also parses the child Type tags in the DataKind
+ * tag.
+ */
+ protected final DataKind newDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs, boolean isPseudo, String mimeType, String typeColumn,
+ int titleRes, int weight, int editorLayoutResourceId,
+ StringInflater actionHeader, StringInflater actionBody)
+ throws DefinitionException, XmlPullParserException, IOException {
+
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Adding DataKind: " + mimeType);
+ }
+
+ final DataKind kind = new DataKind(mimeType, titleRes, weight, true,
+ editorLayoutResourceId);
+ kind.typeColumn = typeColumn;
+ kind.actionHeader = actionHeader;
+ kind.actionBody = actionBody;
+ kind.fieldList = Lists.newArrayList();
+
+ // Get more information from the tag...
+ // A pseudo data kind doesn't have corresponding tag the XML, so we skip this.
+ if (!isPseudo) {
+ kind.typeOverallMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
+
+ // Process "Type" tags.
+ // If a kind has the type column, contacts.xml must have at least one type
+ // definition. Otherwise, it mustn't have a type definition.
+ if (kind.typeColumn != null) {
+ // Parse and add types.
+ kind.typeList = Lists.newArrayList();
+ parseTypes(context, parser, attrs, kind, true);
+ if (kind.typeList.size() == 0) {
+ throw new DefinitionException(
+ "Kind " + kind.mimeType + " must have at least one type");
+ }
+ } else {
+ // Make sure it has no types.
+ parseTypes(context, parser, attrs, kind, false /* can't have types */);
+ }
+ }
+
+ return kind;
+ }
+
+ /**
+ * Parses Type elements in a DataKind element, and if {@code canHaveTypes} is true adds
+ * them to the given {@link DataKind}. Otherwise the {@link DataKind} can't have a type,
+ * so throws {@link DefinitionException}.
+ */
+ private void parseTypes(Context context, XmlPullParser parser, AttributeSet attrs,
+ DataKind kind, boolean canHaveTypes)
+ throws DefinitionException, XmlPullParserException, IOException {
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ final int depth = parser.getDepth();
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT
+ || depth != outerDepth + 1) {
+ continue; // Not direct child tag
+ }
+
+ final String tag = parser.getName();
+ if (Tag.TYPE.equals(tag)) {
+ if (canHaveTypes) {
+ kind.typeList.add(parseTypeTag(parser, attrs, kind));
+ } else {
+ throw new DefinitionException(
+ "Kind " + kind.mimeType + " can't have types");
+ }
+ } else {
+ throw new DefinitionException("Unknown tag: " + tag);
+ }
+ }
+ }
+
+ /**
+ * Parses a single Type element and returns an {@link EditType} built from it. Uses
+ * {@link #buildEditTypeForTypeTag} defined in subclasses to actually build an
+ * {@link EditType}.
+ */
+ private EditType parseTypeTag(XmlPullParser parser, AttributeSet attrs, DataKind kind)
+ throws DefinitionException {
+
+ final String typeName = getAttr(attrs, Attr.TYPE);
+
+ final EditType et = buildEditTypeForTypeTag(attrs, typeName);
+ if (et == null) {
+ throw new DefinitionException(
+ "Undefined type '" + typeName + "' for data kind '" + kind.mimeType + "'");
+ }
+ et.specificMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
+
+ return et;
+ }
+
+ /**
+ * Returns an {@link EditType} for the given "type". Subclasses may optionally use
+ * the attributes in the tag to set optional values.
+ * (e.g. "yearOptional" for the event kind)
+ */
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ return null;
+ }
+
+ protected final void throwIfList(DataKind kind) throws DefinitionException {
+ if (kind.typeOverallMax != 1) {
+ throw new DefinitionException(
+ "Kind " + kind.mimeType + " must have 'overallMax=\"1\"'");
+ }
+ }
+ }
+
+ /**
+ * DataKind parser for Name. (structured, display, phonetic)
+ */
+ private static class NameKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "name";
+ }
+
+ private static void checkAttributeTrue(boolean value, String attrName)
+ throws DefinitionException {
+ if (!value) {
+ throw new DefinitionException(attrName + "must be true");
+ }
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+
+ // Build 3 data kinds:
+ // - StructuredName.CONTENT_ITEM_TYPE
+ // - DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME
+ // - DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME
+
+ final boolean displayOrderPrimary =
+ context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
+ final boolean supportsDisplayName = getAttr(attrs, "supportsDisplayName", true);
+ final boolean supportsPrefix = getAttr(attrs, "supportsPrefix", true);
+ final boolean supportsMiddleName = getAttr(attrs, "supportsMiddleName", true);
+ final boolean supportsSuffix = getAttr(attrs, "supportsSuffix", true);
+ final boolean supportsPhoneticFamilyName =
+ getAttr(attrs, "supportsPhoneticFamilyName", true);
+ final boolean supportsPhoneticMiddleName =
+ getAttr(attrs, "supportsPhoneticMiddleName", true);
+ final boolean supportsPhoneticGivenName =
+ getAttr(attrs, "supportsPhoneticGivenName", true);
+
+ // For now, every things must be supported.
+ checkAttributeTrue(supportsDisplayName, "supportsDisplayName");
+ checkAttributeTrue(supportsPrefix, "supportsPrefix");
+ checkAttributeTrue(supportsMiddleName, "supportsMiddleName");
+ checkAttributeTrue(supportsSuffix, "supportsSuffix");
+ checkAttributeTrue(supportsPhoneticFamilyName, "supportsPhoneticFamilyName");
+ checkAttributeTrue(supportsPhoneticMiddleName, "supportsPhoneticMiddleName");
+ checkAttributeTrue(supportsPhoneticGivenName, "supportsPhoneticGivenName");
+
+ final List<DataKind> kinds = Lists.newArrayList();
+
+ // Structured name
+ final DataKind ks = newDataKind(context, parser, attrs, false,
+ StructuredName.CONTENT_ITEM_TYPE, null, R.string.nameLabelsGroup, Weight.NONE,
+ R.layout.structured_name_editor_view,
+ new SimpleInflater(R.string.nameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+
+ throwIfList(ks);
+ kinds.add(ks);
+
+ // Note about setLongForm/setShortForm below.
+ // We need to set this only when the type supports display name. (=supportsDisplayName)
+ // Otherwise (i.e. Exchange) we don't set these flags, but instead make some fields
+ // "optional".
+
+ ks.fieldList.add(new EditField(StructuredName.DISPLAY_NAME, R.string.full_name,
+ FLAGS_PERSON_NAME));
+ ks.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC));
+ ks.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC));
+ ks.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+ // Display name
+ final DataKind kd = newDataKind(context, parser, attrs, true,
+ DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME, null,
+ R.string.nameLabelsGroup, Weight.NONE, R.layout.text_fields_editor_view,
+ new SimpleInflater(R.string.nameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+ kd.typeOverallMax = 1;
+ kinds.add(kd);
+
+ kd.fieldList.add(new EditField(StructuredName.DISPLAY_NAME,
+ R.string.full_name, FLAGS_PERSON_NAME).setShortForm(true));
+
+ if (!displayOrderPrimary) {
+ kd.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ } else {
+ kd.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kd.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ }
+
+ // Phonetic name
+ final DataKind kp = newDataKind(context, parser, attrs, true,
+ DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME, null,
+ R.string.name_phonetic, Weight.NONE, R.layout.phonetic_name_editor_view,
+ new SimpleInflater(R.string.nameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+ kp.typeOverallMax = 1;
+ kinds.add(kp);
+
+ // We may want to change the order depending on displayOrderPrimary too.
+ kp.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
+ R.string.name_phonetic, FLAGS_PHONETIC).setShortForm(true));
+ kp.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
+ kp.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
+ kp.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
+ return kinds;
+ }
+ }
+
+ private static class NicknameKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "nickname";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Nickname.CONTENT_ITEM_TYPE, null, R.string.nicknameLabelsGroup, Weight.NICKNAME,
+ R.layout.text_fields_editor_view,
+ new SimpleInflater(R.string.nicknameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+
+ kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
+ FLAGS_PERSON_NAME));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
+
+ throwIfList(kind);
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class PhoneKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "phone";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Phone.CONTENT_ITEM_TYPE, Phone.TYPE, R.string.phoneLabelsGroup, Weight.PHONE,
+ R.layout.text_fields_editor_view,
+ new PhoneActionInflater(), new SimpleInflater(Phone.NUMBER));
+
+ kind.iconAltRes = R.drawable.ic_text_holo_light;
+ kind.iconAltDescriptionRes = R.string.sms;
+ kind.actionAltHeader = new PhoneActionAltInflater();
+
+ kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+ return Lists.newArrayList(kind);
+ }
+
+ /** Just to avoid line-wrapping... */
+ protected static EditType build(int type, boolean secondary) {
+ return new EditType(type, Phone.getTypeLabelResource(type)).setSecondary(secondary);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ if ("home".equals(type)) return build(Phone.TYPE_HOME, false);
+ if ("mobile".equals(type)) return build(Phone.TYPE_MOBILE, false);
+ if ("work".equals(type)) return build(Phone.TYPE_WORK, false);
+ if ("fax_work".equals(type)) return build(Phone.TYPE_FAX_WORK, true);
+ if ("fax_home".equals(type)) return build(Phone.TYPE_FAX_HOME, true);
+ if ("pager".equals(type)) return build(Phone.TYPE_PAGER, true);
+ if ("other".equals(type)) return build(Phone.TYPE_OTHER, false);
+ if ("callback".equals(type)) return build(Phone.TYPE_CALLBACK, true);
+ if ("car".equals(type)) return build(Phone.TYPE_CAR, true);
+ if ("company_main".equals(type)) return build(Phone.TYPE_COMPANY_MAIN, true);
+ if ("isdn".equals(type)) return build(Phone.TYPE_ISDN, true);
+ if ("main".equals(type)) return build(Phone.TYPE_MAIN, true);
+ if ("other_fax".equals(type)) return build(Phone.TYPE_OTHER_FAX, true);
+ if ("radio".equals(type)) return build(Phone.TYPE_RADIO, true);
+ if ("telex".equals(type)) return build(Phone.TYPE_TELEX, true);
+ if ("tty_tdd".equals(type)) return build(Phone.TYPE_TTY_TDD, true);
+ if ("work_mobile".equals(type)) return build(Phone.TYPE_WORK_MOBILE, true);
+ if ("work_pager".equals(type)) return build(Phone.TYPE_WORK_PAGER, true);
+
+ // Note "assistant" used to be a custom column for the fallback type, but not anymore.
+ if ("assistant".equals(type)) return build(Phone.TYPE_ASSISTANT, true);
+ if ("mms".equals(type)) return build(Phone.TYPE_MMS, true);
+ if ("custom".equals(type)) {
+ return build(Phone.TYPE_CUSTOM, true).setCustomColumn(Phone.LABEL);
+ }
+ return null;
+ }
+ }
+
+ private static class EmailKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "email";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Email.CONTENT_ITEM_TYPE, Email.TYPE, R.string.emailLabelsGroup, Weight.EMAIL,
+ R.layout.text_fields_editor_view,
+ new EmailActionInflater(), new SimpleInflater(Email.DATA));
+ kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ // EditType is mutable, so we need to create a new instance every time.
+ if ("home".equals(type)) return buildEmailType(Email.TYPE_HOME);
+ if ("work".equals(type)) return buildEmailType(Email.TYPE_WORK);
+ if ("other".equals(type)) return buildEmailType(Email.TYPE_OTHER);
+ if ("mobile".equals(type)) return buildEmailType(Email.TYPE_MOBILE);
+ if ("custom".equals(type)) {
+ return buildEmailType(Email.TYPE_CUSTOM)
+ .setSecondary(true).setCustomColumn(Email.LABEL);
+ }
+ return null;
+ }
+ }
+
+ private static class StructuredPostalKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "postal";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE,
+ R.string.postalLabelsGroup, Weight.STRUCTURED_POSTAL,
+ R.layout.text_fields_editor_view, new PostalActionInflater(),
+ new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS));
+
+ if (getAttr(attrs, "needsStructured", false)) {
+ if (Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage())) {
+ // Japanese order
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ } else {
+ // Generic order
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ }
+ } else {
+ kind.fieldList.add(
+ new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
+ FLAGS_POSTAL));
+ }
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ // EditType is mutable, so we need to create a new instance every time.
+ if ("home".equals(type)) return buildPostalType(StructuredPostal.TYPE_HOME);
+ if ("work".equals(type)) return buildPostalType(StructuredPostal.TYPE_WORK);
+ if ("other".equals(type)) return buildPostalType(StructuredPostal.TYPE_OTHER);
+ if ("custom".equals(type)) {
+ return buildPostalType(StructuredPostal.TYPE_CUSTOM)
+ .setSecondary(true).setCustomColumn(Email.LABEL);
+ }
+ return null;
+ }
+ }
+
+ private static class ImKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "im";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+
+ // IM is special:
+ // - It uses "protocol" as the custom label field
+ // - Its TYPE is fixed to TYPE_OTHER
+
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Im.CONTENT_ITEM_TYPE, Im.PROTOCOL, R.string.imLabelsGroup, Weight.IM,
+ R.layout.text_fields_editor_view,
+ new ImActionInflater(), new SimpleInflater(Im.DATA) // header / action
+ );
+ kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ if ("aim".equals(type)) return buildImType(Im.PROTOCOL_AIM);
+ if ("msn".equals(type)) return buildImType(Im.PROTOCOL_MSN);
+ if ("yahoo".equals(type)) return buildImType(Im.PROTOCOL_YAHOO);
+ if ("skype".equals(type)) return buildImType(Im.PROTOCOL_SKYPE);
+ if ("qq".equals(type)) return buildImType(Im.PROTOCOL_QQ);
+ if ("google_talk".equals(type)) return buildImType(Im.PROTOCOL_GOOGLE_TALK);
+ if ("icq".equals(type)) return buildImType(Im.PROTOCOL_ICQ);
+ if ("jabber".equals(type)) return buildImType(Im.PROTOCOL_JABBER);
+ if ("custom".equals(type)) {
+ return buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true)
+ .setCustomColumn(Im.CUSTOM_PROTOCOL);
+ }
+ return null;
+ }
+ }
+
+ private static class OrganizationKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "organization";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Organization.CONTENT_ITEM_TYPE, null, R.string.organizationLabelsGroup,
+ Weight.ORGANIZATION, R.layout.text_fields_editor_view ,
+ new SimpleInflater(Organization.COMPANY),
+ new SimpleInflater(Organization.TITLE));
+
+ kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+ FLAGS_GENERIC_NAME));
+ kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+ FLAGS_GENERIC_NAME));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class PhotoKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "photo";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Photo.CONTENT_ITEM_TYPE, null /* no type */, -1, Weight.NONE, -1,
+ null, null // no header, no body
+ );
+
+ kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class NoteKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "note";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Note.CONTENT_ITEM_TYPE, null, R.string.label_notes, Weight.NOTE,
+ R.layout.text_fields_editor_view,
+ new SimpleInflater(R.string.label_notes), new SimpleInflater(Note.NOTE));
+
+ kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class WebsiteKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "website";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Website.CONTENT_ITEM_TYPE, null, R.string.websiteLabelsGroup, Weight.WEBSITE,
+ R.layout.text_fields_editor_view,
+ new SimpleInflater(R.string.websiteLabelsGroup),
+ new SimpleInflater(Website.URL));
+
+ kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup,
+ FLAGS_WEBSITE));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class SipAddressKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "sip_address";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ SipAddress.CONTENT_ITEM_TYPE, null, R.string.label_sip_address,
+ Weight.SIP_ADDRESS, R.layout.text_fields_editor_view,
+ new SimpleInflater(R.string.label_sip_address),
+ new SimpleInflater(SipAddress.SIP_ADDRESS));
+
+ kind.fieldList.add(new EditField(SipAddress.SIP_ADDRESS,
+ R.string.label_sip_address, FLAGS_SIP_ADDRESS));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class GroupMembershipKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "group_membership";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ GroupMembership.CONTENT_ITEM_TYPE, null,
+ R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, -1, null, null);
+
+ kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ /**
+ * Event DataKind parser.
+ *
+ * Event DataKind is used only for Google/Exchange types, so this parser is not used for now.
+ */
+ private static class EventKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "event";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Event.CONTENT_ITEM_TYPE, Event.TYPE, R.string.eventLabelsGroup, Weight.EVENT,
+ R.layout.event_field_editor_view,
+ new EventActionInflater(), new SimpleInflater(Event.START_DATE));
+
+ kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+ if (getAttr(attrs, Attr.DATE_WITH_TIME, false)) {
+ kind.dateFormatWithoutYear = DateUtils.NO_YEAR_DATE_AND_TIME_FORMAT;
+ kind.dateFormatWithYear = DateUtils.DATE_AND_TIME_FORMAT;
+ } else {
+ kind.dateFormatWithoutYear = DateUtils.NO_YEAR_DATE_FORMAT;
+ kind.dateFormatWithYear = DateUtils.FULL_DATE_FORMAT;
+ }
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ final boolean yo = getAttr(attrs, Attr.YEAR_OPTIONAL, false);
+
+ if ("birthday".equals(type)) {
+ return buildEventType(Event.TYPE_BIRTHDAY, yo).setSpecificMax(1);
+ }
+ if ("anniversary".equals(type)) return buildEventType(Event.TYPE_ANNIVERSARY, yo);
+ if ("other".equals(type)) return buildEventType(Event.TYPE_OTHER, yo);
+ if ("custom".equals(type)) {
+ return buildEventType(Event.TYPE_CUSTOM, yo)
+ .setSecondary(true).setCustomColumn(Event.LABEL);
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Relationship DataKind parser.
+ *
+ * Relationship DataKind is used only for Google/Exchange types, so this parser is not used for
+ * now.
+ */
+ private static class RelationshipKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "relationship";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Relation.CONTENT_ITEM_TYPE, Relation.TYPE,
+ R.string.relationLabelsGroup, Weight.RELATIONSHIP,
+ R.layout.text_fields_editor_view,
+ new RelationActionInflater(), new SimpleInflater(Relation.NAME));
+
+ kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+ FLAGS_RELATION));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ // EditType is mutable, so we need to create a new instance every time.
+ if ("assistant".equals(type)) return buildRelationType(Relation.TYPE_ASSISTANT);
+ if ("brother".equals(type)) return buildRelationType(Relation.TYPE_BROTHER);
+ if ("child".equals(type)) return buildRelationType(Relation.TYPE_CHILD);
+ if ("domestic_partner".equals(type)) {
+ return buildRelationType(Relation.TYPE_DOMESTIC_PARTNER);
+ }
+ if ("father".equals(type)) return buildRelationType(Relation.TYPE_FATHER);
+ if ("friend".equals(type)) return buildRelationType(Relation.TYPE_FRIEND);
+ if ("manager".equals(type)) return buildRelationType(Relation.TYPE_MANAGER);
+ if ("mother".equals(type)) return buildRelationType(Relation.TYPE_MOTHER);
+ if ("parent".equals(type)) return buildRelationType(Relation.TYPE_PARENT);
+ if ("partner".equals(type)) return buildRelationType(Relation.TYPE_PARTNER);
+ if ("referred_by".equals(type)) return buildRelationType(Relation.TYPE_REFERRED_BY);
+ if ("relative".equals(type)) return buildRelationType(Relation.TYPE_RELATIVE);
+ if ("sister".equals(type)) return buildRelationType(Relation.TYPE_SISTER);
+ if ("spouse".equals(type)) return buildRelationType(Relation.TYPE_SPOUSE);
+ if ("custom".equals(type)) {
+ return buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Relation.LABEL);
+ }
+ return null;
+ }
+ }
}
diff --git a/src/com/android/contacts/model/DataKind.java b/src/com/android/contacts/model/DataKind.java
index 70f43ab..857f3e4 100644
--- a/src/com/android/contacts/model/DataKind.java
+++ b/src/com/android/contacts/model/DataKind.java
@@ -20,6 +20,7 @@
import com.android.contacts.model.AccountType.EditField;
import com.android.contacts.model.AccountType.EditType;
import com.android.contacts.model.AccountType.StringInflater;
+import com.google.common.collect.Iterators;
import android.content.ContentValues;
import android.provider.ContactsContract.Data;
@@ -33,7 +34,7 @@
* {@link Data} rows of this kind, including the possible {@link EditType}
* labels and editable {@link EditField}.
*/
-public class DataKind {
+public final class DataKind {
public static final String PSEUDO_MIME_TYPE_DISPLAY_NAME = "#displayName";
public static final String PSEUDO_MIME_TYPE_PHONETIC_NAME = "#phoneticName";
@@ -95,4 +96,43 @@
this.typeOverallMax = -1;
this.editorLayoutResourceId = editorLayoutResourceId;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DataKind:");
+ sb.append(" resPackageName=").append(resPackageName);
+ sb.append(" mimeType=").append(mimeType);
+ sb.append(" titleRes=").append(titleRes);
+ sb.append(" iconAltRes=").append(iconAltRes);
+ sb.append(" iconAltDescriptionRes=").append(iconAltDescriptionRes);
+ sb.append(" weight=").append(weight);
+ sb.append(" editable=").append(editable);
+ sb.append(" actionHeader=").append(actionHeader);
+ sb.append(" actionAltHeader=").append(actionAltHeader);
+ sb.append(" actionBody=").append(actionBody);
+ sb.append(" actionBodySocial=").append(actionBodySocial);
+ sb.append(" typeColumn=").append(typeColumn);
+ sb.append(" typeOverallMax=").append(typeOverallMax);
+ sb.append(" typeList=").append(toString(typeList));
+ sb.append(" fieldList=").append(toString(fieldList));
+ sb.append(" defaultValues=").append(defaultValues);
+ sb.append(" editorLayoutResourceId=").append(editorLayoutResourceId);
+ sb.append(" dateFormatWithoutYear=").append(toString(dateFormatWithoutYear));
+ sb.append(" dateFormatWithYear=").append(toString(dateFormatWithYear));
+
+ return sb.toString();
+ }
+
+ public static String toString(SimpleDateFormat format) {
+ return format == null ? "(null)" : format.toPattern();
+ }
+
+ public static String toString(Iterable<?> list) {
+ if (list == null) {
+ return "(null)";
+ } else {
+ return Iterators.toString(list.iterator());
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/android/contacts/model/ExchangeAccountType.java b/src/com/android/contacts/model/ExchangeAccountType.java
index c109fea..e5491d2 100644
--- a/src/com/android/contacts/model/ExchangeAccountType.java
+++ b/src/com/android/contacts/model/ExchangeAccountType.java
@@ -17,6 +17,7 @@
package com.android.contacts.model;
import com.android.contacts.R;
+import com.android.contacts.model.AccountType.DefinitionException;
import com.android.contacts.util.DateUtils;
import com.google.android.collect.Lists;
@@ -33,10 +34,12 @@
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.util.Log;
import java.util.Locale;
public class ExchangeAccountType extends BaseAccountType {
+ private static final String TAG = "ExchangeAccountType";
public static final String ACCOUNT_TYPE = "com.android.exchange";
@@ -45,24 +48,30 @@
this.resPackageName = null;
this.summaryResPackageName = resPackageName;
- addDataKindStructuredName(context);
- addDataKindDisplayName(context);
- addDataKindPhoneticName(context);
- addDataKindNickname(context);
- addDataKindPhone(context);
- addDataKindEmail(context);
- addDataKindStructuredPostal(context);
- addDataKindIm(context);
- addDataKindOrganization(context);
- addDataKindPhoto(context);
- addDataKindNote(context);
- addDataKindEvent(context);
- addDataKindWebsite(context);
- addDataKindGroupMembership(context);
+ try {
+ addDataKindStructuredName(context);
+ addDataKindDisplayName(context);
+ addDataKindPhoneticName(context);
+ addDataKindNickname(context);
+ addDataKindPhone(context);
+ addDataKindEmail(context);
+ addDataKindStructuredPostal(context);
+ addDataKindIm(context);
+ addDataKindOrganization(context);
+ addDataKindPhoto(context);
+ addDataKindNote(context);
+ addDataKindEvent(context);
+ addDataKindWebsite(context);
+ addDataKindGroupMembership(context);
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ Log.e(TAG, "Problem building account type", e);
+ }
}
@Override
- protected DataKind addDataKindStructuredName(Context context) {
+ protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
R.string.nameLabelsGroup, -1, true, R.layout.structured_name_editor_view));
kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
@@ -91,7 +100,7 @@
}
@Override
- protected DataKind addDataKindDisplayName(Context context) {
+ protected DataKind addDataKindDisplayName(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME,
R.string.nameLabelsGroup, -1, true, R.layout.text_fields_editor_view));
@@ -124,7 +133,7 @@
}
@Override
- protected DataKind addDataKindPhoneticName(Context context) {
+ protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
R.string.name_phonetic, -1, true, R.layout.phonetic_name_editor_view));
kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
@@ -142,7 +151,7 @@
}
@Override
- protected DataKind addDataKindNickname(Context context) {
+ protected DataKind addDataKindNickname(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindNickname(context);
kind.typeOverallMax = 1;
@@ -155,7 +164,7 @@
}
@Override
- protected DataKind addDataKindPhone(Context context) {
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindPhone(context);
kind.typeColumn = Phone.TYPE;
@@ -185,7 +194,7 @@
}
@Override
- protected DataKind addDataKindEmail(Context context) {
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindEmail(context);
kind.typeOverallMax = 3;
@@ -197,7 +206,7 @@
}
@Override
- protected DataKind addDataKindStructuredPostal(Context context) {
+ protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindStructuredPostal(context);
final boolean useJapaneseOrder =
@@ -237,7 +246,7 @@
}
@Override
- protected DataKind addDataKindIm(Context context) {
+ protected DataKind addDataKindIm(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindIm(context);
// Types are not supported for IM. There can be 3 IMs, but OWA only shows only the first
@@ -253,7 +262,7 @@
}
@Override
- protected DataKind addDataKindOrganization(Context context) {
+ protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindOrganization(context);
kind.typeOverallMax = 1;
@@ -268,7 +277,7 @@
}
@Override
- protected DataKind addDataKindPhoto(Context context) {
+ protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindPhoto(context);
kind.typeOverallMax = 1;
@@ -280,7 +289,7 @@
}
@Override
- protected DataKind addDataKindNote(Context context) {
+ protected DataKind addDataKindNote(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindNote(context);
kind.fieldList = Lists.newArrayList();
@@ -289,7 +298,7 @@
return kind;
}
- protected DataKind addDataKindEvent(Context context) {
+ protected DataKind addDataKindEvent(Context context) throws DefinitionException {
DataKind kind = addKind(
new DataKind(Event.CONTENT_ITEM_TYPE, R.string.eventLabelsGroup, 150, true,
R.layout.event_field_editor_view));
@@ -311,7 +320,7 @@
}
@Override
- protected DataKind addDataKindWebsite(Context context) {
+ protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindWebsite(context);
kind.typeOverallMax = 1;
@@ -323,16 +332,6 @@
}
@Override
- public int getHeaderColor(Context context) {
- return 0xffd5ba96;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0xffb58e59;
- }
-
- @Override
public boolean isGroupMembershipEditable() {
return true;
}
diff --git a/src/com/android/contacts/model/ExternalAccountType.java b/src/com/android/contacts/model/ExternalAccountType.java
index 73aa773..4eaa976 100644
--- a/src/com/android/contacts/model/ExternalAccountType.java
+++ b/src/com/android/contacts/model/ExternalAccountType.java
@@ -86,29 +86,60 @@
private List<String> mExtensionPackageNames;
private String mAccountTypeLabelAttribute;
private String mAccountTypeIconAttribute;
- private boolean mInitSuccessful;
private boolean mHasContactsMetadata;
private boolean mHasEditSchema;
public ExternalAccountType(Context context, String resPackageName, boolean isExtension) {
+ this(context, resPackageName, isExtension, null);
+ }
+
+ /**
+ * Constructor used for testing to initialize with any arbitrary XML.
+ *
+ * @param injectedMetadata If non-null, it'll be used to initialize the type. Only set by
+ * tests. If null, the metadata is loaded from the specified package.
+ */
+ ExternalAccountType(Context context, String resPackageName, boolean isExtension,
+ XmlResourceParser injectedMetadata) {
this.mIsExtension = isExtension;
this.resPackageName = resPackageName;
this.summaryResPackageName = resPackageName;
- // Handle unknown sources by searching their package
final PackageManager pm = context.getPackageManager();
+ final XmlResourceParser parser;
+ if (injectedMetadata == null) {
+ try {
+ parser = loadContactsXml(context, resPackageName);
+ } catch (NameNotFoundException e1) {
+ // If the package name is not found, we can't initialize this account type.
+ return;
+ }
+ } else {
+ parser = injectedMetadata;
+ }
try {
- PackageInfo packageInfo = pm.getPackageInfo(resPackageName,
- PackageManager.GET_SERVICES|PackageManager.GET_META_DATA);
- for (ServiceInfo serviceInfo : packageInfo.services) {
- final XmlResourceParser parser = serviceInfo.loadXmlMetaData(pm,
- METADATA_CONTACTS);
- if (parser == null) continue;
+ if (parser != null) {
inflate(context, parser);
}
- } catch (NameNotFoundException nnfe) {
- // If the package name is not found, we can't initialize this account type.
+
+ if (!mHasEditSchema) {
+ // Bring in name and photo from fallback source, which are non-optional
+ addDataKindStructuredName(context);
+ addDataKindDisplayName(context);
+ addDataKindPhoneticName(context);
+ addDataKindPhoto(context);
+ }
+ } catch (DefinitionException e) {
+ String message = "Problem reading XML";
+ if (parser != null) {
+ message = message + " in line " + parser.getLineNumber();
+ }
+ Log.e(TAG, message, e);
return;
+ } finally {
+ if (parser != null) {
+ parser.close();
+ }
}
mExtensionPackageNames = new ArrayList<String>();
@@ -121,16 +152,42 @@
iconRes = resolveExternalResId(context, mAccountTypeIconAttribute,
this.resPackageName, ATTR_ACCOUNT_ICON);
- if (!mHasEditSchema) {
- // Bring in name and photo from fallback source, which are non-optional
- addDataKindStructuredName(context);
- addDataKindDisplayName(context);
- addDataKindPhoneticName(context);
- addDataKindPhoto(context);
- }
-
// If we reach this point, the account type has been successfully initialized.
- mInitSuccessful = true;
+ mIsInitialized = true;
+ }
+
+ /**
+ * Returns the CONTACTS_STRUCTURE metadata (aka "contacts.xml") in the given apk package.
+ *
+ * Unfortunately, there's no public way to determine which service defines a sync service for
+ * which account type, so this method looks through all services in the package, and just
+ * returns the first CONTACTS_STRUCTURE metadata defined in any of them.
+ *
+ * Returns {@code null} if the package has no CONTACTS_STRUCTURE metadata. In this case
+ * the account type *will* be initialized with minimal configuration.
+ *
+ * On the other hand, if the package is not found, it throws a {@link NameNotFoundException},
+ * in which case the account type will *not* be initialized.
+ */
+ private XmlResourceParser loadContactsXml(Context context, String resPackageName)
+ throws NameNotFoundException {
+ final PackageManager pm = context.getPackageManager();
+ PackageInfo packageInfo = pm.getPackageInfo(resPackageName,
+ PackageManager.GET_SERVICES|PackageManager.GET_META_DATA);
+ for (ServiceInfo serviceInfo : packageInfo.services) {
+ final XmlResourceParser parser = serviceInfo.loadXmlMetaData(pm,
+ METADATA_CONTACTS);
+ if (parser != null) {
+ return parser;
+ }
+ }
+ // Package was found, but that doesn't contain the CONTACTS_STRUCTURE metadata.
+ return null;
+ }
+
+ @Override
+ public boolean isEmbedded() {
+ return false;
}
@Override
@@ -138,14 +195,6 @@
return mIsExtension;
}
- /**
- * Whether this account type was able to be fully initialized. This may be false if
- * (for example) the package name associated with the account type could not be found.
- */
- public boolean isInitialized() {
- return mInitSuccessful;
- }
-
@Override
public boolean areContactsWritable() {
return mHasEditSchema;
@@ -212,7 +261,7 @@
* Inflate this {@link AccountType} from the given parser. This may only
* load details matching the publicly-defined schema.
*/
- protected void inflate(Context context, XmlPullParser parser) {
+ protected void inflate(Context context, XmlPullParser parser) throws DefinitionException {
final AttributeSet attrs = Xml.asAttributeSet(parser);
try {
@@ -279,9 +328,11 @@
final int depth = parser.getDepth();
while (((type = parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth)
&& type != XmlPullParser.END_DOCUMENT) {
+
String tag = parser.getName();
if (TAG_EDIT_SCHEMA.equals(tag)) {
- parseEditSchema(context, parser);
+ mHasEditSchema = true;
+ parseEditSchema(context, parser, attrs);
} else if (TAG_CONTACTS_DATA_KIND.equals(tag)) {
final TypedArray a = context.obtainStyledAttributes(attrs,
android.R.styleable.ContactsDataKind);
@@ -319,53 +370,13 @@
}
}
} catch (XmlPullParserException e) {
- throw new IllegalStateException("Problem reading XML", e);
+ throw new DefinitionException("Problem reading XML", e);
} catch (IOException e) {
- throw new IllegalStateException("Problem reading XML", e);
+ throw new DefinitionException("Problem reading XML", e);
}
}
/**
- * Has to be started while the parser is on the EditSchema tag. Will finish on the end tag
- */
- private void parseEditSchema(Context context, XmlPullParser parser)
- throws XmlPullParserException, IOException {
- // Loop until we left this tag
- final int startingDepth = parser.getDepth();
- int type;
- do {
- type = parser.next();
- } while (!(parser.getDepth() == startingDepth && type == XmlPullParser.END_TAG));
-
- // Just add all defaults for now
- addDataKindStructuredName(context);
- addDataKindDisplayName(context);
- addDataKindPhoneticName(context);
- addDataKindNickname(context);
- addDataKindPhone(context);
- addDataKindEmail(context);
- addDataKindStructuredPostal(context);
- addDataKindIm(context);
- addDataKindOrganization(context);
- addDataKindPhoto(context);
- addDataKindNote(context);
- addDataKindWebsite(context);
- addDataKindSipAddress(context);
-
- mHasEditSchema = true;
- }
-
- @Override
- public int getHeaderColor(Context context) {
- return 0xff6d86b4;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0xff6d86b4;
- }
-
- /**
* Takes a string in the "@xxx/yyy" format and return the resource ID for the resource in
* the resource package.
*
diff --git a/src/com/android/contacts/model/FallbackAccountType.java b/src/com/android/contacts/model/FallbackAccountType.java
index 3b56b04..d81f2f5 100644
--- a/src/com/android/contacts/model/FallbackAccountType.java
+++ b/src/com/android/contacts/model/FallbackAccountType.java
@@ -19,41 +19,52 @@
import com.android.contacts.R;
import android.content.Context;
+import android.util.Log;
public class FallbackAccountType extends BaseAccountType {
+ private static final String TAG = "FallbackAccountType";
- public FallbackAccountType(Context context) {
+ private FallbackAccountType(Context context, String resPackageName) {
this.accountType = null;
this.dataSet = null;
this.titleRes = R.string.account_phone;
this.iconRes = R.mipmap.ic_launcher_contacts;
- this.resPackageName = null;
+ this.resPackageName = resPackageName;
this.summaryResPackageName = resPackageName;
- addDataKindStructuredName(context);
- addDataKindDisplayName(context);
- addDataKindPhoneticName(context);
- addDataKindNickname(context);
- addDataKindPhone(context);
- addDataKindEmail(context);
- addDataKindStructuredPostal(context);
- addDataKindIm(context);
- addDataKindOrganization(context);
- addDataKindPhoto(context);
- addDataKindNote(context);
- addDataKindWebsite(context);
- addDataKindSipAddress(context);
+ try {
+ addDataKindStructuredName(context);
+ addDataKindDisplayName(context);
+ addDataKindPhoneticName(context);
+ addDataKindNickname(context);
+ addDataKindPhone(context);
+ addDataKindEmail(context);
+ addDataKindStructuredPostal(context);
+ addDataKindIm(context);
+ addDataKindOrganization(context);
+ addDataKindPhoto(context);
+ addDataKindNote(context);
+ addDataKindWebsite(context);
+ addDataKindSipAddress(context);
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ Log.e(TAG, "Problem building account type", e);
+ }
}
- @Override
- public int getHeaderColor(Context context) {
- return 0xff7f93bc;
+ public FallbackAccountType(Context context) {
+ this(context, null);
}
- @Override
- public int getSideBarColor(Context context) {
- return 0xffbdc7b8;
+ /**
+ * Used to compare with an {@link ExternalAccountType} built from a test contacts.xml.
+ * In order to build {@link DataKind}s with the same resource package name,
+ * {@code resPackageName} is injectable.
+ */
+ static AccountType createForTest(Context context, String resPackageName) {
+ return new FallbackAccountType(context, resPackageName);
}
@Override
diff --git a/src/com/android/contacts/model/GoogleAccountType.java b/src/com/android/contacts/model/GoogleAccountType.java
index 094312b..822d829 100644
--- a/src/com/android/contacts/model/GoogleAccountType.java
+++ b/src/com/android/contacts/model/GoogleAccountType.java
@@ -17,6 +17,7 @@
package com.android.contacts.model;
import com.android.contacts.R;
+import com.android.contacts.model.AccountType.DefinitionException;
import com.android.contacts.util.DateUtils;
import com.google.android.collect.Lists;
@@ -26,14 +27,14 @@
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.view.inputmethod.EditorInfo;
+import android.util.Log;
import java.util.List;
public class GoogleAccountType extends BaseAccountType {
+ private static final String TAG = "GoogleAccountType";
+
public static final String ACCOUNT_TYPE = "com.google";
- protected static final int FLAGS_RELATION = EditorInfo.TYPE_CLASS_TEXT
- | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
private static final List<String> mExtensionPackages =
Lists.newArrayList("com.google.android.apps.plus");
@@ -43,22 +44,28 @@
this.resPackageName = null;
this.summaryResPackageName = resPackageName;
- addDataKindStructuredName(context);
- addDataKindDisplayName(context);
- addDataKindPhoneticName(context);
- addDataKindNickname(context);
- addDataKindPhone(context);
- addDataKindEmail(context);
- addDataKindStructuredPostal(context);
- addDataKindIm(context);
- addDataKindOrganization(context);
- addDataKindPhoto(context);
- addDataKindNote(context);
- addDataKindWebsite(context);
- addDataKindSipAddress(context);
- addDataKindGroupMembership(context);
- addDataKindRelation(context);
- addDataKindEvent(context);
+ try {
+ addDataKindStructuredName(context);
+ addDataKindDisplayName(context);
+ addDataKindPhoneticName(context);
+ addDataKindNickname(context);
+ addDataKindPhone(context);
+ addDataKindEmail(context);
+ addDataKindStructuredPostal(context);
+ addDataKindIm(context);
+ addDataKindOrganization(context);
+ addDataKindPhoto(context);
+ addDataKindNote(context);
+ addDataKindWebsite(context);
+ addDataKindSipAddress(context);
+ addDataKindGroupMembership(context);
+ addDataKindRelation(context);
+ addDataKindEvent(context);
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ Log.e(TAG, "Problem building account type", e);
+ }
}
@Override
@@ -67,7 +74,7 @@
}
@Override
- protected DataKind addDataKindPhone(Context context) {
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindPhone(context);
kind.typeColumn = Phone.TYPE;
@@ -90,7 +97,7 @@
}
@Override
- protected DataKind addDataKindEmail(Context context) {
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
final DataKind kind = super.addDataKindEmail(context);
kind.typeColumn = Email.TYPE;
@@ -107,7 +114,7 @@
return kind;
}
- private DataKind addDataKindRelation(Context context) {
+ private DataKind addDataKindRelation(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
R.string.relationLabelsGroup, 160, true, R.layout.text_fields_editor_view));
kind.actionHeader = new RelationActionInflater();
@@ -142,7 +149,7 @@
return kind;
}
- private DataKind addDataKindEvent(Context context) {
+ private DataKind addDataKindEvent(Context context) throws DefinitionException {
DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
R.string.eventLabelsGroup, 150, true, R.layout.event_field_editor_view));
kind.actionHeader = new EventActionInflater();
@@ -168,16 +175,6 @@
}
@Override
- public int getHeaderColor(Context context) {
- return 0xff89c2c2;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0xff5bb4b4;
- }
-
- @Override
public boolean isGroupMembershipEditable() {
return true;
}
diff --git a/src/com/android/contacts/quickcontact/PackageIntentReceiver.java b/src/com/android/contacts/quickcontact/PackageIntentReceiver.java
deleted file mode 100644
index 7af4005..0000000
--- a/src/com/android/contacts/quickcontact/PackageIntentReceiver.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.quickcontact;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Package intent receiver that flushes the {@link ResolveCache} so that Packages are rescanned next
- * time
- */
-public class PackageIntentReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- ResolveCache.flush();
- }
-}
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 0588c7d..2c62fe4 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -18,7 +18,6 @@
import com.android.contacts.Collapser;
import com.android.contacts.ContactPhotoManager;
-import com.android.contacts.ContactPresenceIconUtil;
import com.android.contacts.R;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.DataKind;
diff --git a/src/com/android/contacts/quickcontact/ResolveCache.java b/src/com/android/contacts/quickcontact/ResolveCache.java
index 08a6cf8..aae2ee7 100644
--- a/src/com/android/contacts/quickcontact/ResolveCache.java
+++ b/src/com/android/contacts/quickcontact/ResolveCache.java
@@ -19,6 +19,7 @@
import com.android.contacts.util.PhoneCapabilityTester;
import com.google.android.collect.Sets;
+import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -65,16 +66,35 @@
*/
public synchronized static ResolveCache getInstance(Context context) {
if (sInstance == null) {
- return sInstance = new ResolveCache(context.getApplicationContext());
+ final Context applicationContext = context.getApplicationContext();
+ sInstance = new ResolveCache(applicationContext);
+
+ // Register for package-changes so that we can flush our cache
+ final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+ filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+ filter.addDataScheme("package");
+ applicationContext.registerReceiver(sInstance.mPackageIntentReceiver, filter);
}
return sInstance;
}
- public synchronized static void flush() {
+ private synchronized static void flush() {
sInstance = null;
}
/**
+ * Called anytime a package is installed, uninstalled etc, so that we can wipe our cache
+ */
+ private BroadcastReceiver mPackageIntentReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ flush();
+ }
+ };
+
+ /**
* Cached entry holding the best {@link ResolveInfo} for a specific
* MIME-type, along with a {@link SoftReference} to its icon.
*/
diff --git a/src/com/android/contacts/test/EmptyFragment.java b/src/com/android/contacts/test/EmptyFragment.java
new file mode 100644
index 0000000..e35b7f1
--- /dev/null
+++ b/src/com/android/contacts/test/EmptyFragment.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.test;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+/**
+ * Empty fragment used for testing.
+ */
+public class EmptyFragment extends Fragment {
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Must return a ViewGroup, FrameLayout will do.
+ return new FrameLayout(getActivity());
+ }
+}
diff --git a/src/com/android/contacts/test/FragmentTestActivity.java b/src/com/android/contacts/test/FragmentTestActivity.java
index 34b1556..161ed74 100644
--- a/src/com/android/contacts/test/FragmentTestActivity.java
+++ b/src/com/android/contacts/test/FragmentTestActivity.java
@@ -30,6 +30,6 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.empty);
+ setContentView(R.layout.fragment_test);
}
}
diff --git a/src/com/android/contacts/util/AccountFilterUtil.java b/src/com/android/contacts/util/AccountFilterUtil.java
new file mode 100644
index 0000000..955c195
--- /dev/null
+++ b/src/com/android/contacts/util/AccountFilterUtil.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import com.android.contacts.R;
+import com.android.contacts.list.AccountFilterActivity;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+import android.view.View;
+import android.widget.TextView;
+
+/**
+ * Utility class for account filter manipulation.
+ */
+public class AccountFilterUtil {
+ private static final String TAG = AccountFilterUtil.class.getSimpleName();
+
+ /**
+ * Find TextView with the id "account_filter_header" and set correct text for the account
+ * filter header.
+ *
+ * @param filterContainer View containing TextView with id "account_filter_header"
+ * @return true when header text is set in the call. You may use this for conditionally
+ * showing or hiding this entire view.
+ */
+ public static boolean updateAccountFilterTitleForPeople(View filterContainer,
+ ContactListFilter filter, boolean isLoading, boolean showTitleForAllAccounts) {
+ return updateAccountFilterTitle(
+ filterContainer, filter, isLoading, showTitleForAllAccounts, false);
+ }
+
+ /**
+ * Similar to {@link #updateAccountFilterTitleForPeople(View, ContactListFilter, boolean,
+ * boolean)}, but for Phone UI.
+ */
+ public static boolean updateAccountFilterTitleForPhone(View filterContainer,
+ ContactListFilter filter, boolean isLoading, boolean showTitleForAllAccounts) {
+ return updateAccountFilterTitle(
+ filterContainer, filter, isLoading, showTitleForAllAccounts, true);
+ }
+
+ private static boolean updateAccountFilterTitle(View filterContainer,
+ ContactListFilter filter, boolean isLoading, boolean showTitleForAllAccounts,
+ boolean forPhone) {
+ final Context context = filterContainer.getContext();
+ final TextView headerTextView = (TextView)
+ filterContainer.findViewById(R.id.account_filter_header);
+
+ boolean textWasSet = false;
+ if (isLoading) {
+ headerTextView.setText(R.string.contact_list_loading);
+ } else if (filter != null) {
+ if (forPhone) {
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ if (showTitleForAllAccounts) {
+ headerTextView.setText(R.string.list_filter_phones);
+ textWasSet = true;
+ }
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+ headerTextView.setText(context.getString(
+ R.string.listAllContactsInAccount, filter.accountName));
+ textWasSet = true;
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ headerTextView.setText(R.string.listCustomView);
+ textWasSet = true;
+ } else {
+ Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
+ }
+ } else {
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ if (showTitleForAllAccounts) {
+ headerTextView.setText(R.string.list_filter_all_accounts);
+ textWasSet = true;
+ }
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+ headerTextView.setText(context.getString(
+ R.string.listAllContactsInAccount, filter.accountName));
+ textWasSet = true;
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ headerTextView.setText(R.string.listCustomView);
+ textWasSet = true;
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+ headerTextView.setText(R.string.listSingleContact);
+ textWasSet = true;
+ } else {
+ Log.w(TAG, "Filter type \"" + filter.filterType + "\" isn't expected.");
+ }
+ }
+ } else {
+ Log.w(TAG, "Filter is null.");
+ }
+ return textWasSet;
+ }
+
+ /**
+ * Launches account filter setting Activity using
+ * {@link Activity#startActivityForResult(Intent, int)}.
+ *
+ * @param activity
+ * @param requestCode requestCode for {@link Activity#startActivityForResult(Intent, int)}
+ */
+ public static void startAccountFilterActivityForResult(
+ Activity activity, int requestCode) {
+ final Intent intent = new Intent(activity, AccountFilterActivity.class);
+ activity.startActivityForResult(intent, requestCode);
+ }
+
+ /**
+ * Very similar to {@link #startAccountFilterActivityForResult(Activity, int)} but uses
+ * Fragment instead.
+ */
+ public static void startAccountFilterActivityForResult(
+ Fragment fragment, int requestCode) {
+ final Activity activity = fragment.getActivity();
+ if (activity != null) {
+ final Intent intent = new Intent(activity, AccountFilterActivity.class);
+ fragment.startActivityForResult(intent, requestCode);
+ } else {
+ Log.w(TAG, "getActivity() returned null. Ignored");
+ }
+ }
+
+ /**
+ * Useful method to handle onActivityResult() for
+ * {@link #startAccountFilterActivityForResult(Activity, int)} or
+ * {@link #startAccountFilterActivityForResult(Fragment, int)}.
+ *
+ * This will update filter via a given ContactListFilterController.
+ */
+ public static void handleAccountFilterResult(
+ ContactListFilterController filterController, int resultCode, Intent data) {
+ if (resultCode == Activity.RESULT_OK) {
+ final ContactListFilter filter = (ContactListFilter)
+ data.getParcelableExtra(AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER);
+ if (filter == null) {
+ return;
+ }
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ filterController.selectCustomFilter();
+ } else {
+ filterController.setContactListFilter(filter, true);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/util/ContactLoaderUtils.java b/src/com/android/contacts/util/ContactLoaderUtils.java
new file mode 100644
index 0000000..91c683f
--- /dev/null
+++ b/src/com/android/contacts/util/ContactLoaderUtils.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.net.Uri;
+import android.provider.Contacts;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+
+/**
+ * Utility methods for the {@link ContactLoader}.
+ */
+public final class ContactLoaderUtils {
+
+ /** Static helper, not instantiable. */
+ private ContactLoaderUtils() {}
+
+ /**
+ * Transforms the given Uri and returns a Lookup-Uri that represents the contact.
+ * For legacy contacts, a raw-contact lookup is performed. An {@link IllegalArgumentException}
+ * can be thrown if the URI is null or the authority is not recognized.
+ *
+ * Do not call from the UI thread.
+ */
+ @SuppressWarnings("deprecation")
+ public static Uri ensureIsContactUri(final ContentResolver resolver, final Uri uri)
+ throws IllegalArgumentException {
+ if (uri == null) throw new IllegalArgumentException("uri must not be null");
+
+ final String authority = uri.getAuthority();
+
+ // Current Style Uri?
+ if (ContactsContract.AUTHORITY.equals(authority)) {
+ final String type = resolver.getType(uri);
+ // Contact-Uri? Good, return it
+ if (ContactsContract.Contacts.CONTENT_ITEM_TYPE.equals(type)) {
+ return uri;
+ }
+
+ // RawContact-Uri? Transform it to ContactUri
+ if (RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
+ final long rawContactId = ContentUris.parseId(uri);
+ return RawContacts.getContactLookupUri(resolver,
+ ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
+ }
+
+ // Anything else? We don't know what this is
+ throw new IllegalArgumentException("uri format is unknown");
+ }
+
+ // Legacy Style? Convert to RawContact
+ final String OBSOLETE_AUTHORITY = Contacts.AUTHORITY;
+ if (OBSOLETE_AUTHORITY.equals(authority)) {
+ // Legacy Format. Convert to RawContact-Uri and then lookup the contact
+ final long rawContactId = ContentUris.parseId(uri);
+ return RawContacts.getContactLookupUri(resolver,
+ ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
+ }
+
+ throw new IllegalArgumentException("uri authority is unknown");
+ }
+}
diff --git a/src/com/android/contacts/util/DateUtils.java b/src/com/android/contacts/util/DateUtils.java
index ed9eb94..1ea84a1 100644
--- a/src/com/android/contacts/util/DateUtils.java
+++ b/src/com/android/contacts/util/DateUtils.java
@@ -38,6 +38,8 @@
new SimpleDateFormat("yyyy-MM-dd", Locale.US);
public static final SimpleDateFormat DATE_AND_TIME_FORMAT =
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
+ public static final SimpleDateFormat NO_YEAR_DATE_AND_TIME_FORMAT =
+ new SimpleDateFormat("--MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
// Variations of ISO 8601 date format. Do not change the order - it does affect the
// result in ambiguous cases.
diff --git a/src/com/android/contacts/vcard/NotificationImportExportListener.java b/src/com/android/contacts/vcard/NotificationImportExportListener.java
index fb83cec..06cf73f 100644
--- a/src/com/android/contacts/vcard/NotificationImportExportListener.java
+++ b/src/com/android/contacts/vcard/NotificationImportExportListener.java
@@ -197,30 +197,6 @@
/* package */ static Notification constructProgressNotification(
Context context, int type, String description, String tickerText,
int jobId, String displayName, int totalCount, int currentCount) {
- final RemoteViews remoteViews =
- new RemoteViews(context.getPackageName(),
- R.layout.status_bar_ongoing_event_progress_bar);
- remoteViews.setTextViewText(R.id.status_description, description);
- remoteViews.setProgressBar(R.id.status_progress_bar, totalCount, currentCount,
- totalCount == -1);
- final String percentage;
- if (totalCount > 0) {
- percentage = context.getString(R.string.percentage,
- String.valueOf(currentCount * 100/totalCount));
- } else {
- percentage = "";
- }
- remoteViews.setTextViewText(R.id.status_progress_text, percentage);
- final int icon = (type == VCardService.TYPE_IMPORT ? android.R.drawable.stat_sys_download :
- android.R.drawable.stat_sys_upload);
- remoteViews.setImageViewResource(R.id.status_icon, icon);
-
- final Notification notification = new Notification();
- notification.icon = icon;
- notification.tickerText = tickerText;
- notification.contentView = remoteViews;
- notification.flags |= Notification.FLAG_ONGOING_EVENT;
-
// Note: We cannot use extra values here (like setIntExtra()), as PendingIntent doesn't
// preserve them across multiple Notifications. PendingIntent preserves the first extras
// (when flag is not set), or update them when PendingIntent#getActivity() is called
@@ -238,8 +214,20 @@
.appendQueryParameter(CancelActivity.TYPE, String.valueOf(type)).build();
intent.setData(uri);
- notification.contentIntent = PendingIntent.getActivity(context, 0, intent, 0);
- return notification;
+ final Notification.Builder builder = new Notification.Builder(context);
+ builder.setOngoing(true)
+ .setProgress(totalCount, currentCount, totalCount == - 1)
+ .setTicker(tickerText)
+ .setContentTitle(description)
+ .setSmallIcon(type == VCardService.TYPE_IMPORT
+ ? android.R.drawable.stat_sys_download
+ : android.R.drawable.stat_sys_upload)
+ .setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
+ if (totalCount > 0) {
+ builder.setContentText(context.getString(R.string.percentage,
+ String.valueOf(currentCount * 100 / totalCount)));
+ }
+ return builder.getNotification();
}
/**
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 739f5f0..6ea42d6 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -21,6 +21,13 @@
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
+ <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+ <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+ <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
+ <uses-permission android:name="android.permission.READ_SYNC_STATS" />
+ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+
<application>
<uses-library android:name="android.test.runner" />
<meta-data android:name="com.android.contacts.iconset" android:resource="@xml/iconset" />
@@ -83,6 +90,35 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+
+ <!--
+ Test authenticators/sync adapters.
+
+ The idea is to have multiple account types with various edit schemas. We use subclasses
+ so we could easily add multiple pairs of authenticators and sync adapters.
+ Unfortunately there's an issue with the contacts app which prevents a single apk from
+ having multiple contacts.xml files, so for now we only declare one account type here.
+ -->
+ <service android:name=".testauth.TestAuthenticationService$Basic" android:exported="true">
+ <intent-filter>
+ <action android:name="android.accounts.AccountAuthenticator" />
+ </intent-filter>
+ <meta-data
+ android:name="android.accounts.AccountAuthenticator"
+ android:resource="@xml/test_basic_authenticator" />
+ </service>
+
+ <service android:name=".testauth.TestSyncService$Basic" android:exported="true">
+ <intent-filter>
+ <action android:name="android.content.SyncAdapter" />
+ </intent-filter>
+ <meta-data
+ android:name="android.content.SyncAdapter"
+ android:resource="@xml/test_basic_syncadapter" />
+ <meta-data
+ android:name="android.provider.CONTACTS_STRUCTURE"
+ android:resource="@xml/test_basic_contacts" />
+ </service>
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index 27b9176..19ebde3 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -113,4 +113,6 @@
<string name="attribution_google_talk">Google Talk</string>
<string name="attribution_flicker">Flicker</string>
<string name="attribution_twitter">Twitter</string>
+
+ <string name="authenticator_basic_label">Test adapter</string>
</resources>
diff --git a/tests/res/xml/contacts_fallback.xml b/tests/res/xml/contacts_fallback.xml
new file mode 100644
index 0000000..ae262eb
--- /dev/null
+++ b/tests/res/xml/contacts_fallback.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<!--
+ contacts.xml to build "fallback account type" equivalent.
+ This is directly used in ExternalAccountTypeTest to test the parser. There's no sync adapter
+ that actually defined with this definition.
+-->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema
+ >
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsDisplayName="true"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ >
+ </DataKind>
+ <DataKind kind="photo" maxOccurs="1" />
+ <DataKind kind="phone" >
+ <Type type="mobile" />
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="fax_work" />
+ <Type type="fax_home" />
+ <Type type="pager" />
+ <Type type="other" />
+ <Type type="custom"/>
+ <Type type="callback" />
+ <Type type="car" />
+ <Type type="company_main" />
+ <Type type="isdn" />
+ <Type type="main" />
+ <Type type="other_fax" />
+ <Type type="radio" />
+ <Type type="telex" />
+ <Type type="tty_tdd" />
+ <Type type="work_mobile"/>
+ <Type type="work_pager" />
+ <Type type="assistant" />
+ <Type type="mms" />
+ </DataKind>
+ <DataKind kind="email" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="mobile" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="nickname" maxOccurs="1" />
+ <DataKind kind="im" >
+ <Type type="aim" />
+ <Type type="msn" />
+ <Type type="yahoo" />
+ <Type type="skype" />
+ <Type type="qq" />
+ <Type type="google_talk" />
+ <Type type="icq" />
+ <Type type="jabber" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="postal" needsStructured="false" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="organization" maxOccurs="1" />
+ <DataKind kind="website" />
+ <DataKind kind="sip_address" maxOccurs="1" />
+ <DataKind kind="note" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/test_basic_authenticator.xml b/tests/res/xml/test_basic_authenticator.xml
new file mode 100644
index 0000000..ecd100a
--- /dev/null
+++ b/tests/res/xml/test_basic_authenticator.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:accountType="com.android.contacts.tests.authtest.basic"
+ android:icon="@drawable/ic_contact_picture"
+ android:smallIcon="@drawable/ic_contact_picture"
+ android:label="@string/authenticator_basic_label"
+/>
diff --git a/tests/res/xml/test_basic_contacts.xml b/tests/res/xml/test_basic_contacts.xml
new file mode 100644
index 0000000..0047204
--- /dev/null
+++ b/tests/res/xml/test_basic_contacts.xml
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema
+ >
+ <!--
+ Name:
+ - maxOccurs must be 1
+ - No types.
+
+ - Currently all the supportsXxx attributes must be true, but here's the plan for the
+ future:
+ (There's some hardcoded assumptions in the contact editor, which is one reason
+ for the above restriction)
+
+ - "Family name" and "Given name" must be supported.
+ - All sync adapters must support structured name. "display name only" is not
+ supported.
+ -> Supporting this would require relatively large changes to
+ the contact editor.
+
+ - Fields are decided from the attributes:
+ StructuredName.DISPLAY_NAME if supportsDisplayName == true
+ StructuredName.PREFIX if supportsPrefix == true
+ StructuredName.FAMILY_NAME (always)
+ StructuredName.MIDDLE_NAME if supportsPrefix == true
+ StructuredName.GIVEN_NAME (always)
+ StructuredName.SUFFIX if supportsSuffix == true
+ StructuredName.PHONETIC_FAMILY_NAME if supportsPhoneticFamilyName == true
+ StructuredName.PHONETIC_MIDDLE_NAME if supportsPhoneticMiddleName == true
+ StructuredName.PHONETIC_GIVEN_NAME if supportsPhoneticGivenName == true
+
+ - DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME is always added.
+ - DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME is added
+ if any of supportsPhoneticXxx == true
+ -->
+ <!-- Fallback/Google definition. Supports all. -->
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsDisplayName="true"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ >
+ </DataKind>
+
+ <!-- Exchange definition. No display-name, no phonetic-middle.
+ <DataKind kind="name"
+ supportsDisplayName="false"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="false"
+ supportsPhoneticGivenName ="true"
+ >
+ </DataKind>
+ -->
+
+ <!--
+ Photo:
+ - maxOccurs must be 1
+ - No types.
+ -->
+ <DataKind kind="photo" maxOccurs="1" />
+
+ <!--
+ Phone definition.
+ - "is secondary?" is inferred from type.
+ -->
+ <!-- Fallback, Google definition. -->
+ <DataKind kind="phone" >
+ <!-- Note: Google type doesn't have obsolete ones -->
+ <Type type="mobile" />
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="fax_work" />
+ <Type type="fax_home" />
+ <Type type="pager" />
+ <Type type="other" />
+ <Type type="custom"/>
+ <Type type="callback" />
+ <Type type="car" />
+ <Type type="company_main" />
+ <Type type="isdn" />
+ <Type type="main" />
+ <Type type="other_fax" />
+ <Type type="radio" />
+ <Type type="telex" />
+ <Type type="tty_tdd" />
+ <Type type="work_mobile"/>
+ <Type type="work_pager" />
+ <Type type="assistant" />
+ <Type type="mms" />
+ </DataKind>
+
+ <!-- Exchange definition.
+ <DataKind kind="phone" >
+ <Type type="home" maxOccurs="2" />
+ <Type type="mobile" maxOccurs="1" />
+ <Type type="work" maxOccurs="2" />
+ <Type type="fax_work" maxOccurs="1" />
+ <Type type="fax_home" maxOccurs="1" />
+ <Type type="pager" maxOccurs="1" />
+ <Type type="car" maxOccurs="1" />
+ <Type type="company_main" maxOccurs="1" />
+ <Type type="mms" maxOccurs="1" />
+ <Type type="radio" maxOccurs="1" />
+ <Type type="assistant" maxOccurs="1" />
+ </DataKind>
+ -->
+
+ <!--
+ Email
+ -->
+ <!-- Fallback/Google definition. -->
+ <DataKind kind="email" >
+ <!-- Note: Google type doesn't have obsolete ones -->
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="mobile" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!--
+ Exchange definition.
+ - Same definition as "fallback" except for maxOccurs=3
+ <DataKind kind="email" maxOccurs="3" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="mobile" />
+ <Type type="custom" />
+ </DataKind>
+ -->
+
+ <!--
+ Nickname
+ - maxOccurs must be 1
+ - No types.
+ -->
+ <DataKind kind="nickname" maxOccurs="1" />
+
+ <!--
+ Im:
+ - The TYPE column always stores Im.TYPE_OTHER (defaultValues is always set)
+ - The user-selected type is stored in Im.PROTOCOL
+ -->
+ <!-- Fallback, Google definition. -->
+ <DataKind kind="im" >
+ <Type type="aim" />
+ <Type type="msn" />
+ <Type type="yahoo" />
+ <Type type="skype" />
+ <Type type="qq" />
+ <Type type="google_talk" />
+ <Type type="icq" />
+ <Type type="jabber" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!-- Exchange definition.
+ <DataKind kind="im" maxOccurs="3" >
+ <Type type="aim" />
+ <Type type="msn" />
+ <Type type="yahoo" />
+ <Type type="skype" />
+ <Type type="qq" />
+ <Type type="google_talk" />
+ <Type type="icq" />
+ <Type type="jabber" />
+ <Type type="custom" />
+ </DataKind>
+ -->
+
+ <!--
+ Postal address.
+ -->
+ <!-- Fallback/Google definition. Not structured. -->
+ <DataKind kind="postal" needsStructured="false" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!-- Exchange definition. Structured.
+ <DataKind kind="postal" needsStructured="true" >
+ <Type type="work" />
+ <Type type="home" />
+ <Type type="other" />
+ </DataKind>
+ -->
+
+ <!--
+ Organization:
+ - Fields are fixed: COMPANY, TITLE
+ - maxOccurs must be 1
+ - No types.
+ -->
+ <DataKind kind="organization" maxOccurs="1" />
+
+ <!--
+ Website:
+ - No types.
+ -->
+ <DataKind kind="website" />
+
+ <!--
+ Below kinds have nothing configurable.
+ - No types are supported.
+ - maxOccurs must be 1
+ -->
+ <DataKind kind="sip_address" maxOccurs="1" />
+ <DataKind kind="note" maxOccurs="1" />
+
+ <!--
+ Google/Exchange supports it, but fallback doesn't.
+ <DataKind kind="group_membership" maxOccurs="1" />
+ -->
+
+ <!--
+ Event
+ -->
+ <DataKind kind="event" dateWithTime="false">
+ <Type type="birthday" maxOccurs="1" yearOptional="true" />
+ <Type type="anniversary" />
+ <Type type="other" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!--
+ Exchange definition. dateWithTime is needed only for Exchange.
+ <DataKind kind="event" dateWithTime="true">
+ <Type type="birthday" maxOccurs="1" />
+ </DataKind>
+ -->
+
+ <!--
+ Relationship
+ -->
+ <DataKind kind="relationship" >
+ <Type type="assistant" />
+ <Type type="brother" />
+ <Type type="child" />
+ <Type type="domestic_partner" />
+ <Type type="father" />
+ <Type type="friend" />
+ <Type type="manager" />
+ <Type type="mother" />
+ <Type type="parent" />
+ <Type type="partner" />
+ <Type type="referred_by" />
+ <Type type="relative" />
+ <Type type="sister" />
+ <Type type="spouse" />
+ <Type type="custom" />
+ </DataKind>
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/test_basic_syncadapter.xml b/tests/res/xml/test_basic_syncadapter.xml
new file mode 100644
index 0000000..fecc0eb
--- /dev/null
+++ b/tests/res/xml/test_basic_syncadapter.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
+ android:contentAuthority="com.android.contacts"
+ android:accountType="com.android.contacts.tests.authtest.basic"
+ android:supportsUploading="true"
+ android:userVisible="true"
+/>
diff --git a/tests/src/com/android/contacts/EntityModifierTests.java b/tests/src/com/android/contacts/EntityModifierTests.java
index d6f99ce..6872604 100644
--- a/tests/src/com/android/contacts/EntityModifierTests.java
+++ b/tests/src/com/android/contacts/EntityModifierTests.java
@@ -20,8 +20,6 @@
import static android.content.ContentProviderOperation.TYPE_INSERT;
import static android.content.ContentProviderOperation.TYPE_UPDATE;
-import com.google.android.collect.Lists;
-
import com.android.contacts.model.AccountType;
import com.android.contacts.model.AccountType.EditType;
import com.android.contacts.model.AccountTypeManager;
@@ -35,10 +33,10 @@
import com.android.contacts.tests.mocks.ContactsMockContext;
import com.android.contacts.tests.mocks.MockAccountTypeManager;
import com.android.contacts.tests.mocks.MockContentProvider;
+import com.google.android.collect.Lists;
import android.content.ContentProviderOperation;
import android.content.ContentValues;
-import android.content.Context;
import android.content.Entity;
import android.net.Uri;
import android.os.Bundle;
@@ -87,66 +85,60 @@
public static class MockContactsSource extends AccountType {
MockContactsSource() {
- this.accountType = TEST_ACCOUNT_TYPE;
+ try {
+ this.accountType = TEST_ACCOUNT_TYPE;
- final DataKind nameKind = new DataKind(StructuredName.CONTENT_ITEM_TYPE,
- R.string.nameLabelsGroup, -1, true, -1);
- nameKind.typeOverallMax = 1;
- addKind(nameKind);
+ final DataKind nameKind = new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+ R.string.nameLabelsGroup, -1, true, -1);
+ nameKind.typeOverallMax = 1;
+ addKind(nameKind);
- // Phone allows maximum 2 home, 1 work, and unlimited other, with
- // constraint of 5 numbers maximum.
- final DataKind phoneKind = new DataKind(
- Phone.CONTENT_ITEM_TYPE, -1, 10, true, -1);
+ // Phone allows maximum 2 home, 1 work, and unlimited other, with
+ // constraint of 5 numbers maximum.
+ final DataKind phoneKind = new DataKind(
+ Phone.CONTENT_ITEM_TYPE, -1, 10, true, -1);
- phoneKind.typeOverallMax = 5;
- phoneKind.typeColumn = Phone.TYPE;
- phoneKind.typeList = Lists.newArrayList();
- phoneKind.typeList.add(new EditType(Phone.TYPE_HOME, -1).setSpecificMax(2));
- phoneKind.typeList.add(new EditType(Phone.TYPE_WORK, -1).setSpecificMax(1));
- phoneKind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, -1).setSecondary(true));
- phoneKind.typeList.add(new EditType(Phone.TYPE_OTHER, -1));
+ phoneKind.typeOverallMax = 5;
+ phoneKind.typeColumn = Phone.TYPE;
+ phoneKind.typeList = Lists.newArrayList();
+ phoneKind.typeList.add(new EditType(Phone.TYPE_HOME, -1).setSpecificMax(2));
+ phoneKind.typeList.add(new EditType(Phone.TYPE_WORK, -1).setSpecificMax(1));
+ phoneKind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, -1).setSecondary(true));
+ phoneKind.typeList.add(new EditType(Phone.TYPE_OTHER, -1));
- phoneKind.fieldList = Lists.newArrayList();
- phoneKind.fieldList.add(new EditField(Phone.NUMBER, -1, -1));
- phoneKind.fieldList.add(new EditField(Phone.LABEL, -1, -1));
+ phoneKind.fieldList = Lists.newArrayList();
+ phoneKind.fieldList.add(new EditField(Phone.NUMBER, -1, -1));
+ phoneKind.fieldList.add(new EditField(Phone.LABEL, -1, -1));
- addKind(phoneKind);
+ addKind(phoneKind);
- // Email is unlimited
- final DataKind emailKind = new DataKind(
- Email.CONTENT_ITEM_TYPE, -1, 10, true, -1);
- emailKind.typeOverallMax = -1;
- emailKind.fieldList = Lists.newArrayList();
- emailKind.fieldList.add(new EditField(Email.DATA, -1, -1));
- addKind(emailKind);
+ // Email is unlimited
+ final DataKind emailKind = new DataKind(
+ Email.CONTENT_ITEM_TYPE, -1, 10, true, -1);
+ emailKind.typeOverallMax = -1;
+ emailKind.fieldList = Lists.newArrayList();
+ emailKind.fieldList.add(new EditField(Email.DATA, -1, -1));
+ addKind(emailKind);
- // IM is only one
- final DataKind imKind = new DataKind(Im.CONTENT_ITEM_TYPE, -1, 10,
- true, -1);
- imKind.typeOverallMax = 1;
- imKind.fieldList = Lists.newArrayList();
- imKind.fieldList.add(new EditField(Im.DATA, -1, -1));
- addKind(imKind);
+ // IM is only one
+ final DataKind imKind = new DataKind(Im.CONTENT_ITEM_TYPE, -1, 10,
+ true, -1);
+ imKind.typeOverallMax = 1;
+ imKind.fieldList = Lists.newArrayList();
+ imKind.fieldList.add(new EditField(Im.DATA, -1, -1));
+ addKind(imKind);
- // Organization is only one
- final DataKind orgKind = new DataKind(
- Organization.CONTENT_ITEM_TYPE, -1, 10, true, -1);
- orgKind.typeOverallMax = 1;
- orgKind.fieldList = Lists.newArrayList();
- orgKind.fieldList.add(new EditField(Organization.COMPANY, -1, -1));
- orgKind.fieldList.add(new EditField(Organization.TITLE, -1, -1));
- addKind(orgKind);
- }
-
- @Override
- public int getHeaderColor(Context context) {
- return 0;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0xffffff;
+ // Organization is only one
+ final DataKind orgKind = new DataKind(
+ Organization.CONTENT_ITEM_TYPE, -1, 10, true, -1);
+ orgKind.typeOverallMax = 1;
+ orgKind.fieldList = Lists.newArrayList();
+ orgKind.fieldList.add(new EditField(Organization.COMPANY, -1, -1));
+ orgKind.fieldList.add(new EditField(Organization.TITLE, -1, -1));
+ addKind(orgKind);
+ } catch (DefinitionException e) {
+ throw new RuntimeException(e);
+ }
}
@Override
diff --git a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
index 2dfd95a..c1c3e08 100644
--- a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
@@ -18,6 +18,7 @@
import com.android.contacts.calllog.CallTypeHelper;
import com.android.contacts.calllog.PhoneNumberHelper;
+import com.android.contacts.calllog.TestPhoneNumberHelper;
import com.android.contacts.util.LocaleTestUtils;
import com.android.internal.telephony.CallerInfo;
@@ -67,7 +68,7 @@
Context context = getContext();
Resources resources = context.getResources();
CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
- mPhoneNumberHelper = new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
+ mPhoneNumberHelper = new TestPhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
mHelper = new PhoneCallDetailsHelper(resources, callTypeHelper, mPhoneNumberHelper);
mHelper.setCurrentTimeForTest(
new GregorianCalendar(2011, 5, 4, 13, 0, 0).getTimeInMillis());
diff --git a/tests/src/com/android/contacts/calllog/CallLogAdapterTest.java b/tests/src/com/android/contacts/calllog/CallLogAdapterTest.java
index 909002a..600a589 100644
--- a/tests/src/com/android/contacts/calllog/CallLogAdapterTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogAdapterTest.java
@@ -36,7 +36,6 @@
private static final String TEST_NUMBER_LABEL = "label";
private static final int TEST_NUMBER_TYPE = 1;
private static final String TEST_COUNTRY_ISO = "US";
- private static final String TEST_VOICEMAIL_NUMBER = "111";
/** The object under test. */
private TestCallLogAdapter mAdapter;
@@ -64,8 +63,7 @@
}
};
- mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper,
- TEST_VOICEMAIL_NUMBER);
+ mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper);
// The cursor used in the tests to store the entries to display.
mCursor = new MatrixCursor(CallLogQuery.EXTENDED_PROJECTION);
mCursor.moveToFirst();
@@ -213,8 +211,8 @@
public final List<Request> requests = Lists.newArrayList();
public TestCallLogAdapter(Context context, CallFetcher callFetcher,
- ContactInfoHelper contactInfoHelper, String voicemailNumber) {
- super(context, callFetcher, contactInfoHelper, voicemailNumber);
+ ContactInfoHelper contactInfoHelper) {
+ super(context, callFetcher, contactInfoHelper);
}
@Override
diff --git a/tests/src/com/android/contacts/activities/CallLogActivityTests.java b/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
similarity index 94%
rename from tests/src/com/android/contacts/activities/CallLogActivityTests.java
rename to tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
index ac314b6..09fe463 100644
--- a/tests/src/com/android/contacts/activities/CallLogActivityTests.java
+++ b/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
@@ -14,19 +14,15 @@
* limitations under the License.
*/
-package com.android.contacts.activities;
+package com.android.contacts.calllog;
import com.android.contacts.CallDetailActivity;
import com.android.contacts.R;
-import com.android.contacts.calllog.CallLogAdapter;
-import com.android.contacts.calllog.CallLogFragment;
-import com.android.contacts.calllog.CallLogListItemViews;
-import com.android.contacts.calllog.CallLogQuery;
-import com.android.contacts.calllog.CallLogQueryTestUtils;
-import com.android.contacts.calllog.ContactInfo;
-import com.android.contacts.calllog.IntentProvider;
+import com.android.contacts.test.FragmentTestActivity;
import com.android.internal.telephony.CallerInfo;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
import android.content.ComponentName;
import android.content.ContentUris;
import android.content.Intent;
@@ -39,6 +35,7 @@
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.VoicemailContract;
import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
@@ -61,8 +58,7 @@
* -w com.android.contacts.tests/android.test.InstrumentationTestRunner
*/
@LargeTest
-public class CallLogActivityTests
- extends ActivityInstrumentationTestCase2<CallLogActivity> {
+public class CallLogFragmentTest extends ActivityInstrumentationTestCase2<FragmentTestActivity> {
private static final int RAND_DURATION = -1;
private static final long NOW = -1L;
@@ -75,13 +71,14 @@
/** The formatted version of {@link #TEST_NUMBER}. */
private static final String TEST_FORMATTED_NUMBER = "1 212-555-1000";
- // We get the call list activity and assign is a frame to build
- // its list. mAdapter is an inner class of
- // CallLogActivity to build the rows (view) in the call
- // list. We reuse it with our own in-mem DB.
- private CallLogActivity mActivity;
+ /** The activity in which we are hosting the fragment. */
+ private FragmentTestActivity mActivity;
private CallLogFragment mFragment;
private FrameLayout mParentView;
+ /**
+ * The adapter used by the fragment to build the rows in the call log. We use it with our own in
+ * memory database.
+ */
private CallLogAdapter mAdapter;
private String mVoicemail;
@@ -102,8 +99,8 @@
// reverse order compare to the DB.
private View[] mList;
- public CallLogActivityTests() {
- super("com.android.contacts", CallLogActivity.class);
+ public CallLogFragmentTest() {
+ super("com.android.contacts", FragmentTestActivity.class);
mIndex = 1;
mRnd = new Random();
}
@@ -111,8 +108,19 @@
@Override
public void setUp() {
mActivity = getActivity();
- mFragment = mActivity.getFragment();
- mVoicemail = mFragment.getVoiceMailNumber();
+ // Needed by the CallLogFragment.
+ mActivity.setTheme(R.style.DialtactsTheme);
+
+ // Create the fragment and load it into the activity.
+ mFragment = new CallLogFragment();
+ FragmentManager fragmentManager = mActivity.getFragmentManager();
+ FragmentTransaction transaction = fragmentManager.beginTransaction();
+ transaction.add(R.id.fragment, mFragment);
+ transaction.commit();
+ // Wait for the fragment to be loaded.
+ getInstrumentation().waitForIdleSync();
+
+ mVoicemail = TelephonyManager.getDefault().getVoiceMailNumber();
mAdapter = mFragment.getAdapter();
// Do not process requests for details during tests. This would start a background thread,
// which makes the tests flaky.
diff --git a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
index ce3c14f..0488044 100644
--- a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
@@ -58,7 +58,7 @@
Context context = getContext();
Resources resources = context.getResources();
CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
- mPhoneNumberHelper = new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
+ mPhoneNumberHelper = new TestPhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
resources, callTypeHelper, mPhoneNumberHelper);
mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberHelper, resources);
diff --git a/tests/src/com/android/contacts/calllog/TestPhoneNumberHelper.java b/tests/src/com/android/contacts/calllog/TestPhoneNumberHelper.java
new file mode 100644
index 0000000..2bbd978
--- /dev/null
+++ b/tests/src/com/android/contacts/calllog/TestPhoneNumberHelper.java
@@ -0,0 +1,37 @@
+/*
+ * 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.calllog;
+
+import android.content.res.Resources;
+
+/**
+ * Modified version of {@link PhoneNumberHelper} to be used in tests that allows injecting the
+ * voicemail number.
+ */
+public final class TestPhoneNumberHelper extends PhoneNumberHelper {
+ private CharSequence mVoicemailNumber;
+
+ public TestPhoneNumberHelper(Resources resources, CharSequence voicemailNumber) {
+ super(resources);
+ mVoicemailNumber = voicemailNumber;
+ }
+
+ @Override
+ public boolean isVoicemailNumber(CharSequence number) {
+ return mVoicemailNumber.equals(number);
+ }
+}
\ No newline at end of file
diff --git a/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java b/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
index b2cb39c..8007aee 100644
--- a/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
+++ b/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
@@ -313,16 +313,6 @@
}
@Override
- public int getHeaderColor(Context context) {
- return 0;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0;
- }
-
- @Override
public boolean isGroupMembershipEditable() {
return true;
}
diff --git a/tests/src/com/android/contacts/model/AccountTypeManagerTest.java b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
index 09902a3..6f5bbf2 100644
--- a/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
+++ b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
@@ -183,16 +183,6 @@
}
@Override
- public int getHeaderColor(Context context) {
- return 0;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0;
- }
-
- @Override
public boolean isGroupMembershipEditable() {
return false;
}
diff --git a/tests/src/com/android/contacts/model/AccountTypeTest.java b/tests/src/com/android/contacts/model/AccountTypeTest.java
index 42fe200..8bc7429 100644
--- a/tests/src/com/android/contacts/model/AccountTypeTest.java
+++ b/tests/src/com/android/contacts/model/AccountTypeTest.java
@@ -73,14 +73,6 @@
return externalResID;
}
- @Override public int getHeaderColor(Context context) {
- return 0;
- }
-
- @Override public int getSideBarColor(Context context) {
- return 0;
- }
-
@Override public boolean isGroupMembershipEditable() {
return false;
}
@@ -128,16 +120,6 @@
}
@Override
- public int getHeaderColor(Context context) {
- return 0;
- }
-
- @Override
- public int getSideBarColor(Context context) {
- return 0;
- }
-
- @Override
public boolean isGroupMembershipEditable() {
return false;
}
diff --git a/tests/src/com/android/contacts/model/ExternalAccountTypeTest.java b/tests/src/com/android/contacts/model/ExternalAccountTypeTest.java
index eb8c059..ba3d0eb 100644
--- a/tests/src/com/android/contacts/model/ExternalAccountTypeTest.java
+++ b/tests/src/com/android/contacts/model/ExternalAccountTypeTest.java
@@ -19,9 +19,26 @@
import com.android.contacts.tests.R;
import android.content.Context;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.XmlResourceParser;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import java.util.List;
+
+import libcore.util.Objects;
+
/**
* Test case for {@link ExternalAccountType}.
*
@@ -30,7 +47,6 @@
*/
@SmallTest
public class ExternalAccountTypeTest extends AndroidTestCase {
-
public void testResolveExternalResId() {
final Context c = getContext();
// In this test we use the test package itself as an external package.
@@ -52,4 +68,111 @@
assertEquals(R.string.test_string, ExternalAccountType.resolveExternalResId(c,
"@string/test_string", packageName, ""));
}
+
+ /**
+ * Initialize with an invalid package name and see if type type will *not* be initialized.
+ */
+ public void testNoPackage() {
+ final ExternalAccountType type = new ExternalAccountType(getContext(),
+ "!!!no such package name!!!", false);
+ assertFalse(type.isInitialized());
+ }
+
+ /**
+ * Initialize with the name of an existing package, which has no contacts.xml metadata.
+ */
+ public void testNoMetadata() {
+ // Use the main application package, which does exist, but has no contacts.xml in it.
+ String packageName = getContext().getPackageName();
+ final ExternalAccountType type = new ExternalAccountType(getContext(),
+ packageName, false);
+ assertTrue(type.isInitialized());
+ }
+
+ /**
+ * Initialize with the test package itself and see if EditSchema is correctly parsed.
+ */
+ public void testEditSchema() {
+ final ExternalAccountType type = new ExternalAccountType(getContext(),
+ getTestContext().getPackageName(), false);
+
+ assertTrue(type.isInitialized());
+
+ // Let's just check if the DataKinds are registered.
+ assertNotNull(type.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME));
+ assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME));
+ assertNotNull(type.getKindForMimetype(Email.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Im.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Organization.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Note.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Website.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Event.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Relation.CONTENT_ITEM_TYPE));
+ }
+
+ /**
+ * Initialize with "contacts_fallback.xml" and compare the DataKinds to those of
+ * {@link FallbackAccountType}.
+ */
+ public void testEditSchema_fallback() {
+ final ExternalAccountType type = new ExternalAccountType(getContext(),
+ getTestContext().getPackageName(), false,
+ getTestContext().getResources().getXml(R.xml.contacts_fallback)
+ );
+
+ assertTrue(type.isInitialized());
+
+ // Create a fallback type with the same resource package name, and compare all the data
+ // kinds to its.
+ final AccountType reference = FallbackAccountType.createForTest(
+ getContext(), type.resPackageName);
+
+ assertsDataKindEquals(reference.getSortedDataKinds(), type.getSortedDataKinds());
+ }
+
+ private static void assertsDataKindEquals(List<DataKind> expectedKinds,
+ List<DataKind> actualKinds) {
+ final int count = Math.max(actualKinds.size(), expectedKinds.size());
+ for (int i = 0; i < count; i++) {
+ String actual = actualKinds.size() > i ? actualKinds.get(i).toString() : "(n/a)";
+ String expected = expectedKinds.size() > i ? expectedKinds.get(i).toString() : "(n/a)";
+
+ // Because assertEquals()'s output is not very friendly when comparing two similar
+ // strings, we manually do the check.
+ if (!Objects.equal(actual, expected)) {
+ final int commonPrefixEnd = findCommonPrefixEnd(actual, expected);
+ fail("Kind #" + i
+ + "\n[Actual]\n" + insertMarkerAt(actual, commonPrefixEnd)
+ + "\n[Expected]\n" + insertMarkerAt(expected, commonPrefixEnd));
+ }
+ }
+ }
+
+ private static int findCommonPrefixEnd(String s1, String s2) {
+ int i = 0;
+ for (;;) {
+ final boolean s1End = (s1.length() <= i);
+ final boolean s2End = (s2.length() <= i);
+ if (s1End || s2End) {
+ return i;
+ }
+ if (s1.charAt(i) != s2.charAt(i)) {
+ return i;
+ }
+ i++;
+ }
+ }
+
+ private static String insertMarkerAt(String s, int position) {
+ final String MARKER = "***";
+ if (position > s.length()) {
+ return s + MARKER;
+ } else {
+ return new StringBuilder(s).insert(position, MARKER).toString();
+ }
+ }
}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestAuthenticationService.java b/tests/src/com/android/contacts/tests/testauth/TestAuthenticationService.java
new file mode 100644
index 0000000..84f3f0f
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestAuthenticationService.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.contacts.tests.testauth;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+
+public abstract class TestAuthenticationService extends Service {
+
+ private TestAuthenticator mAuthenticator;
+
+ @Override
+ public void onCreate() {
+ Log.v(TestauthConstants.LOG_TAG, this + " Service started.");
+ mAuthenticator = new TestAuthenticator(this);
+ }
+
+ @Override
+ public void onDestroy() {
+ Log.v(TestauthConstants.LOG_TAG, this + " Service stopped.");
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ Log.v(TestauthConstants.LOG_TAG, this + " getBinder() intent=" + intent);
+ return mAuthenticator.getIBinder();
+ }
+
+ public static class Basic extends TestAuthenticationService {
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestAuthenticator.java b/tests/src/com/android/contacts/tests/testauth/TestAuthenticator.java
new file mode 100644
index 0000000..97e2e4d
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestAuthenticator.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.contacts.tests.testauth;
+
+import android.accounts.AbstractAccountAuthenticator;
+import android.accounts.Account;
+import android.accounts.AccountAuthenticatorResponse;
+import android.accounts.AccountManager;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+/**
+ * Simple authenticator. It has no "login" dialogs/activities. When you add a new account, it'll
+ * just create a new account with a unique name.
+ */
+class TestAuthenticator extends AbstractAccountAuthenticator {
+ private static final String PASSWORD = "xxx"; // any string will do.
+
+ // To remember the last user-ID.
+ private static final String PREF_KEY_LAST_USER_ID = "TestAuthenticator.PREF_KEY_LAST_USER_ID";
+
+ private final Context mContext;
+
+ public TestAuthenticator(Context context) {
+ super(context);
+ mContext = context.getApplicationContext();
+ }
+
+ /**
+ * @return a new, unique username.
+ */
+ private String newUniqueUserName() {
+ final SharedPreferences prefs =
+ PreferenceManager.getDefaultSharedPreferences(mContext);
+ final int nextId = prefs.getInt(PREF_KEY_LAST_USER_ID, 0) + 1;
+ prefs.edit().putInt(PREF_KEY_LAST_USER_ID, nextId).apply();
+
+ return "User-" + nextId;
+ }
+
+ /**
+ * Create a new account with the name generated by {@link #newUniqueUserName()}.
+ */
+ @Override
+ public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
+ String authTokenType, String[] requiredFeatures, Bundle options) {
+ Log.v(TestauthConstants.LOG_TAG, "addAccount() type=" + accountType);
+ final Bundle bundle = new Bundle();
+
+ final Account account = new Account(newUniqueUserName(), accountType);
+
+ // Create an account.
+ AccountManager.get(mContext).addAccountExplicitly(account, PASSWORD, null);
+
+ // And return it.
+ bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
+ return bundle;
+ }
+
+ /**
+ * Just return the user name as the authtoken.
+ */
+ @Override
+ public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
+ String authTokenType, Bundle loginOptions) {
+ Log.v(TestauthConstants.LOG_TAG, "getAuthToken() account=" + account);
+ final Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
+ bundle.putString(AccountManager.KEY_AUTHTOKEN, account.name);
+
+ return bundle;
+ }
+
+ @Override
+ public Bundle confirmCredentials(
+ AccountAuthenticatorResponse response, Account account, Bundle options) {
+ Log.v(TestauthConstants.LOG_TAG, "confirmCredentials()");
+ return null;
+ }
+
+ @Override
+ public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
+ Log.v(TestauthConstants.LOG_TAG, "editProperties()");
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getAuthTokenLabel(String authTokenType) {
+ // null means we don't support multiple authToken types
+ Log.v(TestauthConstants.LOG_TAG, "getAuthTokenLabel()");
+ return null;
+ }
+
+ @Override
+ public Bundle hasFeatures(
+ AccountAuthenticatorResponse response, Account account, String[] features) {
+ // This call is used to query whether the Authenticator supports
+ // specific features. We don't expect to get called, so we always
+ // return false (no) for any queries.
+ Log.v(TestauthConstants.LOG_TAG, "hasFeatures()");
+ final Bundle result = new Bundle();
+ result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
+ return result;
+ }
+
+ @Override
+ public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account,
+ String authTokenType, Bundle loginOptions) {
+ Log.v(TestauthConstants.LOG_TAG, "updateCredentials()");
+ return null;
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestSyncAdapter.java b/tests/src/com/android/contacts/tests/testauth/TestSyncAdapter.java
new file mode 100644
index 0000000..9e6fbf8
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestSyncAdapter.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.android.contacts.tests.testauth;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.AbstractThreadedSyncAdapter;
+import android.content.ContentProviderClient;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.SyncResult;
+import android.os.Bundle;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+
+/**
+ * Simple (minimal) sync adapter.
+ *
+ */
+public class TestSyncAdapter extends AbstractThreadedSyncAdapter {
+ private final AccountManager mAccountManager;
+
+ private final Context mContext;
+
+ public TestSyncAdapter(Context context, boolean autoInitialize) {
+ super(context, autoInitialize);
+ mContext = context.getApplicationContext();
+ mAccountManager = AccountManager.get(mContext);
+ }
+
+ /**
+ * Doesn't actually sync, but sweep up all existing local-only contacts.
+ */
+ @Override
+ public void onPerformSync(Account account, Bundle extras, String authority,
+ ContentProviderClient provider, SyncResult syncResult) {
+ Log.v(TestauthConstants.LOG_TAG, "TestSyncAdapter.onPerformSync() account=" + account);
+
+ // First, claim all local-only contacts, if any.
+ ContentResolver cr = mContext.getContentResolver();
+ ContentValues values = new ContentValues();
+ values.put(RawContacts.ACCOUNT_NAME, account.name);
+ values.put(RawContacts.ACCOUNT_TYPE, account.type);
+ final int count = cr.update(RawContacts.CONTENT_URI, values,
+ RawContacts.ACCOUNT_NAME + " IS NULL AND " + RawContacts.ACCOUNT_TYPE + " IS NULL",
+ null);
+ if (count > 0) {
+ Log.v(TestauthConstants.LOG_TAG, "Claimed " + count + " local raw contacts");
+ }
+
+ // TODO: Clear isDirty flag
+ // TODO: Remove isDeleted raw contacts
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestSyncService.java b/tests/src/com/android/contacts/tests/testauth/TestSyncService.java
new file mode 100644
index 0000000..9928777
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestSyncService.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.android.contacts.tests.testauth;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+public abstract class TestSyncService extends Service {
+
+ private static TestSyncAdapter sSyncAdapter;
+
+ @Override
+ public void onCreate() {
+ if (sSyncAdapter == null) {
+ sSyncAdapter = new TestSyncAdapter(getApplicationContext(), true);
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return sSyncAdapter.getSyncAdapterBinder();
+ }
+
+ public static class Basic extends TestSyncService {
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestauthConstants.java b/tests/src/com/android/contacts/tests/testauth/TestauthConstants.java
new file mode 100644
index 0000000..717ed35
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestauthConstants.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.contacts.tests.testauth;
+
+class TestauthConstants {
+ public static final String LOG_TAG = "Testauth";
+}