Merge "Stop showing default thumbnail in photo manager"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9d5381a..87ab82c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,15 +16,16 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.contacts"
- android:sharedUserId="android.uid.shared"
- android:sharedUserLabel="@string/sharedUserLabel"
->
+ android:sharedUserId="android.uid.shared">
<original-package android:name="com.android.contacts" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
+ <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.WRITE_PROFILE" />
<uses-permission android:name="android.permission.INTERNET" />
@@ -48,7 +49,6 @@
android:name="com.android.contacts.ContactsApplication"
android:label="@string/contactsList"
android:icon="@mipmap/ic_launcher_contacts"
- android:process="android.process.acore"
android:taskAffinity="android.task.contacts"
android:hardwareAccelerated="true"
>
diff --git a/res/drawable-hdpi/dial_background_texture.png b/res/drawable-hdpi/dial_background_texture.png
index 5b299fd..7ed0984 100644
--- a/res/drawable-hdpi/dial_background_texture.png
+++ b/res/drawable-hdpi/dial_background_texture.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_0_wht.png b/res/drawable-hdpi/dial_num_0_wht.png
index a0720f3..9d7fc62 100644
--- a/res/drawable-hdpi/dial_num_0_wht.png
+++ b/res/drawable-hdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_1_wht.png b/res/drawable-hdpi/dial_num_1_wht.png
index 0c79720..e941c52 100644
--- a/res/drawable-hdpi/dial_num_1_wht.png
+++ b/res/drawable-hdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_2_wht.png b/res/drawable-hdpi/dial_num_2_wht.png
index ab90531..fc5540b 100644
--- a/res/drawable-hdpi/dial_num_2_wht.png
+++ b/res/drawable-hdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_3_wht.png b/res/drawable-hdpi/dial_num_3_wht.png
index 956cba9..45637b9 100644
--- a/res/drawable-hdpi/dial_num_3_wht.png
+++ b/res/drawable-hdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_4_wht.png b/res/drawable-hdpi/dial_num_4_wht.png
index 34e157c..af8c8aa 100644
--- a/res/drawable-hdpi/dial_num_4_wht.png
+++ b/res/drawable-hdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_5_wht.png b/res/drawable-hdpi/dial_num_5_wht.png
index 4a3560a..20ab0b1 100644
--- a/res/drawable-hdpi/dial_num_5_wht.png
+++ b/res/drawable-hdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_6_wht.png b/res/drawable-hdpi/dial_num_6_wht.png
index a60420b..8811b4b 100644
--- a/res/drawable-hdpi/dial_num_6_wht.png
+++ b/res/drawable-hdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_7_wht.png b/res/drawable-hdpi/dial_num_7_wht.png
index 95e4cff..ed6d749 100644
--- a/res/drawable-hdpi/dial_num_7_wht.png
+++ b/res/drawable-hdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_8_wht.png b/res/drawable-hdpi/dial_num_8_wht.png
index 4b17084..6844aeb 100644
--- a/res/drawable-hdpi/dial_num_8_wht.png
+++ b/res/drawable-hdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_9_wht.png b/res/drawable-hdpi/dial_num_9_wht.png
index f772901..df294be 100644
--- a/res/drawable-hdpi/dial_num_9_wht.png
+++ b/res/drawable-hdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_pound_wht.png b/res/drawable-hdpi/dial_num_pound_wht.png
index 1d7f55a..46316e5 100644
--- a/res/drawable-hdpi/dial_num_pound_wht.png
+++ b/res/drawable-hdpi/dial_num_pound_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_star_wht.png b/res/drawable-hdpi/dial_num_star_wht.png
index 2add63b..c36e31c 100644
--- a/res/drawable-hdpi/dial_num_star_wht.png
+++ b/res/drawable-hdpi/dial_num_star_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_delete.png b/res/drawable-hdpi/ic_dial_action_delete.png
index f93a308..0bf8563 100644
--- a/res/drawable-hdpi/ic_dial_action_delete.png
+++ b/res/drawable-hdpi/ic_dial_action_delete.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_text_holo_dark.png b/res/drawable-hdpi/ic_text_holo_dark.png
index 1816201..6d21e42 100644
--- a/res/drawable-hdpi/ic_text_holo_dark.png
+++ b/res/drawable-hdpi/ic_text_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/list_activated_holo.9.png b/res/drawable-hdpi/list_activated_holo.9.png
index 36ccb79..7b89319 100644
--- a/res/drawable-hdpi/list_activated_holo.9.png
+++ b/res/drawable-hdpi/list_activated_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/list_focused_holo.9.png b/res/drawable-hdpi/list_focused_holo.9.png
index 54c5c2d..e962ce8 100644
--- a/res/drawable-hdpi/list_focused_holo.9.png
+++ b/res/drawable-hdpi/list_focused_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/list_pressed_holo.9.png b/res/drawable-hdpi/list_pressed_holo.9.png
index 423fa4b..dd183c0 100644
--- a/res/drawable-hdpi/list_pressed_holo.9.png
+++ b/res/drawable-hdpi/list_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_background_texture.png b/res/drawable-mdpi/dial_background_texture.png
index 881f3a0..f0ba700 100644
--- a/res/drawable-mdpi/dial_background_texture.png
+++ b/res/drawable-mdpi/dial_background_texture.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_0_wht.png b/res/drawable-mdpi/dial_num_0_wht.png
index 5391fb3..96a0dcd 100644
--- a/res/drawable-mdpi/dial_num_0_wht.png
+++ b/res/drawable-mdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_1_wht.png b/res/drawable-mdpi/dial_num_1_wht.png
index ff8f125..56dbca3 100644
--- a/res/drawable-mdpi/dial_num_1_wht.png
+++ b/res/drawable-mdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_2_wht.png b/res/drawable-mdpi/dial_num_2_wht.png
index 041bafb..4c0991c 100644
--- a/res/drawable-mdpi/dial_num_2_wht.png
+++ b/res/drawable-mdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_3_wht.png b/res/drawable-mdpi/dial_num_3_wht.png
index b91b4f5..81bf770 100644
--- a/res/drawable-mdpi/dial_num_3_wht.png
+++ b/res/drawable-mdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_4_wht.png b/res/drawable-mdpi/dial_num_4_wht.png
index 912b4cb..5f07476 100644
--- a/res/drawable-mdpi/dial_num_4_wht.png
+++ b/res/drawable-mdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_5_wht.png b/res/drawable-mdpi/dial_num_5_wht.png
index efd385f..5cf9c7a 100644
--- a/res/drawable-mdpi/dial_num_5_wht.png
+++ b/res/drawable-mdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_6_wht.png b/res/drawable-mdpi/dial_num_6_wht.png
index c0f47c5..ceffb29 100644
--- a/res/drawable-mdpi/dial_num_6_wht.png
+++ b/res/drawable-mdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_7_wht.png b/res/drawable-mdpi/dial_num_7_wht.png
index 5644f2b..022ef9c 100644
--- a/res/drawable-mdpi/dial_num_7_wht.png
+++ b/res/drawable-mdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_8_wht.png b/res/drawable-mdpi/dial_num_8_wht.png
index d0c517d..c470e68 100644
--- a/res/drawable-mdpi/dial_num_8_wht.png
+++ b/res/drawable-mdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_9_wht.png b/res/drawable-mdpi/dial_num_9_wht.png
index fb443ec..27d94ef 100644
--- a/res/drawable-mdpi/dial_num_9_wht.png
+++ b/res/drawable-mdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_pound_wht.png b/res/drawable-mdpi/dial_num_pound_wht.png
index 11751ec..68908c3 100644
--- a/res/drawable-mdpi/dial_num_pound_wht.png
+++ b/res/drawable-mdpi/dial_num_pound_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_star_wht.png b/res/drawable-mdpi/dial_num_star_wht.png
index 61b24c1..cb8aa28 100644
--- a/res/drawable-mdpi/dial_num_star_wht.png
+++ b/res/drawable-mdpi/dial_num_star_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_delete.png b/res/drawable-mdpi/ic_dial_action_delete.png
index 32b0022..98341e9 100644
--- a/res/drawable-mdpi/ic_dial_action_delete.png
+++ b/res/drawable-mdpi/ic_dial_action_delete.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_text_holo_dark.png b/res/drawable-mdpi/ic_text_holo_dark.png
index bbaa84f..80b95ee 100644
--- a/res/drawable-mdpi/ic_text_holo_dark.png
+++ b/res/drawable-mdpi/ic_text_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/list_activated_holo.9.png b/res/drawable-mdpi/list_activated_holo.9.png
index f7cd24e..4d98919 100644
--- a/res/drawable-mdpi/list_activated_holo.9.png
+++ b/res/drawable-mdpi/list_activated_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/list_focused_holo.9.png b/res/drawable-mdpi/list_focused_holo.9.png
index 32cb628..6e041f3 100644
--- a/res/drawable-mdpi/list_focused_holo.9.png
+++ b/res/drawable-mdpi/list_focused_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/list_pressed_holo.9.png b/res/drawable-mdpi/list_pressed_holo.9.png
index 7ea8666..9358dd8 100644
--- a/res/drawable-mdpi/list_pressed_holo.9.png
+++ b/res/drawable-mdpi/list_pressed_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/bg_status_contact_widget.9.png b/res/drawable-xhdpi/bg_status_contact_widget.9.png
index db34bf4..ced5296 100644
--- a/res/drawable-xhdpi/bg_status_contact_widget.9.png
+++ b/res/drawable-xhdpi/bg_status_contact_widget.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/contacts_widget_preview.png b/res/drawable-xhdpi/contacts_widget_preview.png
index 65ac914..1f42ca0 100644
--- a/res/drawable-xhdpi/contacts_widget_preview.png
+++ b/res/drawable-xhdpi/contacts_widget_preview.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_background_texture.png b/res/drawable-xhdpi/dial_background_texture.png
index 4c8617a..3d6e8c7 100644
--- a/res/drawable-xhdpi/dial_background_texture.png
+++ b/res/drawable-xhdpi/dial_background_texture.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_0_wht.png b/res/drawable-xhdpi/dial_num_0_wht.png
index 99aca70..f6f96cc 100644
--- a/res/drawable-xhdpi/dial_num_0_wht.png
+++ b/res/drawable-xhdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_1_wht.png b/res/drawable-xhdpi/dial_num_1_wht.png
index 5a54bfd..8333aba 100644
--- a/res/drawable-xhdpi/dial_num_1_wht.png
+++ b/res/drawable-xhdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_2_wht.png b/res/drawable-xhdpi/dial_num_2_wht.png
index 3407d79..02f8fdf 100644
--- a/res/drawable-xhdpi/dial_num_2_wht.png
+++ b/res/drawable-xhdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_3_wht.png b/res/drawable-xhdpi/dial_num_3_wht.png
index dd16bbb..44383b5 100644
--- a/res/drawable-xhdpi/dial_num_3_wht.png
+++ b/res/drawable-xhdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_4_wht.png b/res/drawable-xhdpi/dial_num_4_wht.png
index 98f8773..f90cb73 100644
--- a/res/drawable-xhdpi/dial_num_4_wht.png
+++ b/res/drawable-xhdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_5_wht.png b/res/drawable-xhdpi/dial_num_5_wht.png
index 12a92bf..c41c615 100644
--- a/res/drawable-xhdpi/dial_num_5_wht.png
+++ b/res/drawable-xhdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_6_wht.png b/res/drawable-xhdpi/dial_num_6_wht.png
index 39c3eda..4c7a235 100644
--- a/res/drawable-xhdpi/dial_num_6_wht.png
+++ b/res/drawable-xhdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_7_wht.png b/res/drawable-xhdpi/dial_num_7_wht.png
index 5e3a0b0..fabca99 100644
--- a/res/drawable-xhdpi/dial_num_7_wht.png
+++ b/res/drawable-xhdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_8_wht.png b/res/drawable-xhdpi/dial_num_8_wht.png
index d68142d..7bd70b0 100644
--- a/res/drawable-xhdpi/dial_num_8_wht.png
+++ b/res/drawable-xhdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_9_wht.png b/res/drawable-xhdpi/dial_num_9_wht.png
index b34bc1d..207276c 100644
--- a/res/drawable-xhdpi/dial_num_9_wht.png
+++ b/res/drawable-xhdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_pound_wht.png b/res/drawable-xhdpi/dial_num_pound_wht.png
index a4ead0a..b2cac17 100644
--- a/res/drawable-xhdpi/dial_num_pound_wht.png
+++ b/res/drawable-xhdpi/dial_num_pound_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_star_wht.png b/res/drawable-xhdpi/dial_num_star_wht.png
index ba0a787..2862c45 100644
--- a/res/drawable-xhdpi/dial_num_star_wht.png
+++ b/res/drawable-xhdpi/dial_num_star_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/frame_thumbnail_contact_widget_focused_holo.png b/res/drawable-xhdpi/frame_thumbnail_contact_widget_focused_holo.png
index a05ca8a..157ef56 100644
--- a/res/drawable-xhdpi/frame_thumbnail_contact_widget_focused_holo.png
+++ b/res/drawable-xhdpi/frame_thumbnail_contact_widget_focused_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/frame_thumbnail_contact_widget_holo.png b/res/drawable-xhdpi/frame_thumbnail_contact_widget_holo.png
index bf2e4a8..7719710 100644
--- a/res/drawable-xhdpi/frame_thumbnail_contact_widget_holo.png
+++ b/res/drawable-xhdpi/frame_thumbnail_contact_widget_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/frame_thumbnail_contact_widget_pressed_holo.png b/res/drawable-xhdpi/frame_thumbnail_contact_widget_pressed_holo.png
index 6541c62..8c5008b 100644
--- a/res/drawable-xhdpi/frame_thumbnail_contact_widget_pressed_holo.png
+++ b/res/drawable-xhdpi/frame_thumbnail_contact_widget_pressed_holo.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_delete.png b/res/drawable-xhdpi/ic_dial_action_delete.png
index 9c0b4f0..989e8b1 100644
--- a/res/drawable-xhdpi/ic_dial_action_delete.png
+++ b/res/drawable-xhdpi/ic_dial_action_delete.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_text_holo_dark.png b/res/drawable-xhdpi/ic_text_holo_dark.png
index 8c697d9..e80a042 100644
--- a/res/drawable-xhdpi/ic_text_holo_dark.png
+++ b/res/drawable-xhdpi/ic_text_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/list_activated_holo.9.png b/res/drawable-xhdpi/list_activated_holo.9.png
index bb9a7f9..4e13add 100644
--- a/res/drawable-xhdpi/list_activated_holo.9.png
+++ b/res/drawable-xhdpi/list_activated_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/list_focused_holo.9.png b/res/drawable-xhdpi/list_focused_holo.9.png
index 6051708..9c90c2b 100644
--- a/res/drawable-xhdpi/list_focused_holo.9.png
+++ b/res/drawable-xhdpi/list_focused_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/list_pressed_holo.9.png b/res/drawable-xhdpi/list_pressed_holo.9.png
index f4b4c38..d0fc7e0 100644
--- a/res/drawable-xhdpi/list_pressed_holo.9.png
+++ b/res/drawable-xhdpi/list_pressed_holo.9.png
Binary files differ
diff --git a/res/layout/playback_layout.xml b/res/layout/playback_layout.xml
index 45e7ad9..05b3e43 100644
--- a/res/layout/playback_layout.xml
+++ b/res/layout/playback_layout.xml
@@ -77,6 +77,16 @@
android:layout_centerHorizontal="true"
android:layout_marginTop="10dip"
/>
+ <TextView
+ android:id="@+id/playback_speed_text"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:textSize="14sp"
+ android:layout_alignParentTop="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="10dip"
+ android:alpha="0"
+ />
<ImageButton
android:id="@+id/rate_decrease_button"
android:src="@drawable/ic_minus_holo_dark"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 02246ea..577e933 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android-kernprogramme"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Foon"</string>
<!-- no translation found for people (1048457247435785074) -->
<skip />
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index a439aa3..f9e98ec 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android ኮር ትግበራ"</string>
<string name="launcherDialer" msgid="8636288196618486553">"ስልክ"</string>
<!-- no translation found for people (1048457247435785074) -->
<skip />
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 7e8bd7c..3c690ec 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"تطبيقات Android المركزية"</string>
<string name="launcherDialer" msgid="8636288196618486553">"الهاتف"</string>
<string name="people" msgid="1048457247435785074">"أشخاص"</string>
<string name="contactsList" msgid="8661624236494819731">"جهات الاتصال"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 445d4bf..98ca370 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Основни приложения на Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Телефон"</string>
<string name="people" msgid="1048457247435785074">"Хора"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 87179d8..6bd1768 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Aplicacions bàsiques d\'Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telèfon"</string>
<string name="people" msgid="1048457247435785074">"Persones"</string>
<string name="contactsList" msgid="8661624236494819731">"Contactes"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 097b093..a949e4c 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Lidé"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index d7c9249..c7bba00 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android-kerneprogrammer"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Personer"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakter"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4a580a9..5bc6fdc 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Kontakte"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakte"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 6a1d856..7c7f619 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Βασικές εφαρμογές Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Τηλέφωνο"</string>
<string name="people" msgid="1048457247435785074">"Άτομα"</string>
<string name="contactsList" msgid="8661624236494819731">"Επαφές"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 6e0d9b6..c0452c4 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Phone"</string>
<string name="people" msgid="1048457247435785074">"People"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 121d64e..61c39cd 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Aplicaciones del núcleo de Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Teléfono"</string>
<string name="people" msgid="1048457247435785074">"Personas"</string>
<string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 9ff7139..cc10d1e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Aplicaciones básicas"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Teléfono"</string>
<string name="people" msgid="1048457247435785074">"Contactos"</string>
<string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index d498cb6..da4b404 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"برنامه های Android Core"</string>
<string name="launcherDialer" msgid="8636288196618486553">"تلفن"</string>
<string name="people" msgid="1048457247435785074">"افراد"</string>
<string name="contactsList" msgid="8661624236494819731">"مخاطبین"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index bfd0fc2..899e394 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Androidin ydinsovellukset"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Puhelin"</string>
<string name="people" msgid="1048457247435785074">"Henkilöt"</string>
<string name="contactsList" msgid="8661624236494819731">"Yhteystiedot"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index e77604d..ae55c7a 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Applications de base Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Téléphone"</string>
<string name="people" msgid="1048457247435785074">"Contacts"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 0880d6a..8c170d9 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Matične aplikacije za Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Osobe"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 822e926..600e893 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Alap Android-alkalmazások"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Személyek"</string>
<string name="contactsList" msgid="8661624236494819731">"Címtár"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 46f2939..9d9683c 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Aplikasi Inti Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telepon"</string>
<string name="people" msgid="1048457247435785074">"Orang"</string>
<string name="contactsList" msgid="8661624236494819731">"Kenalan"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 5ed9401..bcb810a 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefono"</string>
<string name="people" msgid="1048457247435785074">"Persone"</string>
<string name="contactsList" msgid="8661624236494819731">"Contatti"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index e4d9610..3889f14 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"טלפון"</string>
<string name="people" msgid="1048457247435785074">"אנשים"</string>
<string name="contactsList" msgid="8661624236494819731">"אנשי קשר"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index c809e43..0c372cd 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"電話"</string>
<string name="people" msgid="1048457247435785074">"ユーザー"</string>
<string name="contactsList" msgid="8661624236494819731">"連絡先"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index dfabf75..ebdea4a 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core 애플리케이션"</string>
<string name="launcherDialer" msgid="8636288196618486553">"휴대전화"</string>
<string name="people" msgid="1048457247435785074">"인물"</string>
<string name="contactsList" msgid="8661624236494819731">"주소록"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 626e9de..0bad711 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Pagrindinės „Android“ programos"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefonas"</string>
<string name="people" msgid="1048457247435785074">"Žmonės"</string>
<string name="contactsList" msgid="8661624236494819731">"Adresinė"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 8132389..d6bdd52 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Tālrunis"</string>
<string name="people" msgid="1048457247435785074">"People"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontaktpersonas"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index ecac3ec..1508a1a 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Apl Teras Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Orang"</string>
<string name="contactsList" msgid="8661624236494819731">"Kenalan"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 6c23418..9fc6205 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Kjerneprogrammer for Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Personer"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakter"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index be644e3..8222c2d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android-kerntoepassingen"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefoon"</string>
<string name="people" msgid="1048457247435785074">"Personen"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacten"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 665ab3e..ffaa9a6 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Aplikacje główne systemu Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Osoby"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 342b8e2..6a71e93 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Principais aplicativos do Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefone"</string>
<string name="people" msgid="1048457247435785074">"Pessoas"</string>
<string name="contactsList" msgid="8661624236494819731">"Contatos"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 52f907a..477c4de 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Applicaziuns da basa dad Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<!-- no translation found for people (1048457247435785074) -->
<skip />
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 8c00e5d..a7da905 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Persoane"</string>
<string name="contactsList" msgid="8661624236494819731">"Agendă"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 90184f7..e590dc3 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Основные приложения Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Телефон"</string>
<string name="people" msgid="1048457247435785074">"Люди"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакты"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 29cfafa..4deca50 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefón"</string>
<string name="people" msgid="1048457247435785074">"Ľudia"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 174601f..2de3255 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Osnovni programi Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Ljudje"</string>
<string name="contactsList" msgid="8661624236494819731">"Stiki"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 0d9f415..74efc4a 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core апликације"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Телефон"</string>
<string name="people" msgid="1048457247435785074">"Особе"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 1bbc85e..e04ac17 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Personer"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakter"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index ddb776c..5506f31 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Programu Msingi za Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Simu"</string>
<!-- no translation found for people (1048457247435785074) -->
<skip />
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 14035ff..690e42e 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"แอปพลิเคชันหลักของ Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"โทรศัพท์"</string>
<string name="people" msgid="1048457247435785074">"บุคคล"</string>
<string name="contactsList" msgid="8661624236494819731">"รายชื่อในสมุดโทรศัพท์"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 2f65b74..46b1d1d 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telepono"</string>
<string name="people" msgid="1048457247435785074">"Mga Tao"</string>
<string name="contactsList" msgid="8661624236494819731">"Mga Contact"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 29b3107..7e3e623 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android Core Apps"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
<string name="people" msgid="1048457247435785074">"Kişiler"</string>
<string name="contactsList" msgid="8661624236494819731">"Kişiler"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 1a90340..01b4919 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Служби Android Core"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Телеф."</string>
<string name="people" msgid="1048457247435785074">"Люди"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 63e83fc..92a8a97 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Ứng dụng Lõi Android"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Điện thoại"</string>
<string name="people" msgid="1048457247435785074">"Mọi người"</string>
<string name="contactsList" msgid="8661624236494819731">"Danh bạ"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index ef0b222..c496165 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android 核心应用程序"</string>
<string name="launcherDialer" msgid="8636288196618486553">"拨号"</string>
<string name="people" msgid="1048457247435785074">"用户"</string>
<string name="contactsList" msgid="8661624236494819731">"通讯录"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 92aeef5..e13e5b6 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Android 核心應用程式"</string>
<string name="launcherDialer" msgid="8636288196618486553">"電話"</string>
<string name="people" msgid="1048457247435785074">"使用者"</string>
<string name="contactsList" msgid="8661624236494819731">"聯絡人"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 9bb4ff8..b369466 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -16,7 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="sharedUserLabel" msgid="7965035505237135241">"Izinhlelo Zokusebenza ze-Android Core"</string>
<string name="launcherDialer" msgid="8636288196618486553">"Ifoni"</string>
<!-- no translation found for people (1048457247435785074) -->
<skip />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5bb6c2b..757b367 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -14,10 +14,6 @@
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Label for this app's shared user ID (and thus for all other
- apps sharing the uid). -->
- <string name="sharedUserLabel">Android Core Apps</string>
-
<!-- Title for the activity that dials the phone. This is the name
used in the Launcher icon. -->
<string name="launcherDialer">Phone</string>
diff --git a/src/com/android/contacts/activities/ContactDetailActivity.java b/src/com/android/contacts/activities/ContactDetailActivity.java
index 53c7f5e..3cd07ca 100644
--- a/src/com/android/contacts/activities/ContactDetailActivity.java
+++ b/src/com/android/contacts/activities/ContactDetailActivity.java
@@ -28,6 +28,7 @@
import com.android.contacts.detail.ContactDetailViewPagerAdapter;
import com.android.contacts.detail.ContactLoaderFragment;
import com.android.contacts.detail.ContactLoaderFragment.ContactLoaderFragmentListener;
+import com.android.contacts.detail.TabCarouselScrollManager;
import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.model.AccountWithDataSet;
import com.android.contacts.util.PhoneCapabilityTester;
@@ -55,8 +56,6 @@
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
import android.widget.CheckBox;
import android.widget.Toast;
@@ -153,8 +152,7 @@
}
mDetailFragment.setListener(mFragmentListener);
- mDetailFragment.setVerticalScrollListener(mVerticalScrollListener);
- mUpdatesFragment.setVerticalScrollListener(mVerticalScrollListener);
+ TabCarouselScrollManager.bind(mTabCarousel, mDetailFragment, mUpdatesFragment);
mDetailFragment.setData(mLookupUri, mContactData);
mUpdatesFragment.setData(mLookupUri, mContactData);
@@ -435,6 +433,7 @@
mRootView.addView(mContentView);
mDetailFragment = (ContactDetailFragment) getFragmentManager().findFragmentById(
R.id.contact_detail_fragment);
+ mDetailFragment.setListener(mFragmentListener);
}
// Reset contact data
if (mDetailFragment != null) {
@@ -555,34 +554,6 @@
}
};
- private OnScrollListener mVerticalScrollListener = new OnScrollListener() {
-
- @Override
- public void onScroll(
- AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- if (mTabCarousel == null) {
- return;
- }
- // If the FIRST item is not visible on the screen, then the carousel must be pinned
- // at the top of the screen.
- if (firstVisibleItem != 0) {
- mTabCarousel.setY(-mTabCarousel.getAllowedVerticalScrollLength());
- return;
- }
- View topView = view.getChildAt(firstVisibleItem);
- if (topView == null) {
- return;
- }
- int amtToScroll = Math.max((int) view.getChildAt(firstVisibleItem).getY(),
- - mTabCarousel.getAllowedVerticalScrollLength());
- mTabCarousel.setY(amtToScroll);
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {}
-
- };
-
/**
* This interface should be implemented by {@link Fragment}s within this
* activity so that the activity can determine whether the currently
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index ae70c0b..c2c7c12 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -163,7 +163,6 @@
private CallLogAdapter mAdapter;
private CallLogQueryHandler mCallLogQueryHandler;
private String mVoiceMailNumber;
- private String mCurrentCountryIso;
private boolean mScrollToTop;
private boolean mShowOptionsMenu;
@@ -228,11 +227,15 @@
}
/** Adapter class to fill in data for the Call Log */
- public final class CallLogAdapter extends GroupingListAdapter
+ public static final class CallLogAdapter extends GroupingListAdapter
implements Runnable, ViewTreeObserver.OnPreDrawListener, GroupCreator {
/** The time in millis to delay starting the thread processing requests. */
private static final int START_PROCESSING_REQUESTS_DELAY_MILLIS = 1000;
+ private final Context mContext;
+ private final String mCurrentCountryIso;
+ private final CallLogQueryHandler mCallLogQueryHandler;
+
/**
* A cache of the contact details for the phone numbers in the call log.
* <p>
@@ -275,7 +278,7 @@
public void onClick(View view) {
IntentProvider intentProvider = (IntentProvider) view.getTag();
if (intentProvider != null) {
- startActivity(intentProvider.getIntent(CallLogFragment.this.getActivity()));
+ mContext.startActivity(intentProvider.getIntent(mContext));
}
}
};
@@ -304,18 +307,23 @@
}
};
- public CallLogAdapter() {
- super(getActivity());
+ public CallLogAdapter(Context context, CallLogQueryHandler callLogQueryHandler,
+ String currentCountryIso, String voicemailNumber) {
+ super(context);
+
+ mContext = context;
+ mCurrentCountryIso = currentCountryIso;
+ mCallLogQueryHandler = callLogQueryHandler;
mContactInfoCache = ExpirableCache.create(CONTACT_INFO_CACHE_SIZE);
mRequests = new LinkedList<String>();
mPreDrawListener = null;
- Resources resources = getResources();
+ Resources resources = mContext.getResources();
CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
- mContactPhotoManager = ContactPhotoManager.getInstance(getActivity());
- mPhoneNumberHelper = new PhoneNumberHelper(getResources(), mVoiceMailNumber);
+ mContactPhotoManager = ContactPhotoManager.getInstance(mContext);
+ mPhoneNumberHelper = new PhoneNumberHelper(resources, voicemailNumber);
PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
resources, callTypeHelper, mPhoneNumberHelper);
mCallLogViewsHelper =
@@ -329,7 +337,8 @@
@Override
protected void onContentChanged() {
// Start async requery
- startCallsQuery();
+ setLoading(true);
+ mCallLogQueryHandler.fetchAllCalls();
}
void setLoading(boolean loading) {
@@ -427,7 +436,7 @@
String[] selectionArgs = new String[] { sipAddress.toUpperCase() };
Cursor dataTableCursor =
- getActivity().getContentResolver().query(
+ mContext.getContentResolver().query(
contactRef,
null, // projection
selection, // selection
@@ -492,7 +501,7 @@
// "number" is a regular phone number, so use the
// PhoneLookup table:
Cursor phonesCursor =
- getActivity().getContentResolver().query(
+ mContext.getContentResolver().query(
Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(number)),
PhoneQuery._PROJECTION, null, null, null);
@@ -824,6 +833,32 @@
public void addGroup(int cursorPosition, int size, boolean expanded) {
super.addGroup(cursorPosition, size, expanded);
}
+
+ /**
+ * Format the given phone number
+ *
+ * @param number the number to be formatted.
+ * @param normalizedNumber the normalized number of the given number.
+ * @param countryIso the ISO 3166-1 two letters country code, the country's
+ * convention will be used to format the number if the normalized
+ * phone is null.
+ *
+ * @return the formatted number, or the given number if it was formatted.
+ */
+ private String formatPhoneNumber(String number, String normalizedNumber,
+ String countryIso) {
+ if (TextUtils.isEmpty(number)) {
+ return "";
+ }
+ // If "number" is really a SIP address, don't try to do any formatting at all.
+ if (PhoneNumberUtils.isUriNumber(number)) {
+ return number;
+ }
+ if (TextUtils.isEmpty(countryIso)) {
+ countryIso = mCurrentCountryIso;
+ }
+ return PhoneNumberUtils.formatNumber(number, normalizedNumber, countryIso);
+ }
}
@Override
@@ -834,8 +869,6 @@
Context.TELEPHONY_SERVICE)).getVoiceMailNumber();
mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(), this);
- mCurrentCountryIso = ContactsUtils.getCurrentCountryIso(getActivity());
-
setHasOptionsMenu(true);
}
@@ -881,7 +914,9 @@
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- mAdapter = new CallLogAdapter();
+ String currentCountryIso = ContactsUtils.getCurrentCountryIso(getActivity());
+ mAdapter = new CallLogAdapter(getActivity(), mCallLogQueryHandler, currentCountryIso,
+ getVoiceMailNumber());
setListAdapter(mAdapter);
}
@@ -941,31 +976,6 @@
mAdapter.changeCursor(null);
}
- /**
- * Format the given phone number
- *
- * @param number the number to be formatted.
- * @param normalizedNumber the normalized number of the given number.
- * @param countryIso the ISO 3166-1 two letters country code, the country's
- * convention will be used to format the number if the normalized
- * phone is null.
- *
- * @return the formatted number, or the given number if it was formatted.
- */
- private String formatPhoneNumber(String number, String normalizedNumber, String countryIso) {
- if (TextUtils.isEmpty(number)) {
- return "";
- }
- // If "number" is really a SIP address, don't try to do any formatting at all.
- if (PhoneNumberUtils.isUriNumber(number)) {
- return number;
- }
- if (TextUtils.isEmpty(countryIso)) {
- countryIso = mCurrentCountryIso;
- }
- return PhoneNumberUtils.formatNumber(number, normalizedNumber, countryIso);
- }
-
private void resetNewCallsFlag() {
mCallLogQueryHandler.markNewCallsAsOld();
}
diff --git a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
index e88e5e8..0c59695 100644
--- a/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
+++ b/src/com/android/contacts/detail/ContactDetailDisplayUtils.java
@@ -249,36 +249,15 @@
}
}
- /**
- * Displays the social stream items under the given layout.
- */
- public static void showSocialStreamItems(LayoutInflater inflater, Context context,
- Result contactData, LinearLayout streamContainer, View.OnClickListener listener) {
- if (streamContainer != null) {
- streamContainer.removeAllViews();
- List<StreamItemEntry> streamItems = contactData.getStreamItems();
- for (StreamItemEntry streamItem : streamItems) {
- addStreamItemToContainer(inflater, context, streamItem, streamContainer, listener);
- }
- }
- }
-
- public static View addStreamItemToContainer(LayoutInflater inflater, Context context,
- StreamItemEntry streamItem, LinearLayout streamContainer,
- View.OnClickListener listener) {
+ /** Creates the view that represents a stream item. */
+ public static View createStreamItemView(LayoutInflater inflater, Context context,
+ StreamItemEntry streamItem, LinearLayout parent) {
View oneColumnView = inflater.inflate(R.layout.stream_item_one_column,
- streamContainer, false);
+ parent, false);
ViewGroup contentBox = (ViewGroup) oneColumnView.findViewById(R.id.stream_item_content);
int internalPadding = context.getResources().getDimensionPixelSize(
R.dimen.detail_update_section_internal_padding);
- // Add the listener only if there is an action and corresponding URI.
- if (streamItem.getAction() != null && streamItem.getActionUri() != null) {
- contentBox.setTag(streamItem);
- contentBox.setOnClickListener(listener);
- contentBox.setFocusable(true);
- }
-
// TODO: This is not the correct layout for a stream item with photos. Photos should be
// displayed first, then the update text either to the right of the final image (if there
// are an odd number of images) or below the last row of images (if there are an even
@@ -335,8 +314,8 @@
}
}
- if (streamContainer != null) {
- streamContainer.addView(oneColumnView);
+ if (parent != null) {
+ parent.addView(oneColumnView);
}
return oneColumnView;
@@ -358,7 +337,9 @@
} else {
commentsView.setVisibility(View.GONE);
}
- parent.addView(textUpdate);
+ if (parent != null) {
+ parent.addView(textUpdate);
+ }
return textUpdate;
}
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index 7abe76e..f3cc016 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -29,8 +29,6 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
/**
* Determines the layout of the contact card.
@@ -115,8 +113,6 @@
}
mDetailFragment.setListener(mContactDetailFragmentListener);
- mDetailFragment.setVerticalScrollListener(mVerticalScrollListener);
- mUpdatesFragment.setVerticalScrollListener(mVerticalScrollListener);
switch (mLayoutMode) {
case VIEW_PAGER_AND_CAROUSEL: {
@@ -151,6 +147,7 @@
}
transaction.commit();
mFragmentManager.executePendingTransactions();
+ TabCarouselScrollManager.bind(mTabCarousel, mDetailFragment, mUpdatesFragment);
break;
}
case TWO_COLUMN: {
@@ -306,32 +303,4 @@
mViewPager.setCurrentItem(position);
}
};
-
- private OnScrollListener mVerticalScrollListener = new OnScrollListener() {
-
- @Override
- public void onScroll(
- AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- if (mTabCarousel == null) {
- return;
- }
- // If the FIRST item is not visible on the screen, then the carousel must be pinned
- // at the top of the screen.
- if (firstVisibleItem != 0) {
- mTabCarousel.setY(-mTabCarousel.getAllowedVerticalScrollLength());
- return;
- }
- View topView = view.getChildAt(firstVisibleItem);
- if (topView == null) {
- return;
- }
- int amtToScroll = Math.max((int) view.getChildAt(firstVisibleItem).getY(),
- -mTabCarousel.getAllowedVerticalScrollLength());
- mTabCarousel.setY(amtToScroll);
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {}
-
- };
}
diff --git a/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java b/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java
index 308254f..bb2bdb4 100644
--- a/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailUpdatesFragment.java
@@ -66,16 +66,31 @@
@Override
public void onClick(View view) {
StreamItemEntry streamItemEntry = (StreamItemEntry) view.getTag();
- Uri uri;
- try {
- uri = Uri.parse(streamItemEntry.getActionUri());
- } catch (Throwable throwable) {
- Log.e(TAG, "invalid URI for stream item #" + streamItemEntry.getId() + ": "
- + streamItemEntry.getActionUri());
+ if (streamItemEntry == null) {
+ // Ignore if this item does not have a stream item associated with it.
return;
}
- Intent streamItemIntent = new Intent(streamItemEntry.getAction(), uri);
- startActivity(streamItemIntent);
+ String actionUri = streamItemEntry.getActionUri();
+ if (actionUri == null) {
+ // Ignore if this item does not have a URI.
+ return;
+ }
+ // Parse the URI.
+ Uri uri;
+ try {
+ uri = Uri.parse(actionUri);
+ } catch (Throwable throwable) {
+ // This may fail if the URI is invalid: instead of failing, just ignore it.
+ Log.e(TAG, "invalid URI for stream item #" + streamItemEntry.getId() + ": "
+ + actionUri);
+ return;
+ }
+ String action = streamItemEntry.getAction();
+ if (action == null) {
+ // Ignore if this item does not have an action.
+ return;
+ }
+ startActivity(new Intent(action, uri));
}
};
diff --git a/src/com/android/contacts/detail/StreamItemAdapter.java b/src/com/android/contacts/detail/StreamItemAdapter.java
index d8f4a81..95880d7 100644
--- a/src/com/android/contacts/detail/StreamItemAdapter.java
+++ b/src/com/android/contacts/detail/StreamItemAdapter.java
@@ -74,8 +74,19 @@
if (position == 0) {
return mInflater.inflate(R.layout.updates_header_contact, null);
}
- return ContactDetailDisplayUtils.addStreamItemToContainer(
- mInflater, mContext, (StreamItemEntry) getItem(position), null, mListener);
+ StreamItemEntry streamItem = (StreamItemEntry) getItem(position);
+ View view = ContactDetailDisplayUtils.createStreamItemView(
+ mInflater, mContext, streamItem, null);
+ if (streamItem.getAction() != null && streamItem.getActionUri() != null) {
+ view.setTag(streamItem);
+ view.setFocusable(true);
+ view.setOnClickListener(mListener);
+ } else {
+ view.setTag(null);
+ view.setFocusable(false);
+ view.setOnClickListener(null);
+ }
+ return view;
}
@Override
diff --git a/src/com/android/contacts/detail/TabCarouselScrollManager.java b/src/com/android/contacts/detail/TabCarouselScrollManager.java
new file mode 100644
index 0000000..2415b50
--- /dev/null
+++ b/src/com/android/contacts/detail/TabCarouselScrollManager.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.detail;
+
+import android.view.View;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
+
+/**
+ * Takes care of managing scrolling for the side-by-side views using the tab carousel.
+ */
+public class TabCarouselScrollManager {
+ private final ContactDetailTabCarousel mTabCarousel;
+ private final ContactDetailFragment mAboutFragment;
+ private final ContactDetailUpdatesFragment mUpdatesFragment;
+ private final OnScrollListener mVerticalScrollListener = new OnScrollListener() {
+ @Override
+ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+ int totalItemCount) {
+ if (mTabCarousel == null) {
+ return;
+ }
+ // If the FIRST item is not visible on the screen, then the carousel must be pinned
+ // at the top of the screen.
+ if (firstVisibleItem != 0) {
+ mTabCarousel.setY(-mTabCarousel.getAllowedVerticalScrollLength());
+ return;
+ }
+ View topView = view.getChildAt(firstVisibleItem);
+ if (topView == null) {
+ return;
+ }
+ int amtToScroll = Math.max((int) view.getChildAt(firstVisibleItem).getY(),
+ -mTabCarousel.getAllowedVerticalScrollLength());
+ mTabCarousel.setY(amtToScroll);
+ }
+
+ @Override
+ public void onScrollStateChanged(AbsListView view, int scrollState) {}
+ };
+
+ private TabCarouselScrollManager(ContactDetailTabCarousel tabCarousel,
+ ContactDetailFragment aboutFragment, ContactDetailUpdatesFragment updatesFragment) {
+ mTabCarousel = tabCarousel;
+ mAboutFragment = aboutFragment;
+ mUpdatesFragment = updatesFragment;
+ }
+
+ public void bind() {
+ mAboutFragment.setVerticalScrollListener(mVerticalScrollListener);
+ mUpdatesFragment.setVerticalScrollListener(mVerticalScrollListener);
+ }
+
+ public static void bind(ContactDetailTabCarousel tabCarousel,
+ ContactDetailFragment aboutFragment, ContactDetailUpdatesFragment updatesFragment) {
+ TabCarouselScrollManager scrollManager =
+ new TabCarouselScrollManager(tabCarousel, aboutFragment, updatesFragment);
+ scrollManager.bind();
+ }
+}
diff --git a/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java b/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java
index d306209..fcf99b6 100644
--- a/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java
+++ b/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java
@@ -66,7 +66,6 @@
private SeekBar mPlaybackSeek;
private ImageButton mStartStopButton;
private ImageButton mPlaybackSpeakerphone;
- private TextView mPlaybackPositionText;
private ImageButton mRateDecreaseButton;
private ImageButton mRateIncreaseButton;
private TextViewWithMessagesController mTextController;
@@ -79,10 +78,11 @@
mPlaybackSeek = (SeekBar) view.findViewById(R.id.playback_seek);
mStartStopButton = (ImageButton) view.findViewById(R.id.playback_start_stop);
mPlaybackSpeakerphone = (ImageButton) view.findViewById(R.id.playback_speakerphone);
- mPlaybackPositionText = (TextView) view.findViewById(R.id.playback_position_text);
mRateDecreaseButton = (ImageButton) view.findViewById(R.id.rate_decrease_button);
mRateIncreaseButton = (ImageButton) view.findViewById(R.id.rate_increase_button);
- mTextController = new TextViewWithMessagesController(mPlaybackPositionText);
+ mTextController = new TextViewWithMessagesController(
+ (TextView) view.findViewById(R.id.playback_position_text),
+ (TextView) view.findViewById(R.id.playback_speed_text));
return view;
}
@@ -259,30 +259,30 @@
* All the methods on this class must be called from the ui thread.
*/
private static final class TextViewWithMessagesController {
+ private static final float VISIBLE = 1;
+ private static final float INVISIBLE = 0;
+ private static final long SHORT_ANIMATION_MS = 200;
+ private static final long LONG_ANIMATION_MS = 400;
private final Object mLock = new Object();
- private final TextView mTextView;
- @GuardedBy("mLock") String mCurrentText = "";
- @GuardedBy("mLock") Runnable mRunnable;
+ private final TextView mPermanentTextView;
+ private final TextView mTemporaryTextView;
+ @GuardedBy("mLock") private Runnable mRunnable;
- public TextViewWithMessagesController(TextView textView) {
- mTextView = textView;
+ public TextViewWithMessagesController(TextView permanentTextView,
+ TextView temporaryTextView) {
+ mPermanentTextView = permanentTextView;
+ mTemporaryTextView = temporaryTextView;
}
public void setPermanentText(String text) {
- synchronized (mLock) {
- mCurrentText = text;
- // If there's currently a Runnable pending, then we don't alter the display
- // text. The Runnable will use the most recent version of mCurrentText
- // when it completes.
- if (mRunnable == null) {
- mTextView.setText(text);
- }
- }
+ mPermanentTextView.setText(text);
}
public void setTemporaryText(String text, long duration, TimeUnit units) {
synchronized (mLock) {
- mTextView.setText(text);
+ mTemporaryTextView.setText(text);
+ mTemporaryTextView.animate().alpha(VISIBLE).setDuration(SHORT_ANIMATION_MS);
+ mPermanentTextView.animate().alpha(INVISIBLE).setDuration(SHORT_ANIMATION_MS);
mRunnable = new Runnable() {
@Override
public void run() {
@@ -292,12 +292,15 @@
// one is now defunct and needs to take no action.
if (mRunnable == this) {
mRunnable = null;
- mTextView.setText(mCurrentText);
+ mTemporaryTextView.animate()
+ .alpha(INVISIBLE).setDuration(LONG_ANIMATION_MS);
+ mPermanentTextView.animate()
+ .alpha(VISIBLE).setDuration(LONG_ANIMATION_MS);
}
}
}
};
- mTextView.postDelayed(mRunnable, units.toMillis(duration));
+ mTemporaryTextView.postDelayed(mRunnable, units.toMillis(duration));
}
}
}
diff --git a/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java
index eac502d..6f3a625 100644
--- a/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java
@@ -16,6 +16,8 @@
package com.android.contacts.voicemail;
+import static android.util.MathUtils.constrain;
+
import com.android.contacts.R;
import com.android.ex.variablespeed.MediaPlayerProxy;
import com.android.ex.variablespeed.SingleThreadedMediaPlayerProxy;
@@ -211,7 +213,7 @@
@Override
public void onClick(View v) {
// Adjust the current rate, then clamp it to the allowed values.
- mRateIndex = clamp(mRateIndex + (mIncrease ? 1 : -1), 0, PRESET_RATES.length - 1);
+ mRateIndex = constrain(mRateIndex + (mIncrease ? 1 : -1), 0, PRESET_RATES.length - 1);
// Whether or not we have actually changed the index, call changeRate().
// This will ensure that we show the "fastest" or "slowest" text on the ui to indicate
// to the user that it doesn't get any faster or slower.
@@ -219,18 +221,13 @@
}
}
- /** Clamp the input value to between min and max inclusive. */
- private static int clamp(int input, int min, int max) {
- return Math.max(Math.min(input, max), min);
- }
-
private void resetPrepareStartPlaying(int clipPositionInMillis) {
try {
mPlayer.reset();
mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
mPlayer.prepare();
mDuration.set(mPlayer.getDuration());
- int startPosition = clamp(clipPositionInMillis, 0, mDuration.get());
+ int startPosition = constrain(clipPositionInMillis, 0, mDuration.get());
mView.setClipPosition(startPosition, mDuration.get());
mPlayer.seekTo(startPosition);
mPlayer.start();
diff --git a/tests/src/com/android/contacts/detail/ContactDetailDisplayUtilsTest.java b/tests/src/com/android/contacts/detail/ContactDetailDisplayUtilsTest.java
index 98001ae..aebb8c2 100644
--- a/tests/src/com/android/contacts/detail/ContactDetailDisplayUtilsTest.java
+++ b/tests/src/com/android/contacts/detail/ContactDetailDisplayUtilsTest.java
@@ -18,6 +18,7 @@
import com.android.contacts.R;
import com.android.contacts.util.StreamItemEntry;
+import com.android.contacts.util.StreamItemEntryBuilder;
import android.content.Context;
import android.test.AndroidTestCase;
@@ -27,7 +28,6 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.LinearLayout;
import android.widget.TextView;
/**
@@ -37,14 +37,11 @@
public class ContactDetailDisplayUtilsTest extends AndroidTestCase {
private static final String TEST_STREAM_ITEM_TEXT = "text";
- private LinearLayout mParent;
private LayoutInflater mLayoutInflater;
- private FakeOnClickListener mListener = new FakeOnClickListener();
@Override
protected void setUp() throws Exception {
super.setUp();
- mParent = new LinearLayout(getContext());
mLayoutInflater =
(LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@@ -72,81 +69,6 @@
assertGone(streamItemView, R.id.stream_item_comments);
}
- public void testAddStreamItemToContainer_NoAction() {
- StreamItemEntry streamItem = getTestBuilder()
- .setAction(null)
- .setActionUri(null)
- .build();
- addStreamItemToContainer(streamItem, mListener);
- assertStreamItemNotClickable();
- }
-
- public void testAddStreamItemToContainer_WithActionButNoActionUri() {
- StreamItemEntry streamItem = getTestBuilder()
- .setAction("action")
- .setActionUri(null)
- .build();
- addStreamItemToContainer(streamItem, mListener);
- assertStreamItemNotClickable();
- }
-
- public void testAddStreamItemToContainer_WithActionUriButNoAction() {
- StreamItemEntry streamItem = getTestBuilder()
- .setAction(null)
- .setActionUri("http://www.google.com")
- .build();
- addStreamItemToContainer(streamItem, mListener);
- assertStreamItemNotClickable();
- }
-
- public void testAddStreamItemToContainer_WithActionAndActionUri() {
- StreamItemEntry streamItem = getTestBuilder()
- .setAction("action")
- .setActionUri("http://www.google.com")
- .build();
- addStreamItemToContainer(streamItem, mListener);
- assertStreamItemClickable();
- assertStreamItemHasOnClickListener();
- assertStreamItemHasTag(streamItem);
- }
-
- /** Checks that the stream item view is clickable. */
- private void assertStreamItemClickable() {
- View streamItemView = mParent.findViewById(R.id.stream_item_content);
- assertNotNull("should have a stream item", streamItemView);
- assertTrue("should be clickable", streamItemView.isClickable());
- assertTrue("should be focusable", streamItemView.isFocusable());
- }
-
- /** Asserts that there is a stream item but it is not clickable. */
- private void assertStreamItemNotClickable() {
- View streamItemView = mParent.findViewById(R.id.stream_item_content);
- assertNotNull("should have a stream item", streamItemView);
- assertFalse("should not be clickable", streamItemView.isClickable());
- assertFalse("should not be focusable", streamItemView.isFocusable());
- }
-
- /** Checks that the stream item view has a click listener. */
- private void assertStreamItemHasOnClickListener() {
- // Check that the on-click listener is invoked when clicked.
- View streamItemView = mParent.findViewById(R.id.stream_item_content);
- assertFalse("listener should have not been invoked yet", mListener.clicked);
- streamItemView.performClick();
- assertTrue("listener should have been invoked", mListener.clicked);
- }
-
- /** Checks that the stream item view has the given stream item as its tag. */
- private void assertStreamItemHasTag(StreamItemEntry streamItem) {
- // The view's tag should point to the stream item entry for this view.
- View streamItemView = mParent.findViewById(R.id.stream_item_content);
- Object tag = streamItemView.getTag();
- assertNotNull("should have a tag", tag);
- assertTrue("should be a StreamItemEntry", tag instanceof StreamItemEntry);
- StreamItemEntry streamItemTag = (StreamItemEntry) tag;
- // The streamItem itself should be in the tag.
- assertSame(streamItem, streamItemTag);
- }
-
/** Checks that the given id corresponds to a visible text view with the expected text. */
private void assertHasText(View parent, int textViewId, String expectedText) {
TextView textView = (TextView) parent.findViewById(textViewId);
@@ -187,70 +109,7 @@
*/
private View addStreamItemText(StreamItemEntry streamItem) {
return ContactDetailDisplayUtils.addStreamItemText(
- mLayoutInflater, getContext(), streamItem, mParent);
- }
-
- /**
- * Calls {@link ContactDetailDisplayUtils#addStreamItemToContainer(LayoutInflater,
- * Context,StreamItemEntry, LinearLayout, android.view.View.OnClickListener)} with the default
- * parameters and the given stream item and listener.
- */
- private void addStreamItemToContainer(StreamItemEntry streamItem,
- View.OnClickListener listener) {
- ContactDetailDisplayUtils.addStreamItemToContainer(mLayoutInflater, getContext(),
- streamItem, mParent, listener);
- }
-
- /**
- * Simple fake implementation of {@link View.OnClickListener} which sets a member variable to
- * true when clicked.
- */
- private final class FakeOnClickListener implements View.OnClickListener {
- public boolean clicked = false;
-
- @Override
- public void onClick(View view) {
- clicked = true;
- }
- }
-
- private static class StreamItemEntryBuilder {
- private long mId;
- private String mText;
- private String mComment;
- private long mTimestamp;
- private String mAction;
- private String mActionUri;
- private String mResPackage;
- private int mIconRes;
- private int mLabelRes;
-
- public StreamItemEntryBuilder() {}
-
- public StreamItemEntryBuilder setText(String text) {
- mText = text;
- return this;
- }
-
- public StreamItemEntryBuilder setComment(String comment) {
- mComment = comment;
- return this;
- }
-
- public StreamItemEntryBuilder setAction(String action) {
- mAction = action;
- return this;
- }
-
- public StreamItemEntryBuilder setActionUri(String actionUri) {
- mActionUri = actionUri;
- return this;
- }
-
- public StreamItemEntry build() {
- return new StreamItemEntry(mId, mText, mComment, mTimestamp, mAction, mActionUri,
- mResPackage, mIconRes, mLabelRes);
- }
+ mLayoutInflater, getContext(), streamItem, null);
}
private StreamItemEntryBuilder getTestBuilder() {
diff --git a/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java b/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
new file mode 100644
index 0000000..99ae834
--- /dev/null
+++ b/tests/src/com/android/contacts/detail/StreamItemAdapterTest.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.contacts.detail;
+
+import com.android.contacts.util.StreamItemEntry;
+import com.android.contacts.util.StreamItemEntryBuilder;
+import com.google.common.collect.Lists;
+
+import android.content.Intent;
+import android.test.AndroidTestCase;
+import android.view.View;
+
+import java.util.ArrayList;
+
+/**
+ * Unit tests for {@link StreamItemAdapter}.
+ */
+public class StreamItemAdapterTest extends AndroidTestCase {
+ private StreamItemAdapter mAdapter;
+ private FakeOnClickListener mListener;
+ private View mView;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mListener = new FakeOnClickListener();
+ mAdapter = new StreamItemAdapter(getContext(), mListener);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mAdapter = null;
+ mListener = null;
+ super.tearDown();
+ }
+
+ public void testGetCount_Empty() {
+ mAdapter.setStreamItems(createStreamItemList(0));
+ // There is actually one view: the header.
+ assertEquals(1, mAdapter.getCount());
+ }
+
+ public void testGetCount_NonEmpty() {
+ mAdapter.setStreamItems(createStreamItemList(3));
+ // There is one extra view: the header.
+ assertEquals(4, mAdapter.getCount());
+ }
+
+ public void testGetView_WithAction() {
+ StreamItemEntry streamItem = createStreamItemWithAction();
+ mAdapter.setStreamItems(Lists.newArrayList(streamItem));
+ mView = mAdapter.getView(1, null, null);
+ assertStreamItemViewHasTag(streamItem);
+ assertStreamItemViewHasOnClickListener();
+ assertStreamItemViewFocusable();
+ }
+
+ public void testGetView_WithoutAction() {
+ mAdapter.setStreamItems(Lists.newArrayList(createStreamItemWithoutAction()));
+ mView = mAdapter.getView(1, null, null);
+ assertStreamItemViewHasNoTag();
+ assertStreamItemViewHasNoOnClickListener();
+ assertStreamItemViewNotFocusable();
+ }
+
+ public void testGetView_Header() {
+ // Just check that we can inflate it correctly.
+ mView = mAdapter.getView(0, null, null);
+ }
+
+ /** Counter used by {@link #createStreamItemEntryBuilder()} to create unique builders. */
+ private int mCreateStreamItemEntryBuilderCounter = 0;
+
+ /** Returns a stream item builder with basic information in it. */
+ private StreamItemEntryBuilder createStreamItemEntryBuilder() {
+ return new StreamItemEntryBuilder().setText(
+ "text #" + mCreateStreamItemEntryBuilderCounter++);
+ }
+
+ /** Returns a stream item with an action and action URI set. */
+ private StreamItemEntry createStreamItemWithAction() {
+ return createStreamItemEntryBuilder()
+ .setAction(Intent.ACTION_VIEW)
+ .setActionUri("http://www.google.com")
+ .build();
+ }
+
+ /** Returns a stream item without an action and action URI set. */
+ private StreamItemEntry createStreamItemWithoutAction() {
+ return createStreamItemEntryBuilder()
+ .setAction(null)
+ .setActionUri(null)
+ .build();
+ }
+
+ /** Creates a list containing the given number of {@link StreamItemEntry}s. */
+ private ArrayList<StreamItemEntry> createStreamItemList(int count) {
+ ArrayList<StreamItemEntry> list = Lists.newArrayList();
+ for (int index = 0; index < count; ++index) {
+ list.add(createStreamItemEntryBuilder().build());
+ }
+ return list;
+ }
+
+ /** Checks that the stream item view has a click listener. */
+ private void assertStreamItemViewHasOnClickListener() {
+ assertFalse("listener should have not been invoked yet", mListener.clicked);
+ mView.performClick();
+ assertTrue("listener should have been invoked", mListener.clicked);
+ }
+
+ /** Checks that the stream item view does not have a click listener. */
+ private void assertStreamItemViewHasNoOnClickListener() {
+ assertFalse("listener should have not been invoked yet", mListener.clicked);
+ mView.performClick();
+ assertFalse("listener should have not been invoked", mListener.clicked);
+ }
+
+ /** Checks that the stream item view is clickable. */
+ private void assertStreamItemViewFocusable() {
+ assertNotNull("should have a stream item", mView);
+ assertTrue("should be focusable", mView.isFocusable());
+ }
+
+ /** Asserts that there is a stream item but it is not clickable. */
+ private void assertStreamItemViewNotFocusable() {
+ assertNotNull("should have a stream item", mView);
+ assertFalse("should not be focusable", mView.isFocusable());
+ }
+
+ /** Checks that the stream item view has the given stream item as its tag. */
+ private void assertStreamItemViewHasTag(StreamItemEntry streamItem) {
+ Object tag = mView.getTag();
+ assertNotNull("should have a tag", tag);
+ assertTrue("should be a StreamItemEntry", tag instanceof StreamItemEntry);
+ StreamItemEntry streamItemTag = (StreamItemEntry) tag;
+ // The streamItem itself should be in the tag.
+ assertSame(streamItem, streamItemTag);
+ }
+
+ /** Checks that the stream item view has the given stream item as its tag. */
+ private void assertStreamItemViewHasNoTag() {
+ Object tag = mView.getTag();
+ assertNull("should not have a tag", tag);
+ }
+
+ /**
+ * Simple fake implementation of {@link View.OnClickListener} which sets a member variable to
+ * true when clicked.
+ */
+ private final class FakeOnClickListener implements View.OnClickListener {
+ public boolean clicked = false;
+
+ @Override
+ public void onClick(View view) {
+ clicked = true;
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/util/StreamItemEntryBuilder.java b/tests/src/com/android/contacts/util/StreamItemEntryBuilder.java
new file mode 100644
index 0000000..8a17b4a
--- /dev/null
+++ b/tests/src/com/android/contacts/util/StreamItemEntryBuilder.java
@@ -0,0 +1,59 @@
+/*
+ * 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;
+
+/**
+ * Builder for {@link StreamItemEntry}s to make writing tests easier.
+ */
+public class StreamItemEntryBuilder {
+ private long mId;
+ private String mText;
+ private String mComment;
+ private long mTimestamp;
+ private String mAction;
+ private String mActionUri;
+ private String mResPackage;
+ private int mIconRes;
+ private int mLabelRes;
+
+ public StreamItemEntryBuilder() {}
+
+ public StreamItemEntryBuilder setText(String text) {
+ mText = text;
+ return this;
+ }
+
+ public StreamItemEntryBuilder setComment(String comment) {
+ mComment = comment;
+ return this;
+ }
+
+ public StreamItemEntryBuilder setAction(String action) {
+ mAction = action;
+ return this;
+ }
+
+ public StreamItemEntryBuilder setActionUri(String actionUri) {
+ mActionUri = actionUri;
+ return this;
+ }
+
+ public StreamItemEntry build() {
+ return new StreamItemEntry(mId, mText, mComment, mTimestamp, mAction, mActionUri,
+ mResPackage, mIconRes, mLabelRes);
+ }
+}
\ No newline at end of file