Merge "De-jank quick contact animation" into jb-dev
diff --git a/res/drawable-hdpi/spinner_default_holo_dark.9.png b/res/drawable-hdpi/spinner_default_holo_dark.9.png
new file mode 100644
index 0000000..34a88df
--- /dev/null
+++ b/res/drawable-hdpi/spinner_default_holo_dark.9.png
Binary files differ
diff --git a/res/drawable-mdpi/spinner_default_holo_dark.9.png b/res/drawable-mdpi/spinner_default_holo_dark.9.png
new file mode 100644
index 0000000..48af192
--- /dev/null
+++ b/res/drawable-mdpi/spinner_default_holo_dark.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/spinner_default_holo_dark.9.png b/res/drawable-xhdpi/spinner_default_holo_dark.9.png
new file mode 100644
index 0000000..e94ce80
--- /dev/null
+++ b/res/drawable-xhdpi/spinner_default_holo_dark.9.png
Binary files differ
diff --git a/res/drawable/ab_dropdown_navigation_item_background.xml b/res/drawable/ab_dropdown_navigation_item_background.xml
new file mode 100644
index 0000000..c144996
--- /dev/null
+++ b/res/drawable/ab_dropdown_navigation_item_background.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true"
+ android:drawable="@drawable/ab_dropdown_navigation_item_background_pressed"/>
+ <item android:drawable="@drawable/spinner_default_holo_dark" />
+</selector>
diff --git a/res/drawable/ab_dropdown_navigation_item_background_pressed.xml b/res/drawable/ab_dropdown_navigation_item_background_pressed.xml
new file mode 100644
index 0000000..d075a05
--- /dev/null
+++ b/res/drawable/ab_dropdown_navigation_item_background_pressed.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list
+ xmlns:android="http://schemas.android.com/apk/res/android" >
+ <item android:drawable="@drawable/action_bar_item_pressed_holo_light" />
+ <item android:drawable="@drawable/spinner_default_holo_dark" />
+</layer-list>
diff --git a/res/drawable/action_bar_item_background.xml b/res/drawable/action_bar_item_background.xml
index 8dd8d9b..7ccc3a9 100644
--- a/res/drawable/action_bar_item_background.xml
+++ b/res/drawable/action_bar_item_background.xml
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/action_bar_item_pressed_holo_light"/>
<item android:drawable="@android:color/transparent" />
</selector>
diff --git a/res/drawable/group_list_item_background.xml b/res/drawable/group_list_item_background.xml
index 345117f..70cd308 100644
--- a/res/drawable/group_list_item_background.xml
+++ b/res/drawable/group_list_item_background.xml
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
- android:exitFadeDuration="@android:integer/config_mediumAnimTime">
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@drawable/list_activated_holo" />
<item android:state_pressed="true" android:drawable="@drawable/list_pressed_holo_light" />
<item android:state_focused="true" android:drawable="@drawable/list_focused_holo" />
diff --git a/res/layout-sw580dp-w940dp/quickcontact_activity.xml b/res/layout-sw580dp-w940dp/quickcontact_activity.xml
new file mode 100644
index 0000000..5c38309
--- /dev/null
+++ b/res/layout-sw580dp-w940dp/quickcontact_activity.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<view
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ class="com.android.contacts.quickcontact.FloatingChildLayout"
+ android:id="@+id/floating_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:descendantFocusability="afterDescendants">
+ <LinearLayout
+ android:id="@android:id/content"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="32dip"
+ android:orientation="horizontal">
+ <FrameLayout
+ android:layout_width="360dip"
+ android:layout_height="360dip">
+ <include layout="@layout/quickcontact_photo_container" />
+ </FrameLayout>
+ <LinearLayout
+ android:layout_width="360dip"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <include layout="@layout/quickcontact_track" />
+ <View
+ android:id="@+id/line_after_track"
+ android:layout_width="match_parent"
+ android:layout_height="2dip"
+ android:background="@color/quickcontact_tab_indicator" />
+ <android.support.v4.view.ViewPager
+ android:id="@+id/item_list_pager"
+ android:background="@color/quickcontact_list_background"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+ </LinearLayout>
+ </LinearLayout>
+</view>
diff --git a/res/layout-sw680dp-w1000dp/contact_detail_container.xml b/res/layout-sw680dp-w1000dp/contact_detail_container.xml
index 9e1eb33..8180e92 100644
--- a/res/layout-sw680dp-w1000dp/contact_detail_container.xml
+++ b/res/layout-sw680dp-w1000dp/contact_detail_container.xml
@@ -54,6 +54,7 @@
android:id="@+id/updates_fragment_container"
android:layout_width="0dip"
android:layout_weight="2"
- android:layout_height="match_parent" />
+ android:layout_height="match_parent"
+ android:visibility="gone" />
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/res/layout-sw680dp-w1000dp/quickcontact_activity.xml b/res/layout-sw680dp-w1000dp/quickcontact_activity.xml
new file mode 100644
index 0000000..5c38309
--- /dev/null
+++ b/res/layout-sw680dp-w1000dp/quickcontact_activity.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<view
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ class="com.android.contacts.quickcontact.FloatingChildLayout"
+ android:id="@+id/floating_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:descendantFocusability="afterDescendants">
+ <LinearLayout
+ android:id="@android:id/content"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="32dip"
+ android:orientation="horizontal">
+ <FrameLayout
+ android:layout_width="360dip"
+ android:layout_height="360dip">
+ <include layout="@layout/quickcontact_photo_container" />
+ </FrameLayout>
+ <LinearLayout
+ android:layout_width="360dip"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <include layout="@layout/quickcontact_track" />
+ <View
+ android:id="@+id/line_after_track"
+ android:layout_width="match_parent"
+ android:layout_height="2dip"
+ android:background="@color/quickcontact_tab_indicator" />
+ <android.support.v4.view.ViewPager
+ android:id="@+id/item_list_pager"
+ android:background="@color/quickcontact_list_background"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+ </LinearLayout>
+ </LinearLayout>
+</view>
diff --git a/res/layout-sw680dp/quickcontact_activity.xml b/res/layout-sw680dp/quickcontact_activity.xml
new file mode 100644
index 0000000..8843fc9
--- /dev/null
+++ b/res/layout-sw680dp/quickcontact_activity.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<view
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:ex="http://schemas.android.com/apk/res/com.android.contacts"
+ class="com.android.contacts.quickcontact.FloatingChildLayout"
+ android:id="@+id/floating_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:descendantFocusability="afterDescendants">
+ <LinearLayout
+ android:id="@android:id/content"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="32dip"
+ android:orientation="vertical" >
+ <FrameLayout
+ android:layout_width="360dip"
+ android:layout_height="@dimen/quick_contact_photo_container_height">
+ <include layout="@layout/quickcontact_photo_container" />
+ </FrameLayout>
+ <include layout="@layout/quickcontact_track" />
+ <View
+ android:id="@+id/line_after_track"
+ android:layout_width="match_parent"
+ android:layout_height="2dip"
+ android:background="@color/quickcontact_tab_indicator" />
+ <android.support.v4.view.ViewPager
+ android:id="@+id/item_list_pager"
+ android:layout_width="match_parent"
+ android:layout_height="160dip" />
+ </LinearLayout>
+</view>
diff --git a/res/layout/contact_detail_updates_fragment_container.xml b/res/layout/contact_detail_updates_fragment_container.xml
index fb3a8ac..7414f61 100644
--- a/res/layout/contact_detail_updates_fragment_container.xml
+++ b/res/layout/contact_detail_updates_fragment_container.xml
@@ -22,4 +22,5 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/updates_fragment_container"
android:layout_width="match_parent"
- android:layout_height="match_parent"/>
\ No newline at end of file
+ android:layout_height="match_parent"
+ android:visibility="gone" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index ea59a3d..b078582 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 gevind"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> gevind"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Alle"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Alle kontakte"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Groepe"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Gunstelinge"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Foon"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index f18baed..56f357f 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 ተገኝቷል"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ተገኝቷል"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"ሁሉም"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"ሁሉም እውቂያዎች"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"ቡድኖች"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"ተወዳጆች"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"ስልክ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index ac26be7..17d6a58 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"تم العثور على جهة اتصال واحدة"</item>
<item quantity="other" msgid="7988132539476575389">"تم العثور على <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"الكل"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"جميع جهات الاتصال"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"المجموعات"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"المفضلة"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"الهاتف"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 435f47c..47efdc2 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"знойдзены 1"</item>
<item quantity="other" msgid="7988132539476575389">"Знойдзеныя: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Усе"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Усе кантакты"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Групы"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Выбранае"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Тэлефон"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 0ce7374..08f7388 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 намерен"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> намерени"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Всички"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Всички контакти"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Групи"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Любими"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Телефон"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index ec06dbf..5cf8209 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -134,7 +134,8 @@
<item quantity="one" msgid="4826918429708286628">"1 contacte"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> contactes"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Tots"</string>
+ <!-- no translation found for contactsAllLabel (6479708629170672169) -->
+ <skip />
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grups"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferits"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telèfon"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 1e1bf59..9744658 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Nalezeno: 1"</item>
<item quantity="other" msgid="7988132539476575389">"Nalezeno: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Vše"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Všechny kontakty"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Skupiny"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Oblíbené"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 51f01ce..ed82fbc 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 fundet"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> fundet"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Alle"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Alle kontaktpersoner"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupper"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorit"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 1ee13e9..fa2b504 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 gefunden"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> gefunden"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Alle"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Alle Kontakte"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Gruppen"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriten"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 6eb32a2..e130495 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Βρέθηκε 1"</item>
<item quantity="other" msgid="7988132539476575389">"Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Όλα"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Όλες οι επαφές"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Ομάδες"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Αγαπ."</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Τηλέφωνο"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index c1cae5f..37b6679 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 found"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> found"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"All"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"All contacts"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Groups"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Phone"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 07afea7..9d0f8f0 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Se encontró uno (1)"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrado(s)"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Todos"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Todos los contactos"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Teléfono"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b3503b5..a4bc8c6 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 encontrado"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Todos"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Todos los contactos"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Teléfono"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 0dfc7d6..87006b3 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 leitud"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> leitud"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Kõik"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Kõik kontaktid"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupid"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Lemmikud"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f83fc5f..9c286e9 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -134,7 +134,8 @@
<item quantity="one" msgid="4826918429708286628">"1 مورد پیدا شد"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> یافت شد"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"همه"</string>
+ <!-- no translation found for contactsAllLabel (6479708629170672169) -->
+ <skip />
<string name="contactsGroupsLabel" msgid="2841971472518003524">"گروه ها"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"موارد دلخواه"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"تلفن"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 1349934..a4164ee 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Löytyi 1"</item>
<item quantity="other" msgid="7988132539476575389">"Löytyi <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Kaikki"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Kaikki kontaktit"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Ryhmät"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Suosikit"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Puhelin"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 805288a..6a195cf 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 contact trouvé"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> contact(s) trouvé(s)"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Tous"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Tous les contacts"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Groupes"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoris"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Tél."</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 4909eea..bff0734 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 मिला"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> मिले"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"सभी"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"सभी संपर्क"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"समूह"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"पसंदीदा"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"फ़ोन"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 83e62c7..967c7a5 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 pronađen"</item>
<item quantity="other" msgid="7988132539476575389">"Pronađeno kontakata: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Sve"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Svi kontakti"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupe"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriti"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index d1a6792..acc3dd8 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 találat"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> találat"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Összes"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Az összes névjegy"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Csoportok"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kedvencek"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 6d47924..21a218f 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Ada 1"</item>
<item quantity="other" msgid="7988132539476575389">"Ada <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Semua"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Semua kontak"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grup"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorit"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telepon"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index a974042..b0907c1 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 trovato"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> trovati"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Tutti"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Tutti i contatti"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Gruppi"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferiti"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefono"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 36e4b20..e888650 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"נמצא אחד"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> נמצאו"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"הכל"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"כל אנשי הקשר"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"קבוצות"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"מועדפים"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"טלפון"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 43f97e6..711aa60 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1件見つかりました"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g>件見つかりました"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"すべて"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"すべての連絡先"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"グループ"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"お気入り"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"電話"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 3ad8c25..2118dae 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1개를 찾았습니다."</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g>개를 찾았습니다."</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"전체"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"모든 연락처"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"그룹"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"즐겨찾기"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"휴대전화"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 3d8fa17..7fe7127 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"rastas 1"</item>
<item quantity="other" msgid="7988132539476575389">"Rasta <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Visi"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Visi kontaktai"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupės"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Adresynas"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefonas"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index f6b77b1..fa06166 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Atrasta 1"</item>
<item quantity="other" msgid="7988132539476575389">"Atrastas <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Visas"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Visas kontaktpersonas"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupas"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izlase"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Zvanīt"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index a24b5cf..c067af5 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -134,7 +134,8 @@
<item quantity="one" msgid="4826918429708286628">"1 ditemui"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ditemui"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Semua"</string>
+ <!-- no translation found for contactsAllLabel (6479708629170672169) -->
+ <skip />
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Kumpulan"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kegemaran"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 2496659..863b52a 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -134,7 +134,8 @@
<item quantity="one" msgid="4826918429708286628">"1 funnet"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> funnet"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Alle"</string>
+ <!-- no translation found for contactsAllLabel (6479708629170672169) -->
+ <skip />
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupper"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritter"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 86d19fb..ce6c66f 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 gevonden"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> gevonden"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Alle"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Alle contacten"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Groepen"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriet"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefoon"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index a411d96..5ab30a1 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Znaleziono: 1"</item>
<item quantity="other" msgid="7988132539476575389">"Znaleziono: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Wszystkie"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Wszystkie kontakty"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupy"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Ulubione"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index ffc9ea6..7572bf6 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 encontrado"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrado(s)"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Tudo"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Todos os contactos"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefone"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index acfedef..3be405a 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Um encontrado"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> encontrados"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Tudo"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Todos os contatos"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupos"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefone"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 636bb43..0dbb54f 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -178,7 +178,7 @@
<item quantity="one" msgid="4826918429708286628">"chattà 1"</item>
<item quantity="other" msgid="7988132539476575389">"Chattà <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <!-- no translation found for contactsAllLabel (6178225597569649305) -->
+ <!-- no translation found for contactsAllLabel (6479708629170672169) -->
<skip />
<!-- no translation found for contactsGroupsLabel (2841971472518003524) -->
<skip />
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 36774a9..12ba779 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"A fost găsită 1 persoană din agendă"</item>
<item quantity="other" msgid="7988132539476575389">"Au fost găsite <xliff:g id="COUNT">%d</xliff:g> (de) persoane din agendă"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Toate"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Toată Agenda"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupuri"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorite"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 9dd0e0e..0c6e8f6 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Найдено: 1"</item>
<item quantity="other" msgid="7988132539476575389">"Найдено: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Все"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Все контакты"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Группы"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Избранное"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Кнопки"</string>
@@ -410,7 +410,7 @@
<string name="display_options_view_given_name_first" msgid="6968288511197363292">"Сначала имя"</string>
<string name="display_options_view_family_name_first" msgid="1447288164951453714">"Сначала фамилию"</string>
<string name="take_photo" msgid="7496128293167402354">"Сфотографировать"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Создать новое фото"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Сфотографировать"</string>
<string name="pick_photo" msgid="3746334626214970837">"Выбрать фото из галереи"</string>
<string name="pick_new_photo" msgid="7962368009197147617">"Выбрать новое фото из Галереи"</string>
<string name="locale_change_in_progress" msgid="7583992153091537467">"Список контактов обновляется после смены языка интерфейса."</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 72735c8..a34e3b8 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Počet nájdených položiek: 1"</item>
<item quantity="other" msgid="7988132539476575389">"Počet nájdených položiek: <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Všetky"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Všetky kontakty"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Skupiny"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Obľúbené"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefón"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 3c2d7c8..263c48e 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 najden"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> najdenih"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Vse"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Vsi stiki"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Skupine"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Priljubljeno"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ef6d21a..4b10063 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 пронађен"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> пронађено"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Све"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Сви контакти"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Групе"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Омиљено"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Телефон"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 54179e1..27698ec 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 hittades"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> hittades"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Alla"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Alla kontakter"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Grupper"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriter"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index a146176..68f65a4 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Patikana 1"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> zimepatikana"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Zote"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Anwani zote"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Vikundi"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Vipendwa"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Simu"</string>
diff --git a/res/values-sw580dp-w940dp/styles.xml b/res/values-sw580dp-w940dp/styles.xml
index 07ef912..d035240 100644
--- a/res/values-sw580dp-w940dp/styles.xml
+++ b/res/values-sw580dp-w940dp/styles.xml
@@ -35,6 +35,7 @@
<item name="list_item_gap_between_label_and_data">5dip</item>
<item name="list_item_vertical_divider_margin">5dip</item>
<item name="list_item_presence_icon_margin">4dip</item>
+ <item name="list_item_presence_icon_size">16dip</item>
<item name="list_item_photo_size">64dip</item>
<item name="list_item_profile_photo_size">80dip</item>
<item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
diff --git a/res/values-sw580dp/styles.xml b/res/values-sw580dp/styles.xml
index 7a247ae..a8d935b 100644
--- a/res/values-sw580dp/styles.xml
+++ b/res/values-sw580dp/styles.xml
@@ -35,6 +35,7 @@
<item name="list_item_gap_between_label_and_data">5dip</item>
<item name="list_item_vertical_divider_margin">5dip</item>
<item name="list_item_presence_icon_margin">4dip</item>
+ <item name="list_item_presence_icon_size">16dip</item>
<item name="list_item_photo_size">64dip</item>
<item name="list_item_profile_photo_size">80dip</item>
<item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
diff --git a/res/values-sw680dp/styles.xml b/res/values-sw680dp/styles.xml
index 3db3867..fb242d9 100644
--- a/res/values-sw680dp/styles.xml
+++ b/res/values-sw680dp/styles.xml
@@ -35,6 +35,7 @@
<item name="list_item_gap_between_label_and_data">5dip</item>
<item name="list_item_vertical_divider_margin">5dip</item>
<item name="list_item_presence_icon_margin">4dip</item>
+ <item name="list_item_presence_icon_size">16dip</item>
<item name="list_item_photo_size">64dip</item>
<item name="list_item_profile_photo_size">80dip</item>
<item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 2e7e052..26b594b 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"พบ 1 รายการ"</item>
<item quantity="other" msgid="7988132539476575389">"พบ <xliff:g id="COUNT">%d</xliff:g> รายการ"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"ทั้งหมด"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"ที่อยู่ติดต่อทั้งหมด"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"กลุ่ม"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"รายการโปรด"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"โทรศัพท์"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 07643af..b3642e3 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 ang nakita"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> ang nakita"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Lahat"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Lahat ng contact"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Mga Pangkat"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mga Paborito"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telepono"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 82ef250..bda73d0 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"1 kişi bulundu"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> kişi bulundu"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Tümü"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Tüm kişiler"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Gruplar"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Sık Kullanılanlar"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 33ac75e..d2dbb57 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Знайдено 1"</item>
<item quantity="other" msgid="7988132539476575389">"Знайдено <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Усі"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Усі контакти"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Групи"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Вибране"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Тел."</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f825411..c9407f3 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"Đã tìm thấy 1"</item>
<item quantity="other" msgid="7988132539476575389">"Đã tìm thấy <xliff:g id="COUNT">%d</xliff:g>"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Tất cả"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Tất cả liên hệ"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Nhóm"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mục ưa thích"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Điện thoại"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index d069f9c..0474e23 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -134,7 +134,8 @@
<item quantity="one" msgid="4826918429708286628">"找到 1 个联系人"</item>
<item quantity="other" msgid="7988132539476575389">"找到 <xliff:g id="COUNT">%d</xliff:g> 个联系人"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"全部"</string>
+ <!-- no translation found for contactsAllLabel (6479708629170672169) -->
+ <skip />
<string name="contactsGroupsLabel" msgid="2841971472518003524">"群组"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"收藏"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"拨号"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index e7ce3d7..8043348 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"找到 1 位聯絡人"</item>
<item quantity="other" msgid="7988132539476575389">"找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"全部"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"所有聯絡人"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"群組"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"我的最愛"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"電話"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index d997f59..f3dc93e 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -134,7 +134,7 @@
<item quantity="one" msgid="4826918429708286628">"otholakele ongu-1"</item>
<item quantity="other" msgid="7988132539476575389">"<xliff:g id="COUNT">%d</xliff:g> tholakele"</item>
</plurals>
- <string name="contactsAllLabel" msgid="6178225597569649305">"Konke"</string>
+ <string name="contactsAllLabel" msgid="6479708629170672169">"Bonke oxhumana nabo"</string>
<string name="contactsGroupsLabel" msgid="2841971472518003524">"Amaqembu"</string>
<string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izintandokazi"</string>
<string name="dialerIconLabel" msgid="6500826552823403796">"Ifoni"</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 1702585..829b207 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -176,6 +176,7 @@
</style>
<style name="ContactsActionBarDropDownStyle" parent="@android:style/Widget.Holo.Light.Spinner">
+ <item name="android:background">@drawable/ab_dropdown_navigation_item_background</item>
</style>
<style name="ContactsActionBarTheme" parent="@android:style/Theme.Holo">
@@ -351,14 +352,10 @@
<style name="PeopleNavigationDropDownTextAppearance">
<item name="android:textColor">#333333</item>
<item name="android:textSize">18sp</item>
- <item name="android:textStyle">normal</item>
- <item name="android:textAllCaps">false</item>
</style>
<style name="PeopleNavigationDropDownHeaderTextAppearance">
- <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
- <item name="android:textSize">14sp</item>
- <item name="android:textStyle">bold</item>
- <item name="android:textAllCaps">true</item>
+ <item name="android:textColor">#cdffffff</item>
+ <item name="android:textSize">18sp</item>
</style>
</resources>
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index b23dde1..956ce65 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -26,10 +26,13 @@
import android.app.FragmentManager;
import android.app.LoaderManager;
import android.content.ContentResolver;
+import android.content.ContentUris;
import android.content.Context;
import android.content.SharedPreferences;
+import android.os.AsyncTask;
import android.os.StrictMode;
import android.preference.PreferenceManager;
+import android.provider.ContactsContract.Contacts;
import android.util.Log;
public final class ContactsApplication extends Application {
@@ -120,10 +123,6 @@
Log.d(Constants.PERFORMANCE_TAG, "ContactsApplication.onCreate start");
}
- // Priming caches to placate the StrictMode police
- Context context = getApplicationContext();
- PreferenceManager.getDefaultSharedPreferences(context);
- AccountTypeManager.getInstance(context);
if (ENABLE_FRAGMENT_LOG) FragmentManager.enableDebugLogging(true);
if (ENABLE_LOADER_LOG) LoaderManager.enableDebugLogging(true);
@@ -132,8 +131,30 @@
new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
}
+ // Perform the initialization that doesn't have to finish immediately.
+ // We use an async task here just to avoid creating a new thread.
+ (new DelayedInitializer()).execute();
+
if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
Log.d(Constants.PERFORMANCE_TAG, "ContactsApplication.onCreate finish");
}
}
+
+ private class DelayedInitializer extends AsyncTask<Void, Void, Void> {
+ @Override
+ protected Void doInBackground(Void... params) {
+ final Context context = ContactsApplication.this;
+
+ // Warm up the preferences, the account type manager and the contacts provider.
+ PreferenceManager.getDefaultSharedPreferences(context);
+ AccountTypeManager.getInstance(context);
+ getContentResolver().getType(ContentUris.withAppendedId(Contacts.CONTENT_URI, 1));
+ return null;
+ }
+
+ public void execute() {
+ executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
+ (Void[]) null);
+ }
+ }
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index bcceff4..075c59f 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -150,7 +150,7 @@
private ContactsUnavailableFragment mContactsUnavailableFragment;
private ProviderStatusWatcher mProviderStatusWatcher;
- private int mProviderStatus;
+ private ProviderStatusWatcher.Status mProviderStatus;
private boolean mOptionsMenuContactsAvailable;
@@ -217,7 +217,8 @@
}
public boolean areContactsAvailable() {
- return mProviderStatus == ProviderStatus.STATUS_NORMAL;
+ return (mProviderStatus != null)
+ && mProviderStatus.status == ProviderStatus.STATUS_NORMAL;
}
private boolean areContactWritableAccountsAvailable() {
@@ -560,6 +561,11 @@
case ContactsRequest.ACTION_VIEW_CONTACT:
// We redirect this intent to the detail activity on 1-pane, so we don't get
// here. It's only for 2-pane.
+ Uri currentlyLoadedContactUri = mContactDetailFragment.getUri();
+ if (currentlyLoadedContactUri != null
+ && !mRequest.getContactUri().equals(currentlyLoadedContactUri)) {
+ mContactDetailsView.setMaskVisibility(true);
+ }
tabToOpen = TabState.ALL;
break;
case ContactsRequest.ACTION_GROUP:
@@ -612,7 +618,7 @@
// If we are switching from one group to another, do a cross-fade
if (mGroupDetailFragment != null && mGroupDetailFragment.getGroupUri() != null &&
!UriUtils.areEqual(mGroupDetailFragment.getGroupUri(), groupUri)) {
- mGroupDetailsView.startTransition(mGroupDetailFragment.getView(), false);
+ mGroupDetailsView.startMaskTransition(false);
}
mGroupDetailFragment.loadGroup(groupUri);
invalidateOptionsMenuIfNeeded();
@@ -986,14 +992,15 @@
}
private void updateViewConfiguration(boolean forceUpdate) {
- int providerStatus = mProviderStatusWatcher.getProviderStatus();
- if (!forceUpdate && (providerStatus == mProviderStatus)) return;
+ ProviderStatusWatcher.Status providerStatus = mProviderStatusWatcher.getProviderStatus();
+ if (!forceUpdate && (mProviderStatus != null)
+ && (providerStatus.status == mProviderStatus.status)) return;
mProviderStatus = providerStatus;
View contactsUnavailableView = findViewById(R.id.contacts_unavailable_view);
View mainView = findViewById(R.id.main_view);
- if (mProviderStatus == ProviderStatus.STATUS_NORMAL) {
+ if (mProviderStatus.status == ProviderStatus.STATUS_NORMAL) {
// Ensure that the mTabPager is visible; we may have made it invisible below.
contactsUnavailableView.setVisibility(View.GONE);
if (mTabPager != null) {
@@ -1028,9 +1035,8 @@
getFragmentManager().beginTransaction()
.replace(R.id.contacts_unavailable_container, mContactsUnavailableFragment)
.commitAllowingStateLoss();
- } else {
- mContactsUnavailableFragment.update();
}
+ mContactsUnavailableFragment.updateStatus(mProviderStatus);
// Show the contactsUnavailableView, and hide the mTabPager so that we don't
// see it sliding in underneath the contactsUnavailableView at the edges.
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index c91f493..5c68dcb 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -356,6 +356,9 @@
mShowStaticPhoto = showPhoto;
}
+ /**
+ * Shows the contact detail with a message indicating there are no contact details.
+ */
public void showEmptyState() {
setData(null, null);
}
@@ -406,6 +409,9 @@
if (mContactData == null) {
mView.setVisibility(View.INVISIBLE);
+ if (mStaticPhotoContainer != null) {
+ mStaticPhotoContainer.setVisibility(View.GONE);
+ }
mAllEntries.clear();
if (mAdapter != null) {
mAdapter.notifyDataSetChanged();
diff --git a/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java b/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java
index 7af9b28..08ed87b 100644
--- a/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java
+++ b/src/com/android/contacts/detail/ContactDetailFragmentCarousel.java
@@ -173,6 +173,16 @@
}
}
+ /**
+ * Reset the fragment carousel to show the about page.
+ */
+ public void reset() {
+ if (mCurrentPage != ABOUT_PAGE) {
+ mCurrentPage = ABOUT_PAGE;
+ snapToEdge();
+ }
+ }
+
public int getCurrentPage() {
return mCurrentPage;
}
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index a99f35f..2c18d4f 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -291,8 +291,7 @@
if (PhoneCapabilityTester.isUsingTwoPanes(mActivity)) {
// Tablet: If we already showed data before, we want to cross-fade from screen to screen
if (contactWasLoaded && mTransitionAnimationView != null && isDifferentContact) {
- mTransitionAnimationView.startTransition(
- mViewContainer, mContactData == null);
+ mTransitionAnimationView.startMaskTransition(mContactData == null);
}
} else {
// Small screen: We are on our own screen. Fade the data in, but only the first time
@@ -367,7 +366,7 @@
// This is screen is very hard to animate properly, because there is such a hard
// cut from the regular version. A proper animation would have to reflow text
// and move things around. Doing a simple cross-fade instead.
- mTransitionAnimationView.startTransition(mViewContainer, false);
+ mTransitionAnimationView.startMaskTransition(false);
}
// Set the contact data (hide the static photo because the photo will already be in
@@ -406,6 +405,9 @@
case LayoutMode.TWO_COLUMN_FRAGMENT_CAROUSEL: {
// Allow swiping between all fragments
mFragmentCarousel.enableSwipe(true);
+ if (isDifferentContact) {
+ mFragmentCarousel.reset();
+ }
if (!isDifferentContact && animateStateChange) {
mFragmentCarousel.animateAppear();
}
diff --git a/src/com/android/contacts/dialpad/DialpadFragment.java b/src/com/android/contacts/dialpad/DialpadFragment.java
index 89585e8..745c044 100644
--- a/src/com/android/contacts/dialpad/DialpadFragment.java
+++ b/src/com/android/contacts/dialpad/DialpadFragment.java
@@ -73,6 +73,7 @@
import com.android.contacts.activities.DialtactsActivity;
import com.android.contacts.util.Constants;
import com.android.contacts.util.PhoneNumberFormatter;
+import com.android.contacts.util.StopWatch;
import com.android.internal.telephony.ITelephony;
import com.android.phone.CallLogAsync;
import com.android.phone.HapticFeedback;
@@ -468,17 +469,25 @@
public void onResume() {
super.onResume();
+ final StopWatch stopWatch = StopWatch.start("Dialpad.onResume");
+
// Query the last dialed number. Do it first because hitting
// the DB is 'slow'. This call is asynchronous.
queryLastOutgoingCall();
+ stopWatch.lap("qloc");
+
// retrieve the DTMF tone play back setting.
mDTMFToneEnabled = Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.DTMF_TONE_WHEN_DIALING, 1) == 1;
+ stopWatch.lap("dtwd");
+
// Retrieve the haptic feedback setting.
mHaptic.checkSystemSetting();
+ stopWatch.lap("hptc");
+
// if the mToneGenerator creation fails, just continue without it. It is
// a local audio signal, and is not as important as the dtmf tone itself.
synchronized (mToneGeneratorLock) {
@@ -491,6 +500,7 @@
}
}
}
+ stopWatch.lap("tg");
// Prevent unnecessary confusion. Reset the press count anyway.
mDialpadPressCount = 0;
@@ -501,6 +511,8 @@
fillDigitsIfNecessary(parent.getIntent());
}
+ stopWatch.lap("fdin");
+
// While we're in the foreground, listen for phone state changes,
// purely so that we can take down the "dialpad chooser" if the
// phone becomes idle while the chooser UI is visible.
@@ -508,6 +520,8 @@
(TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
+ stopWatch.lap("tm");
+
// Potentially show hint text in the mDigits field when the user
// hasn't typed any digits yet. (If there's already an active call,
// this hint text will remind the user that he's about to add a new
@@ -531,7 +545,13 @@
showDialpadChooser(false);
}
+ stopWatch.lap("hnt");
+
updateDialAndDeleteButtonEnabledState();
+
+ stopWatch.lap("bes");
+
+ stopWatch.stopAndLog(TAG, 50);
}
@Override
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index becc704..b645425 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -18,6 +18,7 @@
import com.android.contacts.R;
import android.app.Fragment;
+import android.content.Context;
import android.os.Bundle;
import android.provider.ContactsContract.ProviderStatus;
import android.view.Gravity;
@@ -35,8 +36,6 @@
*/
public class ContactsUnavailableFragment extends Fragment implements OnClickListener {
- private ProviderStatusWatcher mProviderStatusWatcher;
-
private View mView;
private TextView mMessageView;
private TextView mSecondaryMessageView;
@@ -51,10 +50,11 @@
private OnContactsUnavailableActionListener mListener;
+ private ProviderStatusWatcher.Status mProviderStatus;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mProviderStatusWatcher = ProviderStatusWatcher.getInstance(getActivity());
}
@Override
@@ -74,7 +74,11 @@
mRetryUpgradeButton = (Button) mView.findViewById(R.id.import_failure_retry_button);
mRetryUpgradeButton.setOnClickListener(this);
mProgress = (ProgressBar) mView.findViewById(R.id.progress);
- update();
+
+ if (mProviderStatus != null) {
+ updateStatus(mProviderStatus);
+ }
+
return mView;
}
@@ -83,9 +87,13 @@
mListener = listener;
}
- public void update() {
- int providerStatus = mProviderStatusWatcher.getProviderStatus();
- switch (providerStatus) {
+ public void updateStatus(ProviderStatusWatcher.Status providerStatus) {
+ mProviderStatus = providerStatus;
+ if (mView == null) {
+ // The view hasn't been inflated yet.
+ return;
+ }
+ switch (providerStatus.status) {
case ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS:
setMessageText(mNoContactsMsgResId, mNSecNoContactsMsgResId);
mCreateContactButton.setVisibility(View.VISIBLE);
@@ -122,7 +130,7 @@
case ProviderStatus.STATUS_UPGRADE_OUT_OF_MEMORY:
String message = getResources().getString(R.string.upgrade_out_of_memory,
- new Object[] { mProviderStatusWatcher.getProviderStatusData() });
+ new Object[] { providerStatus.data});
mMessageView.setText(message);
mMessageView.setGravity(Gravity.LEFT);
mMessageView.setVisibility(View.VISIBLE);
@@ -155,7 +163,10 @@
mListener.onFreeInternalStorageAction();
break;
case R.id.import_failure_retry_button:
- mProviderStatusWatcher.retryUpgrade();
+ final Context context = getActivity();
+ if (context != null) { // Just in case.
+ ProviderStatusWatcher.retryUpgrade(context);
+ }
break;
}
}
@@ -167,9 +178,8 @@
public void setMessageText(int resId, int secResId) {
mNoContactsMsgResId = resId;
mNSecNoContactsMsgResId = secResId;
- if (mMessageView != null &&
- mProviderStatusWatcher.getProviderStatus() ==
- ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS) {
+ if ((mMessageView != null) && (mProviderStatus != null) &&
+ (mProviderStatus.status == ProviderStatus.STATUS_NO_ACCOUNTS_NO_CONTACTS)) {
if (resId != -1) {
mMessageView.setText(mNoContactsMsgResId);
mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
diff --git a/src/com/android/contacts/list/ProviderStatusWatcher.java b/src/com/android/contacts/list/ProviderStatusWatcher.java
index 3ce4b78..ae0b779 100644
--- a/src/com/android/contacts/list/ProviderStatusWatcher.java
+++ b/src/com/android/contacts/list/ProviderStatusWatcher.java
@@ -47,6 +47,19 @@
public void onProviderStatusChange();
}
+ public static class Status {
+ /** See {@link ProviderStatus#STATUS} */
+ public final int status;
+
+ /** See {@link ProviderStatus#DATA1} */
+ public final String data;
+
+ public Status(int status, String data) {
+ this.status = status;
+ this.data = data;
+ }
+ }
+
private static final String[] PROJECTION = new String[] {
ProviderStatus.STATUS,
ProviderStatus.DATA1
@@ -57,8 +70,6 @@
*/
private static final int LOAD_WAIT_TIMEOUT_MS = 1000;
- private static final int STATUS_UNKNOWN = -1;
-
private static ProviderStatusWatcher sInstance;
private final Context mContext;
@@ -71,10 +82,7 @@
private LoaderTask mLoaderTask;
/** Last known provider status. This can be changed on a worker thread. */
- private int mProviderStatus = STATUS_UNKNOWN;
-
- /** Last known provider status data. This can be changed on a worker thread. */
- private String mProviderData;
+ private Status mProviderStatus;
private final ArrayList<ProviderStatusListener> mListeners = Lists.newArrayList();
@@ -177,32 +185,18 @@
* (If {@link ProviderStatus#STATUS_UPGRADING} is returned, the app (should) shows an according
* message, like "contacts are being updated".)
*/
- public int getProviderStatus() {
+ public Status getProviderStatus() {
waitForLoaded();
- if (mProviderStatus == STATUS_UNKNOWN) {
- return ProviderStatus.STATUS_UPGRADING;
+ if (mProviderStatus == null) {
+ return new Status(ProviderStatus.STATUS_UPGRADING, null);
}
return mProviderStatus;
}
- /**
- * @return last known provider status data. See also {@link #getProviderStatus()}.
- */
- public String getProviderStatusData() {
- waitForLoaded();
-
- if (mProviderStatus == STATUS_UNKNOWN) {
- // STATUS_UPGRADING has no data.
- return "";
- }
-
- return mProviderData;
- }
-
private void waitForLoaded() {
- if (mProviderStatus == STATUS_UNKNOWN) {
+ if (mProviderStatus == null) {
if (mLoaderTask == null) {
// For some reason the loader couldn't load the status. Let's start it again.
startLoading();
@@ -238,8 +232,10 @@
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
- mProviderStatus = cursor.getInt(0);
- mProviderData = cursor.getString(1);
+ // Note here we can't just say "Status", as AsyncTask has the "Status"
+ // enum too.
+ mProviderStatus = new ProviderStatusWatcher.Status(
+ cursor.getInt(0), cursor.getString(1));
return true;
}
} finally {
@@ -291,14 +287,14 @@
/**
* Sends a provider status update, which will trigger a retry of database upgrade
*/
- public void retryUpgrade() {
+ public static void retryUpgrade(final Context context) {
Log.i(TAG, "retryUpgrade");
final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ContentValues values = new ContentValues();
values.put(ProviderStatus.STATUS, ProviderStatus.STATUS_UPGRADING);
- mContext.getContentResolver().update(ProviderStatus.CONTENT_URI, values,
+ context.getContentResolver().update(ProviderStatus.CONTENT_URI, values,
null, null);
return null;
}
diff --git a/src/com/android/contacts/list/ShortcutIntentBuilder.java b/src/com/android/contacts/list/ShortcutIntentBuilder.java
index 753ba02..d71a0f5 100644
--- a/src/com/android/contacts/list/ShortcutIntentBuilder.java
+++ b/src/com/android/contacts/list/ShortcutIntentBuilder.java
@@ -137,6 +137,7 @@
*/
private abstract class LoadingAsyncTask extends AsyncTask<Void, Void, Void> {
protected Uri mUri;
+ protected String mContentType;
protected String mDisplayName;
protected byte[] mBitmapData;
protected long mPhotoId;
@@ -147,6 +148,7 @@
@Override
protected Void doInBackground(Void... params) {
+ mContentType = mContext.getContentResolver().getType(mUri);
loadData();
loadPhoto();
return null;
@@ -196,7 +198,7 @@
}
@Override
protected void onPostExecute(Void result) {
- createContactShortcutIntent(mUri, mDisplayName, mBitmapData);
+ createContactShortcutIntent(mUri, mContentType, mDisplayName, mBitmapData);
}
}
@@ -248,7 +250,7 @@
return bitmap;
}
- private void createContactShortcutIntent(Uri contactUri, String displayName,
+ private void createContactShortcutIntent(Uri contactUri, String contentType, String displayName,
byte[] bitmapData) {
Bitmap bitmap = getPhotoBitmap(bitmapData);
@@ -263,7 +265,7 @@
// Tell the launcher to not do its animation, because we are doing our own
shortcutIntent.putExtra(INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION, true);
- shortcutIntent.setData(contactUri);
+ shortcutIntent.setDataAndType(contactUri, contentType);
shortcutIntent.putExtra(ContactsContract.QuickContact.EXTRA_MODE,
ContactsContract.QuickContact.MODE_LARGE);
shortcutIntent.putExtra(ContactsContract.QuickContact.EXTRA_EXCLUDE_MIMES,
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index c54619c..cbddf90 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -21,6 +21,7 @@
import com.android.contacts.R;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.DataKind;
+import com.android.contacts.util.Constants;
import com.android.contacts.util.DataStatus;
import com.android.contacts.util.ImageViewDrawableSetter;
import com.android.contacts.util.SchedulingUtils;
@@ -196,7 +197,7 @@
Uri lookupUri = intent.getData();
// Check to see whether it comes from the old version.
- if (LEGACY_AUTHORITY.equals(lookupUri.getAuthority())) {
+ if (lookupUri != null && LEGACY_AUTHORITY.equals(lookupUri.getAuthority())) {
final long rawContactId = ContentUris.parseId(lookupUri);
lookupUri = RawContacts.getContactLookupUri(getContentResolver(),
ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
@@ -206,8 +207,9 @@
// Read requested parameters for displaying
final Rect sourceBounds = intent.getSourceBounds();
- Preconditions.checkNotNull(sourceBounds, "missing sourceBounds");
- mFloatingLayout.setChildTargetScreen(sourceBounds);
+ if (sourceBounds != null) {
+ mFloatingLayout.setChildTargetScreen(sourceBounds);
+ }
mExcludeMimes = intent.getStringArrayExtra(QuickContact.EXTRA_EXCLUDE_MIMES);
@@ -499,6 +501,9 @@
bindData(data);
if (TRACE_LAUNCH) android.os.Debug.stopMethodTracing();
+ if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
+ Log.d(Constants.PERFORMANCE_TAG, "QuickContact shown");
+ }
// Data bound and ready, pull curtain to show. Put this on the Handler to ensure
// that the layout passes are completed
diff --git a/src/com/android/contacts/util/ImageViewDrawableSetter.java b/src/com/android/contacts/util/ImageViewDrawableSetter.java
index 5cde022..1d23dd0 100644
--- a/src/com/android/contacts/util/ImageViewDrawableSetter.java
+++ b/src/com/android/contacts/util/ImageViewDrawableSetter.java
@@ -39,10 +39,10 @@
private ImageView mTarget;
private byte[] mCompressed;
private Drawable mPreviousDrawable;
+ private int mDurationInMillis = 0;
private static final String TAG = "ImageViewDrawableSetter";
public ImageViewDrawableSetter() {
-
}
public ImageViewDrawableSetter(ImageView target) {
@@ -54,6 +54,10 @@
setCompressedImage(contactData.getPhotoBinaryData());
}
+ public void setTransitionDuration(int durationInMillis) {
+ mDurationInMillis = durationInMillis;
+ }
+
public ImageView getTarget() {
return mTarget;
}
@@ -97,7 +101,7 @@
// If we don't have a new Drawable, something went wrong... bail out.
if (newDrawable == null) return previousBitmap();
- if (mPreviousDrawable == null) {
+ if (mPreviousDrawable == null || mDurationInMillis == 0) {
// Set the new one immediately.
mTarget.setImageDrawable(newDrawable);
} else {
@@ -107,7 +111,7 @@
beforeAndAfter[1] = newDrawable;
final TransitionDrawable transition = new TransitionDrawable(beforeAndAfter);
mTarget.setImageDrawable(transition);
- transition.startTransition(200);
+ transition.startTransition(mDurationInMillis);
}
// Remember this for next time, so that we can transition from it to the
diff --git a/src/com/android/contacts/util/StopWatch.java b/src/com/android/contacts/util/StopWatch.java
new file mode 100644
index 0000000..0657621
--- /dev/null
+++ b/src/com/android/contacts/util/StopWatch.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import com.google.android.collect.Lists;
+
+import android.util.Log;
+
+import java.util.ArrayList;
+
+/**
+ * A {@link StopWatch} records start, laps and stop, and print them to logcat.
+ */
+public class StopWatch {
+
+ private final String mLabel;
+
+ private final ArrayList<Long> mTimes = Lists.newArrayList();
+ private final ArrayList<String> mLapLabels = Lists.newArrayList();
+
+ private StopWatch(String label) {
+ mLabel = label;
+ lap("");
+ }
+
+ /**
+ * Create a new instance and start it.
+ */
+ public static StopWatch start(String label) {
+ return new StopWatch(label);
+ }
+
+ /**
+ * Record a lap.
+ */
+ public void lap(String lapLabel) {
+ mTimes.add(System.currentTimeMillis());
+ mLapLabels.add(lapLabel);
+ }
+
+ /**
+ * Stop it and log the result, if the total time >= {@code timeThresholdToLog}.
+ */
+ public void stopAndLog(String TAG, int timeThresholdToLog) {
+
+ lap("");
+
+ final long start = mTimes.get(0);
+ final long stop = mTimes.get(mTimes.size() - 1);
+
+ final long total = stop - start;
+ if (total < timeThresholdToLog) return;
+
+ final StringBuilder sb = new StringBuilder();
+ sb.append(mLabel);
+ sb.append(",");
+ sb.append(total);
+ sb.append(": ");
+
+ long last = start;
+ for (int i = 1; i < mTimes.size(); i++) {
+ final long current = mTimes.get(i);
+ sb.append(mLapLabels.get(i));
+ sb.append(",");
+ sb.append((current - last));
+ sb.append(" ");
+ last = current;
+ }
+ Log.v(TAG, sb.toString());
+ }
+}
diff --git a/src/com/android/contacts/widget/TransitionAnimationView.java b/src/com/android/contacts/widget/TransitionAnimationView.java
index cefc82d..28d728b 100644
--- a/src/com/android/contacts/widget/TransitionAnimationView.java
+++ b/src/com/android/contacts/widget/TransitionAnimationView.java
@@ -15,30 +15,20 @@
*/
package com.android.contacts.widget;
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
import android.animation.ObjectAnimator;
import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
/**
- * A container for a view that needs to have exit/enter animations when rebinding data.
- * After rebinding the contents, the following call should be made (where child is the only visible)
- * child
- * <pre>
- * TransitionAnimationView.startAnimation(child);
- * </pre>
+ * A container that places a masking view on top of all other views. The masking view can be
+ * faded in and out. Currently, the masking view is solid color white.
*/
-public class TransitionAnimationView extends FrameLayout implements AnimatorListener {
- private View mPreviousStateView;
- private Bitmap mPreviousStateBitmap;
- private ObjectAnimator mPreviousAnimator;
+public class TransitionAnimationView extends FrameLayout {
+ private View mMaskingView;
+ private ObjectAnimator mAnimator;
public TransitionAnimationView(Context context) {
this(context, null, 0);
@@ -55,75 +45,43 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mPreviousStateView = new View(getContext());
- mPreviousStateView.setVisibility(View.INVISIBLE);
- mPreviousStateView.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+ mMaskingView = new View(getContext());
+ mMaskingView.setVisibility(View.INVISIBLE);
+ mMaskingView.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
- addView(mPreviousStateView);
+ mMaskingView.setBackgroundColor(Color.WHITE);
+ addView(mMaskingView);
}
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- mPreviousStateView.setBackgroundDrawable(null);
- if (mPreviousStateBitmap != null) {
- mPreviousStateBitmap.recycle();
- mPreviousStateBitmap = null;
- }
- }
-
- public void startTransition(View view, boolean closing) {
- if (mPreviousAnimator != null && mPreviousAnimator.isRunning()) {
- mPreviousAnimator.end();
- }
- if (view.getVisibility() != View.VISIBLE) {
- if (!closing) {
- mPreviousAnimator = ObjectAnimator.ofFloat(view, View.ALPHA, 0.0f, 1.0f);
- mPreviousAnimator.start();
- }
- } else if (closing) {
- mPreviousAnimator = ObjectAnimator.ofFloat(view, View.ALPHA, 1.0f, 0.0f);
- mPreviousAnimator.start();
+ public void setMaskVisibility(boolean flag) {
+ if (flag) {
+ mMaskingView.setAlpha(1.0f);
+ mMaskingView.setVisibility(View.VISIBLE);
} else {
- if (view.getWidth() > 0 && view.getHeight() > 0) {
- // Take a "screenshot" of the current state of the screen and show that on top
- // of the real content. Then, fade that out.
- mPreviousStateBitmap = Bitmap.createBitmap(
- view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
- mPreviousStateView.setBackgroundDrawable(
- new BitmapDrawable(getContext().getResources(), mPreviousStateBitmap));
- mPreviousStateView.setLayoutParams(view.getLayoutParams());
- mPreviousStateBitmap.eraseColor(Color.WHITE);
- Canvas canvas = new Canvas(mPreviousStateBitmap);
- view.draw(canvas);
- canvas.setBitmap(null);
- mPreviousStateView.setVisibility(View.VISIBLE);
-
- mPreviousAnimator =
- ObjectAnimator.ofFloat(mPreviousStateView, View.ALPHA, 1.0f, 0.0f);
- mPreviousAnimator.start();
- }
+ mMaskingView.setVisibility(View.INVISIBLE);
}
}
- @Override
- public void onAnimationEnd(Animator animation) {
- mPreviousStateView.setVisibility(View.INVISIBLE);
- mPreviousStateView.setBackgroundDrawable(null);
- mPreviousStateBitmap.recycle();
- mPreviousStateBitmap = null;
- mPreviousAnimator = null;
- }
+ /**
+ * Starts the transition of showing or hiding the mask.
+ * If showMask is true, the mask will be set to be invisible then fade into hide the other
+ * views in this container. If showMask is false, the mask will be set to be hide other views
+ * initially. Then, the other views in this container will be revealed.
+ */
+ public void startMaskTransition(boolean showMask) {
+ // Stop any animation that may still be running.
+ if (mAnimator != null && mAnimator.isRunning()) {
+ mAnimator.end();
+ }
- @Override
- public void onAnimationCancel(Animator animation) {
- }
-
- @Override
- public void onAnimationStart(Animator animation) {
- }
-
- @Override
- public void onAnimationRepeat(Animator animation) {
+ mMaskingView.setVisibility(View.VISIBLE);
+ if (showMask) {
+ mAnimator = ObjectAnimator.ofFloat(mMaskingView, View.ALPHA, 0.0f, 1.0f);
+ mAnimator.start();
+ } else {
+ // asked to hide the view
+ mAnimator = ObjectAnimator.ofFloat(mMaskingView, View.ALPHA, 1.0f, 0.0f);
+ mAnimator.start();
+ }
}
}