Merge commit 'korg/cupcake'
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 962fc54..71a90eb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -224,21 +224,25 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
 
+            <meta-data android:name="android.app.searchable"
+                android:resource="@xml/searchable"
+            />
+        </activity>
+
+        <activity android:name="ShowOrCreateActivity"
+            android:theme="@android:style/Theme.Translucent.NoTitleBar">
             <intent-filter>
                 <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
                 <data android:scheme="mailto" />
                 <data android:scheme="tel" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable"
-            />
         </activity>
 
         <activity-alias android:name="ContactShortcut"
             android:targetActivity="ContactsListActivity"
-            android:label="@string/shortcutContact">
+            android:label="@string/shortcutContact"
+            android:icon="@drawable/ic_launcher_shortcut_contact">
 
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_SHORTCUT" />
@@ -249,7 +253,7 @@
 
         <activity android:name="CallDetailActivity"
             android:label="@string/callDetailTitle"
-            android:theme="@android:style/Theme.NoTitleBar"
+            android:theme="@style/TallTitleBarTheme"
         >
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
@@ -261,7 +265,7 @@
         <!-- Views the details of a single contact -->
         <activity android:name="ViewContactActivity"
             android:label="@string/viewContactTitle"
-            android:theme="@android:style/Theme.NoTitleBar"
+            android:theme="@style/TallTitleBarTheme"
         >
             <intent-filter android:label="@string/viewContactDesription">
                 <action android:name="android.intent.action.VIEW" />
@@ -311,7 +315,7 @@
         <activity
             android:name=".ContactsLiveFolders$AllContacts"
             android:label="@string/liveFolderAll"
-            android:icon="@drawable/ic_launcher_contacts">
+            android:icon="@drawable/ic_launcher_folder_live_contacts">
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -321,7 +325,7 @@
         <activity
             android:name=".ContactsLiveFolders$StarredContacts"
             android:label="@string/liveFolderFavorites"
-            android:icon="@drawable/ic_launcher_contacts_starred">
+            android:icon="@drawable/ic_launcher_folder_live_contacts_starred">
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -331,7 +335,7 @@
         <activity
             android:name=".ContactsLiveFolders$PhoneContacts"
             android:label="@string/liveFolderPhone"
-            android:icon="@drawable/ic_launcher_contacts_phones">
+            android:icon="@drawable/ic_launcher_folder_live_contacts_phone">
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/drawable-finger/btn_circle_longpress.png b/res/drawable-finger/btn_circle_longpress.png
deleted file mode 100644
index f27d411..0000000
--- a/res/drawable-finger/btn_circle_longpress.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_highlight.9.png b/res/drawable-finger/contact_picture_border_highlight.9.png
index fc4e01d..c48b83f 100644
--- a/res/drawable-finger/contact_picture_border_highlight.9.png
+++ b/res/drawable-finger/contact_picture_border_highlight.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_in_list.9.png b/res/drawable-finger/contact_picture_border_in_list.9.png
new file mode 100644
index 0000000..e10b676
--- /dev/null
+++ b/res/drawable-finger/contact_picture_border_in_list.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_longpress.9.png b/res/drawable-finger/contact_picture_border_longpress.9.png
deleted file mode 100644
index c89a55a..0000000
--- a/res/drawable-finger/contact_picture_border_longpress.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_normal.9.png b/res/drawable-finger/contact_picture_border_normal.9.png
index 37451ae..84bfad5 100644
--- a/res/drawable-finger/contact_picture_border_normal.9.png
+++ b/res/drawable-finger/contact_picture_border_normal.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_pressed.9.png b/res/drawable-finger/contact_picture_border_pressed.9.png
index 11eaae5..d5328f3 100644
--- a/res/drawable-finger/contact_picture_border_pressed.9.png
+++ b/res/drawable-finger/contact_picture_border_pressed.9.png
Binary files differ
diff --git a/res/drawable-finger/divider_vertical_dark.png b/res/drawable-finger/divider_vertical_dark.png
new file mode 100644
index 0000000..dcf850e
--- /dev/null
+++ b/res/drawable-finger/divider_vertical_dark.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_header_incoming_call.png b/res/drawable-finger/ic_call_log_header_incoming_call.png
new file mode 100644
index 0000000..8b75287
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_header_incoming_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_header_missed_call.png b/res/drawable-finger/ic_call_log_header_missed_call.png
new file mode 100644
index 0000000..94dd69f
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_header_missed_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_header_outgoing_call.png b/res/drawable-finger/ic_call_log_header_outgoing_call.png
new file mode 100644
index 0000000..bdedc67
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_header_outgoing_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_list_incoming_call.png b/res/drawable-finger/ic_call_log_list_incoming_call.png
new file mode 100644
index 0000000..db74c8f
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_list_incoming_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_list_missed_call.png b/res/drawable-finger/ic_call_log_list_missed_call.png
new file mode 100644
index 0000000..1907a62
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_list_missed_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_call_log_list_outgoing_call.png b/res/drawable-finger/ic_call_log_list_outgoing_call.png
new file mode 100644
index 0000000..b47e022
--- /dev/null
+++ b/res/drawable-finger/ic_call_log_list_outgoing_call.png
Binary files differ
diff --git a/res/drawable-finger/ic_contact_list_picture.png b/res/drawable-finger/ic_contact_list_picture.png
new file mode 100644
index 0000000..f8aa4ba
--- /dev/null
+++ b/res/drawable-finger/ic_contact_list_picture.png
Binary files differ
diff --git a/res/drawable-finger/star_on.png b/res/drawable-finger/star_on.png
deleted file mode 100644
index 429dada..0000000
--- a/res/drawable-finger/star_on.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/sym_action_edit.png b/res/drawable-finger/sym_action_edit.png
deleted file mode 100644
index bacf850..0000000
--- a/res/drawable-finger/sym_action_edit.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/sym_action_remove.png b/res/drawable-finger/sym_action_remove.png
deleted file mode 100644
index f5ca2f9..0000000
--- a/res/drawable-finger/sym_action_remove.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/sym_action_search.png b/res/drawable-finger/sym_action_search.png
deleted file mode 100644
index dab3ed6..0000000
--- a/res/drawable-finger/sym_action_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_contacts_phones.png b/res/drawable/ic_launcher_contacts_phones.png
deleted file mode 100644
index 822cc31..0000000
--- a/res/drawable/ic_launcher_contacts_phones.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_contacts_starred.png b/res/drawable/ic_launcher_contacts_starred.png
deleted file mode 100644
index 328761e..0000000
--- a/res/drawable/ic_launcher_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts.png b/res/drawable/ic_launcher_folder_live_contacts.png
new file mode 100644
index 0000000..5e222ec
--- /dev/null
+++ b/res/drawable/ic_launcher_folder_live_contacts.png
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts_phone.png b/res/drawable/ic_launcher_folder_live_contacts_phone.png
new file mode 100644
index 0000000..02637da
--- /dev/null
+++ b/res/drawable/ic_launcher_folder_live_contacts_phone.png
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts_starred.png b/res/drawable/ic_launcher_folder_live_contacts_starred.png
new file mode 100644
index 0000000..927b343
--- /dev/null
+++ b/res/drawable/ic_launcher_folder_live_contacts_starred.png
Binary files differ
diff --git a/res/drawable/ic_launcher_shortcut_contact.png b/res/drawable/ic_launcher_shortcut_contact.png
new file mode 100644
index 0000000..ed7025c
--- /dev/null
+++ b/res/drawable/ic_launcher_shortcut_contact.png
Binary files differ
diff --git a/res/layout-finger/call_detail.xml b/res/layout-finger/call_detail.xml
index 69bfa9e..ad151c1 100644
--- a/res/layout-finger/call_detail.xml
+++ b/res/layout-finger/call_detail.xml
@@ -79,6 +79,25 @@
             android:scrollbarStyle="outsideOverlay"
         />
 
+        <ScrollView android:id="@android:id/empty"
+                android:layout_width="fill_parent"
+                android:layout_height="fill_parent"
+                android:fillViewport="true">
+
+            <TextView android:id="@+id/emptyText"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/unknown"
+                android:textSize="20sp"
+                android:textColor="?android:attr/textColorSecondary"
+                android:paddingLeft="10dip"
+                android:paddingRight="10dip"
+                android:paddingTop="10dip"
+                android:gravity="center"
+                android:lineSpacingMultiplier="0.92"/>
+
+        </ScrollView>
+
         <View
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
diff --git a/res/layout-finger/contacts_list_item_photo.xml b/res/layout-finger/contacts_list_item_photo.xml
index d2821e1..c208b93 100644
--- a/res/layout-finger/contacts_list_item_photo.xml
+++ b/res/layout-finger/contacts_list_item_photo.xml
@@ -20,7 +20,7 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="?android:attr/listPreferredItemHeight"
-    android:paddingLeft="0dip"
+    android:paddingLeft="5dip"
     android:paddingRight="5dip"
 >
 
@@ -36,13 +36,15 @@
     />
 
     <ImageView android:id="@+id/photo"
-        android:layout_width="64dip"
-        android:layout_height="64dip"
+        android:layout_width="54dip"
+        android:layout_height="54dip"
         android:layout_alignParentLeft="true"
-        android:layout_marginRight="9dip"
+        android:layout_centerVertical="true"
+        android:layout_marginRight="8dip"
 
         android:gravity="center"
         android:scaleType="fitCenter"
+        android:background="@drawable/contact_picture_border_in_list"
     />
 
     <TextView android:id="@+id/label"
@@ -51,7 +53,7 @@
         android:layout_toRightOf="@id/photo"
         android:layout_alignParentBottom="true"
         android:layout_marginBottom="8dip"
-        android:layout_marginTop="-8dip"
+        android:layout_marginTop="-10dip"
 
         android:singleLine="true"
         android:ellipsize="marquee"
@@ -64,8 +66,8 @@
         android:layout_height="wrap_content"
         android:layout_marginLeft="5dip"
         android:layout_toRightOf="@id/label"
-        android:layout_alignBaseline="@id/label"
         android:layout_toLeftOf="@id/presence"
+        android:layout_alignBaseline="@id/label"
         android:layout_alignWithParentIfMissing="true"
 
         android:singleLine="true"
@@ -76,12 +78,11 @@
     <TextView android:id="@+id/name"
         android:layout_width="0dip"
         android:layout_height="0dip"
-        android:layout_above="@id/label"
-        android:layout_alignWithParentIfMissing="true"
-        android:layout_alignParentTop="true"
         android:layout_toRightOf="@id/photo"
         android:layout_toLeftOf="@id/presence"
-        android:layout_marginBottom="1dip"
+        android:layout_alignParentTop="true"
+        android:layout_above="@id/label"
+        android:layout_alignWithParentIfMissing="true"
 
         android:singleLine="true"
         android:ellipsize="marquee"
diff --git a/res/layout-finger/list_separator.xml b/res/layout-finger/list_separator.xml
index 5d93d36..0c21541 100644
--- a/res/layout-finger/list_separator.xml
+++ b/res/layout-finger/list_separator.xml
@@ -16,12 +16,5 @@
 
 <!-- Layout used for list separators. -->
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:gravity="center_vertical"
-    android:background="@android:drawable/dark_header"
-    android:textColor="?android:attr/textColorSecondary"
-    android:textStyle="bold"
-    android:textSize="14sp"
-    android:paddingLeft="8dip"
+    style="?android:attr/listSeparatorTextViewStyle"
 />
diff --git a/res/layout-finger/recent_calls_list_item.xml b/res/layout-finger/recent_calls_list_item.xml
index 3df1f13..bab9ea1 100644
--- a/res/layout-finger/recent_calls_list_item.xml
+++ b/res/layout-finger/recent_calls_list_item.xml
@@ -16,55 +16,91 @@
 
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
-    android:layout_height="?android:attr/listPreferredItemHeight">
+    android:layout_height="?android:attr/listPreferredItemHeight"
+    android:paddingLeft="0dip"
+    android:paddingRight="12dip"
+>
+
+    <ImageView android:id="@+id/call_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="fill_parent"
+
+        android:paddingLeft="14dip"
+        android:paddingRight="11dip"
+        
+        android:gravity="center_vertical"
+        android:src="@android:drawable/sym_action_call"
+        android:background="@android:drawable/list_selector_background"
+    />
+
+    <View android:id="@+id/divider"
+        android:layout_width="1dip"
+        android:layout_height="fill_parent"
+        android:layout_toRightOf="@id/call_icon"
+        android:layout_marginRight="11dip"
+
+        android:background="@drawable/divider_vertical_dark"
+    />
 
     <ImageView android:id="@+id/call_type_icon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="4dip"
-        android:layout_centerVertical="true"
-    />
-
-    <TextView android:id="@+id/line1"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toRightOf="@id/call_type_icon"
-        android:layout_marginTop="6dip"
-        android:layout_marginLeft="5dip"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        android:singleLine="true"
-    />
-
-    <TextView android:id="@+id/line2"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@id/line1"
-        android:layout_alignLeft="@id/line1"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:singleLine="true"
-    />
-    
-    <TextView android:id="@+id/duration"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
-        android:layout_alignBaseline="@id/line1"
-        android:layout_toRightOf="@id/line1"
-        android:layout_marginRight="8dip"
-        android:gravity="right"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textStyle="bold"
-        android:textColor="?android:attr/textColorPrimary"
-        android:singleLine="true"
+        android:layout_alignParentTop="true"
     />
     
     <TextView android:id="@+id/date"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
-        android:layout_alignBaseline="@id/line2"
-        android:layout_marginRight="8dip"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="9dip"
+
         android:textAppearance="?android:attr/textAppearanceSmall"
         android:singleLine="true"
     />
+
+    <TextView android:id="@+id/label"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/divider"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="8dip"
+        android:layout_marginTop="-10dip"
+
+        android:singleLine="true"
+        android:ellipsize="marquee"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:textStyle="bold"
+    />
+
+    <TextView android:id="@+id/number"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="5dip"
+        android:layout_toRightOf="@id/label"
+        android:layout_toLeftOf="@id/date"
+        android:layout_alignBaseline="@id/label"
+        android:layout_alignWithParentIfMissing="true"
+
+        android:singleLine="true"
+        android:ellipsize="marquee"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+    />
+
+
+    <TextView android:id="@+id/line1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@id/divider"
+        android:layout_toLeftOf="@id/call_type_icon"
+        android:layout_alignParentTop="true"
+        android:layout_above="@id/label"
+        android:layout_alignWithParentIfMissing="true"
+
+        android:textAppearance="?android:attr/textAppearanceLarge"
+        android:singleLine="true"
+        android:gravity="center_vertical"
+    />
+    
 </RelativeLayout>
diff --git a/res/layout-finger/view_contact_entry.xml b/res/layout-finger/view_contact_entry.xml
deleted file mode 100644
index 772c7d9..0000000
--- a/res/layout-finger/view_contact_entry.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-  
-          http://www.apache.org/licenses/LICENSE-2.0
-  
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeight"
-    android:orientation="horizontal"
->
-
-    <TextView android:id="@+id/label"
-        android:layout_width="72dip"
-        android:layout_height="fill_parent"
-        android:layout_marginLeft="8dip"
-        android:layout_marginRight="10dip"
-        android:gravity="center_vertical"
-        android:singleLine="true"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-    />
-
-    <TextView android:id="@+id/data"
-        android:layout_width="0px"
-        android:layout_height="fill_parent"
-        android:layout_weight="1"
-        android:gravity="center_vertical"
-        android:singleLine="true"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:paddingRight="6dip"
-    />
-</LinearLayout>
diff --git a/res/layout-finger/view_contact_entry_only_label.xml b/res/layout-finger/view_contact_entry_only_label.xml
deleted file mode 100644
index 0cfa3c7..0000000
--- a/res/layout-finger/view_contact_entry_only_label.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-  
-          http://www.apache.org/licenses/LICENSE-2.0
-  
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/label"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:paddingLeft="8dip"
-    android:paddingRight="10dip"
-    android:minHeight="?android:attr/listPreferredItemHeight"
-    android:gravity="center_vertical"
-    android:singleLine="true"
-    android:textAppearance="?android:attr/textAppearanceSmall"
-/>
diff --git a/res/layout-finger/view_contact_entry_organization.xml b/res/layout-finger/view_contact_entry_organization.xml
deleted file mode 100644
index bd80786..0000000
--- a/res/layout-finger/view_contact_entry_organization.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-  
-          http://www.apache.org/licenses/LICENSE-2.0
-  
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeight"
-    android:orientation="horizontal"
->
-
-    <TextView android:id="@+id/label"
-        android:layout_width="72dip"
-        android:layout_height="fill_parent"
-        android:layout_marginLeft="8dip"
-        android:layout_marginRight="10dip"
-        android:gravity="center_vertical"
-        android:singleLine="true"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-    />
-
-    <ImageView android:id="@+id/preferredIcon"
-        android:layout_width="wrap_content"
-        android:layout_height="fill_parent"
-        android:layout_marginRight="8dip"
-        android:src="@drawable/ic_default_number"
-        android:visibility="gone"
-        android:gravity="center_vertical"
-    />
-
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="fill_parent"
-        android:orientation="vertical"
-        android:gravity="center_vertical"
-    >
-        <TextView android:id="@+id/data"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-        />
-
-        <TextView android:id="@+id/data2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-        />
-    </LinearLayout>
-</LinearLayout>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index e82b09b..30d410e 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"Kontakty"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"Vytáčení"</string>
     <string name="shortcutContact">"Kontakt"</string>
     <string name="starredList">"Označené hvězdičkou"</string>
     <string name="frequentList">"Časté"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"Upravit kontakt"</string>
     <string name="insertContactDescription">"Vytvořit kontakt"</string>
     <string name="searchHint">"Vyhledat kontakty"</string>
+    <string name="menu_search">"Hledat"</string>
     <string name="menu_newContact">"Nový kontakt"</string>
     <string name="menu_viewContact">"Zobrazit kontakt"</string>
     <string name="menu_callNumber">"Volat kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"Smazat"</string>
     <string name="deleteConfirmation">"Tento kontakt bude smazán."</string>
     <string name="menu_done">"Hotovo"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"Vrátit"</string>
     <string name="editContact_title_edit">"Upravit kontakt"</string>
     <string name="editContact_title_insert">"Nový kontakt"</string>
     <string name="menu_addItem">"Další informace"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"Hlasová schránka"</string>
     <string name="unknown">"Neznámé číslo"</string>
     <string name="private_num">"Soukromé číslo"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Číslo vytočíte pomocí klávesnice"</string>
     <string name="dialerDialpadHintText">"Vytočením přidat hovor"</string>
     <string name="simContacts_emptyLoading">"Načítání z karty SIM..."</string>
     <string name="simContacts_title">"Kontakty na kartě SIM"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchronizujte své kontakty Google!"</font>" "\n"Po synchronizaci telefonu budete mít kontaktní informace vždy u sebe."</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"Nemáte žádné kontakty."\n\n"Chcete-li kontakty přidat, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a vyberte možnost:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit nový kontakt"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importovat kontakty"</b></font>", pokud chcete přidat kontakty ze své karty SIM"\n</li>"."</string>
+    <string name="noContactsHelpTextWithSync">"Nemáte žádné kontakty."\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a vyberte možnost:"\n\n<li><font fgcolor="#ffffffff"><b>"Upravit synchronizované skupiny"</b></font>", pokud chcete přidat kontakty z nového nebo existujícího účtu Google"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", pokud chcete vytvořit nový kontakt"\n</li>\n<li><font fgcolor="#ffffffff"><b>"Importovat kontakty"</b></font>", pokud chcete přidat kontakty ze své karty SIM"\n</li>"."</string>
     <string name="seclectSyncGroups_title">"Vyberte skupiny, které chcete synchronizovat"</string>
     <string name="liveFolder_all_label">"Všechny kontakty"</string>
     <string name="liveFolder_favorites_label">"S hvězdičkou"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"Budou odeslány přímo do hlasové pošty."</string>
     <string name="detailsRingtone">"Nastavit vyzvánění <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Zavolat zpět"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"Zavolat znovu"</string>
+    <string name="returnCall">"Zpětné volání"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="favoritesFrquentSeparator">"Často volané"</string>
+    <string name="add_contact_dlg_title">"Přidat kontakt"</string>
+    <string name="add_contact_dlg_message_fmt">"Chcete přidat „<xliff:g id="EMAIL">%s</xliff:g>“ do kontaktů?"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 507d69d..cabc99d 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"Kontakte"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"Telefon"</string>
     <string name="shortcutContact">"Kontakt"</string>
     <string name="starredList">"Markiert"</string>
     <string name="frequentList">"Häufig"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"Kontakt bearbeiten"</string>
     <string name="insertContactDescription">"Kontakt erstellen"</string>
     <string name="searchHint">"Kontakte durchsuchen"</string>
+    <string name="menu_search">"Suchen"</string>
     <string name="menu_newContact">"Neuer Kontakt"</string>
     <string name="menu_viewContact">"Kontakt anzeigen"</string>
     <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g> anrufen"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"Löschen"</string>
     <string name="deleteConfirmation">"Dieser Kontakt wird gelöscht."</string>
     <string name="menu_done">"Fertig"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"Rückgängig"</string>
     <string name="editContact_title_edit">"Kontakt bearbeiten"</string>
     <string name="editContact_title_insert">"Neuer Kontakt"</string>
     <string name="menu_addItem">"Weitere Informationen"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"Mailbox"</string>
     <string name="unknown">"Unbekannt"</string>
     <string name="private_num">"Private Nummer"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Mit Tastatur wählen"</string>
     <string name="dialerDialpadHintText">"Zum Hinzufügen eines Anrufs wählen"</string>
     <string name="simContacts_emptyLoading">"Ladevorgang von SIM-Karte läuft..."</string>
     <string name="simContacts_title">"Kontakte auf SIM-Karte"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchronisieren Sie Ihre Google-Kontakte!"</font>" "\n"Nach der Synchronisierung stehen Ihnen Ihre Kontakte überall zur Verfügung."</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"Es sind keine Kontakte vorhanden."\n\n"Drücken Sie zum Hinzufügen von Kontakten auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und wählen Sie Folgendes aus:"\n\n"        "<li><font fgcolor="#ffffffff"><b></b>"Neuer Kontakt"</font>\n", um einen neuen Kontakt zu erstellen"</li>\n<li>"        "<font fgcolor="#ffffffff"><b></b></font>"Kontakte importieren"\n</li>", um Kontakte von Ihrer SIM-Karte hinzuzufügen"</string>
+    <string name="noContactsHelpTextWithSync">"Sie haben keine Kontakte."\n\n"Drücken Sie zum Hinzufügen die "<font fgcolor="#ffffffff"><b>"Menütaste"</b></font>" und wählen Sie"\n\n"        "<li><font fgcolor="#ffffffff"><b>"Synchronisierungsgruppen bearbeiten"</b></font>", um Kontakte mit einem neuen oder bestehenden Google-Konto zu synchronisieren,"\n</li>\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen Kontakt neu zu erstellen, "\n</li>\n"        "<li><font fgcolor="#ffffffff"><b>"Kontakte importieren"</b></font>", um Kontakte von Ihrer SIM-Karte hinzuzufügen."\n</li></string>
     <string name="seclectSyncGroups_title">"Zu synchronisierende Gruppen auswählen"</string>
     <string name="liveFolder_all_label">"Alle Kontakte"</string>
     <string name="liveFolder_favorites_label">"Markiert"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"Wird direkt an Voicemail weitergeleitet"</string>
     <string name="detailsRingtone">"Eingestellt auf <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Rückruf"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"Erneut anrufen"</string>
+    <string name="returnCall">"Zurückrufen"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> Minuten, <xliff:g id="SECONDS">%s</xliff:g> Sekunden"</string>
+    <string name="favoritesFrquentSeparator">"Häufig angerufen"</string>
+    <string name="add_contact_dlg_title">"Kontakt hinzufügen"</string>
+    <string name="add_contact_dlg_message_fmt">"\"<xliff:g id="EMAIL">%s</xliff:g>\" zu den Kontakten hinzufügen?"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index f41406d..af47792 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -16,7 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"Contactos"</string>
-    <string name="launcherDialer">"Llamadas"</string>
+    <string name="launcherDialer">"Marcador"</string>
     <string name="shortcutContact">"Contacto"</string>
     <string name="starredList">"Destacados"</string>
     <string name="frequentList">"Frecuentes"</string>
@@ -26,6 +26,7 @@
     <string name="editContactDescription">"Editar contacto"</string>
     <string name="insertContactDescription">"Crear contacto"</string>
     <string name="searchHint">"Buscar contactos"</string>
+    <string name="menu_search">"Buscar"</string>
     <string name="menu_newContact">"Contacto nuevo"</string>
     <string name="menu_viewContact">"Ver contacto"</string>
     <string name="menu_callNumber">"Llamar a <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -124,13 +125,15 @@
     <string name="voicemail">"Buzón de voz"</string>
     <string name="unknown">"Desconocidos"</string>
     <string name="private_num">"Número privado"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Utilizar teclado para marcar"</string>
     <string name="dialerDialpadHintText">"Marcar para añadir una llamada"</string>
     <string name="simContacts_emptyLoading">"Cargando desde tarjeta SIM…"</string>
     <string name="simContacts_title">"Contactos de tarjeta SIM"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Sincroniza tus contactos de Google"</font>" "\n"Después de sincronizarlos con tu teléfono, podrás acceder a tus contactos desde cualquier lugar."</string>
-    <string name="noContactsHelpText">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla  "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para añadir un nuevo contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadir contactos de la tarjeta SIM"\n</li></string>
-    <string name="noContactsHelpTextWithSync">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Editar grupos de sincronización"</b></font>" para añadirlos desde una cuenta de Google nueva o existente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadir contactos de la tarjeta SIM"\n</li></string>
+    <string name="noContactsHelpText">"No tienes ningún contacto."\n\n"Si quieres añadir alguno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y selecciona:"\n\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para añadir un contacto manualmente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadirlos desde tu tarjeta SIM"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"No tienes ningún contacto."\n\n"Si quieres añadir alguno, pulsa la tecla de menú"<font fgcolor="#ffffffff"><b></b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Editar grupos de sincronización"</b></font>" para añadirlos desde una cuenta de Google nueva o ya existente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuevo contacto"</b></font>" para añadir un contacto manualmente"\n</li>\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadirlos desde la tarjeta SIM"\n</li></string>
     <string name="seclectSyncGroups_title">"Seleccionar grupos para la sincronización"</string>
     <string name="liveFolder_all_label">"Todos los contactos"</string>
     <string name="liveFolder_favorites_label">"Destacados"</string>
@@ -159,7 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"Pasarán directamente al correo de voz"</string>
     <string name="detailsRingtone">"Establecido como <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Volver a llamar"</string>
-    <string name="callAgain">"Llamar de nuevo"</string>
+    <string name="callAgain">"Volver a llamar"</string>
     <string name="returnCall">"Devolver llamada"</string>
-    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> seg."</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min. y <xliff:g id="SECONDS">%s</xliff:g> seg."</string>
+    <string name="favoritesFrquentSeparator">"Más llamados"</string>
+    <string name="add_contact_dlg_title">"Añadir contacto"</string>
+    <string name="add_contact_dlg_message_fmt">"¿Deseas añadir \"<xliff:g id="EMAIL">%s</xliff:g>\" a Contactos?"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index ce00813..b84b99a 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -26,6 +26,7 @@
     <string name="editContactDescription">"Modifier le contact"</string>
     <string name="insertContactDescription">"Créer un contact"</string>
     <string name="searchHint">"Rechercher des contacts"</string>
+    <string name="menu_search">"Rechercher"</string>
     <string name="menu_newContact">"Nouveau contact"</string>
     <string name="menu_viewContact">"Afficher le contact"</string>
     <string name="menu_callNumber">"Appeler <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -42,7 +43,7 @@
     <string name="deleteConfirmation_title">"Supprimer"</string>
     <string name="deleteConfirmation">"Ce contact sera supprimé."</string>
     <string name="menu_done">"OK"</string>
-    <string name="menu_doNotSave">"Annuler"</string>
+    <string name="menu_doNotSave">"Rétablir"</string>
     <string name="editContact_title_edit">"Modifier le contact"</string>
     <string name="editContact_title_insert">"Nouveau contact"</string>
     <string name="menu_addItem">"Plus d\'infos"</string>
@@ -124,13 +125,15 @@
     <string name="voicemail">"Boîte vocale"</string>
     <string name="unknown">"Inconnu"</string>
     <string name="private_num">"Numéro privée"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Utilisez le clavier pour composer le numéro"</string>
     <string name="dialerDialpadHintText">"Composer le numéro pour ajouter un appel"</string>
     <string name="simContacts_emptyLoading">"Chargement depuis la carte SIM..."</string>
     <string name="simContacts_title">"Contacts de carte SIM"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchronisez vos contacts Google !"</font>" "\n"Vos contacts seront disponibles, où que vous soyez, dès que vous aurez synchronisé votre téléphone."</string>
-    <string name="noContactsHelpText">"Aucun contact."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un tout nouveau contact"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer des contacts"</b></font>" pour ajouter des contacts à partir de votre carte SIM"\n</li></string>
-    <string name="noContactsHelpTextWithSync">"Aucun contact."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Param. sync. groupes"</b></font>" pour ajouter des contacts depuis un nouveau compte Google ou un compte existant."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un tout nouveau contact"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer des contacts"</b></font>" pour ajouter des contacts à partir de votre carte SIM"\n</li></string>
+    <string name="noContactsHelpText">"Vous n\'avez aucun contact."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact de toutes pièces ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer des contacts"</b></font>" pour ajouter des contacts à partir de votre carte SIM."\n</li></string>
+    <string name="noContactsHelpTextWithSync">"Vous n\'avez aucun contact."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Param. sync. groupes"</b></font>" pour ajouter un contact à partir d\'un nouveau compte Google ou d\'un compte existant ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un contact de toutes pièces ;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer des contacts"</b></font>" pour ajouter des contacts à partir de votre carte SIM."\n</li></string>
     <string name="seclectSyncGroups_title">"Sélectionner les groupes à synchroniser"</string>
     <string name="liveFolder_all_label">"Tous les contacts"</string>
     <string name="liveFolder_favorites_label">"Suivis"</string>
@@ -159,7 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"Seront envoyés directement en tant que message vocal"</string>
     <string name="detailsRingtone">"Associer à <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Rappeler"</string>
-    <string name="callAgain">"Rappeler"</string>
+    <string name="callAgain">"Renouveler l\'appel"</string>
     <string name="returnCall">"Rappeler"</string>
-    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> mn <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> mn <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="favoritesFrquentSeparator">"Fréquemment appelés"</string>
+    <string name="add_contact_dlg_title">"Ajouter un contact"</string>
+    <string name="add_contact_dlg_message_fmt">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts ?"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 59064f0..8c7a4ef 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -26,6 +26,7 @@
     <string name="editContactDescription">"Modifica contatto"</string>
     <string name="insertContactDescription">"Crea contatto"</string>
     <string name="searchHint">"Cerca contatti"</string>
+    <string name="menu_search">"Cerca"</string>
     <string name="menu_newContact">"Nuovo contatto"</string>
     <string name="menu_viewContact">"Visualizza contatto"</string>
     <string name="menu_callNumber">"Chiama <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -78,7 +79,7 @@
     <string name="syncGroupPreference">"Modifica sincr. gruppi"</string>
     <string name="importFromSim">"Importa contatti"</string>
     <string name="send_to_voicemail_checkbox">"Inoltra chiamate direttamente alla segreteria"</string>
-    <string name="send_to_voicemail_view">"Le chiamate vengono inoltrate direttamente alla segreteria."</string>
+    <string name="send_to_voicemail_view">"Chiamate inoltrate direttamente alla segreteria."</string>
     <string name="default_ringtone">"Predefinita"</string>
     <string name="addPicture">"Aggiungi icona"</string>
     <string name="removePicture">"Rimuovi icona"</string>
@@ -109,7 +110,7 @@
     <string name="contactsIconLabel">"Contatti"</string>
     <string name="contactsFavoritesLabel">"Preferiti"</string>
     <string name="dialerIconLabel">"Telefono"</string>
-    <string name="recentCallsIconLabel">"Reg. chiamate"</string>
+    <string name="recentCallsIconLabel">"Chiamate"</string>
     <string name="liveFolderAll">"Tutti i contatti"</string>
     <string name="liveFolderFavorites">"Contatti speciali"</string>
     <string name="liveFolderPhone">"Contatti con numeri di telefono"</string>
@@ -124,13 +125,15 @@
     <string name="voicemail">"Segreteria"</string>
     <string name="unknown">"Sconosciuto"</string>
     <string name="private_num">"Numero privato"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Usa la tastiera"</string>
     <string name="dialerDialpadHintText">"Componi per aggiungere una chiamata"</string>
     <string name="simContacts_emptyLoading">"Caricamento da SIM..."</string>
     <string name="simContacts_title">"Contatti SIM"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Sincronizza i tuoi contatti Google."</font>" "\n"Dopo la sincronizzazione con il telefono, i tuoi contatti saranno sempre a tua disposizione."</string>
-    <string name="noContactsHelpText">"Non hai nessun contatto."\n\n"Per aggiungere dei contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere i contatti salvati sulla scheda SIM card"\n</li></string>
-    <string name="noContactsHelpTextWithSync">"Non hai nessun contatto."\n\n"Per aggiungere i contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Modifica sincr. gruppi"</b></font>" per aggiungere contatti da un account Google nuovo o già esistente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un contatto nuovo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere i contatti salvati sulla scheda SIM"\n</li></string>
+    <string name="noContactsHelpText">"Non è presente alcun contatto."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un contatto nuovo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere contatti dalla SIM"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"Non è presente alcun contatto."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>" Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Modifica sincr. gruppi"</b></font>" per aggiungere contatti da un account Google nuovo o esistente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un contatto nuovo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere contatti dalla SIM"\n</li></string>
     <string name="seclectSyncGroups_title">"Seleziona i gruppi da sincronizzare"</string>
     <string name="liveFolder_all_label">"Tutti i contatti"</string>
     <string name="liveFolder_favorites_label">"Speciali"</string>
@@ -161,5 +164,8 @@
     <string name="callBack">"Richiama"</string>
     <string name="callAgain">"Richiama"</string>
     <string name="returnCall">"Chiama numero"</string>
-    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+    <string name="favoritesFrquentSeparator">"Numeri più chiamati"</string>
+    <string name="add_contact_dlg_title">"Aggiungi contatto"</string>
+    <string name="add_contact_dlg_message_fmt">"Aggiungere \"<xliff:g id="EMAIL">%s</xliff:g>\" ai contatti?"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 117c015..ba6c499 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,20 +16,20 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"連絡先"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"電話"</string>
     <string name="shortcutContact">"連絡先"</string>
     <string name="starredList">"スター付き"</string>
-    <string name="frequentList">"よく連絡する連絡先"</string>
+    <string name="frequentList">"よく使う連絡先"</string>
     <string name="strequentList">"お気に入り"</string>
     <string name="viewContactTitle">"連絡先情報"</string>
     <string name="viewContactDesription">"連絡先を表示"</string>
     <string name="editContactDescription">"連絡先を編集"</string>
     <string name="insertContactDescription">"連絡先を新規登録"</string>
     <string name="searchHint">"連絡先を検索"</string>
+    <string name="menu_search">"検索"</string>
     <string name="menu_newContact">"連絡先を新規登録"</string>
-    <string name="menu_viewContact">"連絡先を表示"</string>
-    <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g>さんに発信"</string>
+    <string name="menu_viewContact">"連絡先詳細"</string>
+    <string name="menu_callNumber">"発信 <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="menu_addStar">"お気に入りに追加"</string>
     <string name="menu_removeStar">"お気に入りから削除"</string>
     <string name="menu_showBarcode">"バーコードを表示"</string>
@@ -43,16 +43,15 @@
     <string name="deleteConfirmation_title">"削除"</string>
     <string name="deleteConfirmation">"この連絡先を削除します。"</string>
     <string name="menu_done">"完了"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"キャンセル"</string>
     <string name="editContact_title_edit">"連絡先を編集"</string>
     <string name="editContact_title_insert">"連絡先を新規登録"</string>
     <string name="menu_addItem">"情報を追加"</string>
-    <string name="label_phonetic_name">"音声"</string>
+    <string name="label_phonetic_name">"読み"</string>
     <string name="label_notes">"メモ"</string>
     <string name="label_ringtone">"着信音"</string>
     <string name="ghostData_name">"名前"</string>
-    <string name="ghostData_phonetic_name">"音声名"</string>
+    <string name="ghostData_phonetic_name">"読み仮名"</string>
     <string name="ghostData_company">"会社"</string>
     <string name="ghostData_title">"役職"</string>
     <string name="ghostData_im">"IM名"</string>
@@ -60,27 +59,27 @@
     <string name="ghostData_phone">"電話番号"</string>
     <string name="ghostData_email">"メールアドレス"</string>
     <string name="ghostData_postal">"住所"</string>
-    <string name="invalidContactMessage">"この連絡先は消去されています。"</string>
+    <string name="invalidContactMessage">"この連絡先は削除されました"</string>
     <string name="pickerNewContactHeader">"連絡先を新規登録"</string>
     <string name="selectLabel">"選択してください"</string>
     <string name="phoneLabelsGroup">"電話番号"</string>
     <string name="emailLabelsGroup">"メール"</string>
-    <string name="imLabelsGroup">"IM"</string>
+    <string name="imLabelsGroup">"チャット"</string>
     <string name="postalLabelsGroup">"住所"</string>
     <string name="otherLabelsGroup">"その他"</string>
   <string-array name="otherLabels">
-    <item>"勤務先情報"</item>
+    <item>"所属"</item>
     <item>"メモ"</item>
   </string-array>
-    <string name="errorDialogTitle">"写真なし"</string>
-    <string name="photoPickerNotFoundText">"写真がありません。"</string>
+    <string name="errorDialogTitle">"画像なし"</string>
+    <string name="photoPickerNotFoundText">"画像がありません。"</string>
     <string name="attachToContact">"連絡先のアイコン"</string>
     <string name="customLabelPickerTitle">"新しいラベル名"</string>
     <string name="menu_displayGroup">"グループを表示"</string>
-    <string name="syncGroupPreference">"同期グループを編集"</string>
+    <string name="syncGroupPreference">"同期する範囲"</string>
     <string name="importFromSim">"連絡先をインポート"</string>
-    <string name="send_to_voicemail_checkbox">"ボイスメールに直接電話します。"</string>
-    <string name="send_to_voicemail_view">"この番号にかけるとボイスメールに送信されます。"</string>
+    <string name="send_to_voicemail_checkbox">"ボイスメールに自動転送する"</string>
+    <string name="send_to_voicemail_view">"この番号にかけるとボイスメールに転送されます。"</string>
     <string name="default_ringtone">"端末既定"</string>
     <string name="addPicture">"アイコンを追加"</string>
     <string name="removePicture">"アイコンを削除"</string>
@@ -93,9 +92,11 @@
     <string name="syncAllGroups">"全連絡先を同期"</string>
     <string name="groupNameMyContacts">"Myコンタクト"</string>
     <string name="groupNameWithPhones">"電話番号のある連絡先"</string>
+    <!-- no translation found for starredInAndroid (6495527538140213440) -->
+    <skip />
     <string name="contactCreatedToast">"連絡先を作成しました。"</string>
     <string name="contactSavedToast">"連絡先を保存しました。"</string>
-    <string name="listSeparatorCallNumber">"電話をかける"</string>
+    <string name="listSeparatorCallNumber">"発信"</string>
     <string name="listSeparatorCallNumber_edit">"電話番号"</string>
     <string name="listSeparatorSendSmsMms">"SMS/MMSを送信"</string>
     <string name="listSeparatorSendEmail">"メールを送信"</string>
@@ -104,19 +105,19 @@
     <string name="listSeparatorSendIm_edit">"チャットアドレス"</string>
     <string name="listSeparatorMapAddress">"地図でみる"</string>
     <string name="listSeparatorMapAddress_edit">"住所"</string>
-    <string name="listSeparatorOrganizations">"勤務先情報"</string>
+    <string name="listSeparatorOrganizations">"所属"</string>
     <string name="listSeparatorOtherInformation">"その他の情報"</string>
     <string name="listSeparatorOtherInformation_edit">"その他のオプション"</string>
     <string name="listSeparatorMore_edit">"開く"</string>
     <string name="contactsIconLabel">"連絡先"</string>
-    <string name="contactsFavoritesLabel">"お気に入り"</string>
-    <string name="dialerIconLabel">"通話"</string>
+    <string name="contactsFavoritesLabel">"お気入り"</string>
+    <string name="dialerIconLabel">"電話"</string>
     <string name="recentCallsIconLabel">"通話履歴"</string>
     <string name="liveFolderAll">"すべての連絡先"</string>
     <string name="liveFolderFavorites">"スター付きの連絡先"</string>
     <string name="liveFolderPhone">"電話番号のある連絡先"</string>
     <string name="menu_sendTextMessage">"SMSメッセージを送信"</string>
-    <string name="recentCalls_callNumber">"<xliff:g id="NAME">%s</xliff:g>さんに発信"</string>
+    <string name="recentCalls_callNumber">"発信 <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="recentCalls_editNumberBeforeCall">"発信前に番号を編集"</string>
     <string name="recentCalls_addToContact">"連絡先に追加"</string>
     <string name="recentCalls_removeFromRecentList">"通話履歴から消去"</string>
@@ -124,17 +125,17 @@
     <string name="recentCalls_empty">"通話履歴なし"</string>
     <string name="imei">"IMEI(端末識別番号)"</string>
     <string name="voicemail">"ボイスメール"</string>
-    <string name="unknown">"不明"</string>
-    <string name="private_num">"非通知番号"</string>
+    <string name="unknown">"通知不可能"</string>
+    <string name="private_num">"非通知"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"キーボードで番号を入力してください"</string>
-    <string name="dialerDialpadHintText">"ダイヤルして追加"</string>
+    <string name="dialerDialpadHintText">"ダイヤルして通話追加"</string>
     <string name="simContacts_emptyLoading">"SIMカードから読み取り中..."</string>
     <string name="simContacts_title">"SIMカードの連絡先"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Googleアカウントの連絡先同期"</font>" "\n"Googleサービスで使っている連絡先をこの携帯電話でも使えるようになります。"</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"連絡先が登録されていません。"\n\n<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押して登録方法を選択してください:"\n" "\n<li><font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>": 連絡先を入力して新規作成します"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"連絡先をインポート"</b></font>": 連絡先をSIMカードから取り込みます"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"連絡先が登録されていません。"\n\n<font fgcolor="#ffffffff"><b>"MENU"</b></font>"キーを押して登録方法を選択してください:"\n\n<li><font fgcolor="#ffffffff"><b>"同期する範囲"</b></font>": Googleアカウントから連絡先を読み込んで追加します"\n</li>\n<li><font fgcolor="#ffffffff"><b>"連絡先を新規登録"</b></font>": 連絡先を入力して新規作成します"\n</li>\n<li><font fgcolor="#ffffffff"><b>"連絡先をインポート"</b></font>": 連絡先をSIMカードから取り込みます"\n</li></string>
     <string name="seclectSyncGroups_title">"同期するグループを選択"</string>
     <string name="liveFolder_all_label">"すべての連絡先"</string>
     <string name="liveFolder_favorites_label">"スター付き"</string>
@@ -156,17 +157,17 @@
     <string name="add_more_items">"その他の項目を追加"</string>
     <string name="actionCall">"<xliff:g id="TYPE">%s</xliff:g>に発信"</string>
     <string name="actionEmail">"<xliff:g id="TYPE">%s</xliff:g>にメールを送信"</string>
-    <string name="actionText">"<xliff:g id="TYPE">%s</xliff:g>にテキストを送信"</string>
-    <string name="actionChat">"<xliff:g id="TYPE">%s</xliff:g>を使用してチャット"</string>
-    <string name="actionMap">"<xliff:g id="TYPE">%s</xliff:g>の住所を表示"</string>
+    <string name="actionText">"<xliff:g id="TYPE">%s</xliff:g>にSMSを送信"</string>
+    <string name="actionChat">"<xliff:g id="TYPE">%s</xliff:g>でチャット"</string>
+    <string name="actionMap">"<xliff:g id="TYPE">%s</xliff:g>の住所を地図で見る"</string>
     <string name="actionIncomingCall">"着信"</string>
-    <string name="detailIncomingCallsGoToVoicemail">"直接ボイスメールに送信します"</string>
+    <string name="detailIncomingCallsGoToVoicemail">"ボイスメールに自動転送されます"</string>
     <string name="detailsRingtone">"<xliff:g id="RINGTONE_NAME">%s</xliff:g>に設定"</string>
     <string name="callBack">"コールバック"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"再発信"</string>
+    <string name="returnCall">"発信"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g>分<xliff:g id="SECONDS">%s</xliff:g>秒"</string>
+    <string name="favoritesFrquentSeparator">"よく使う連絡先"</string>
+    <string name="add_contact_dlg_title">"連絡先を追加"</string>
+    <string name="add_contact_dlg_message_fmt">"<xliff:g id="EMAIL">%s</xliff:g> を連絡先に追加しますか?"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index aafe0d0..9275244 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"연락처"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"Dialer"</string>
     <string name="shortcutContact">"연락처"</string>
     <string name="starredList">"별표 표시된 연락처"</string>
     <string name="frequentList">"자주 거는 전화"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"연락처 편집"</string>
     <string name="insertContactDescription">"연락처 만들기"</string>
     <string name="searchHint">"연락처 검색"</string>
+    <string name="menu_search">"검색"</string>
     <string name="menu_newContact">"새 연락처"</string>
     <string name="menu_viewContact">"연락처 보기"</string>
     <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g>에게 전화걸기"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"삭제"</string>
     <string name="deleteConfirmation">"연락처가 삭제됩니다."</string>
     <string name="menu_done">"완료"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"되돌리기"</string>
     <string name="editContact_title_edit">"연락처 편집"</string>
     <string name="editContact_title_insert">"새 연락처"</string>
     <string name="menu_addItem">"추가정보"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"음성메일"</string>
     <string name="unknown">"알 수 없음"</string>
     <string name="private_num">"비공개 번호"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"키보드를 사용하여 전화걸기"</string>
     <string name="dialerDialpadHintText">"통화를 추가할 전화번호 입력"</string>
     <string name="simContacts_emptyLoading">"SIM 카드에서 로드 중…"</string>
     <string name="simContacts_title">"SIM 카드 연락처"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Google 연락처를 동기화하세요."</font>" "\n"연락처를 전화기로 동기화하면 어디에서나 연락처를 확인할 수 있습니다."</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"저장된 주소록이 없습니다."\n\n"주소록을 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 선택하세요."\n" "\n<li><font fgcolor="#ffffffff"><b>"새 주소록"</b></font>" - 주소록을 새로 생성하려는 경우"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"주소록 가져오기"</b></font>" - SIM 카드에서 주소록을 추가하려는 경우"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"저장된 주소록이 없습니다."\n\n"주소록을 추가하려면 "<font fgcolor="#ffffffff"><b>"메뉴"</b></font>"를 누르고 다음을 선택하세요."\n\n" "<li><font fgcolor="#ffffffff"><b>"동기화 그룹 수정"</b></font>" - 새 계정 또는 기존 Google 계정에서 추가하려는 경우"\n</li>\n" "<li><font fgcolor="#ffffffff"><b>"새 주소록"</b></font>" - 주소록을 새로 생성하려는 경우"\n</li>\n" "<li><font fgcolor="#ffffffff"><b>"주소록 가져오기"</b></font>" - SIM 카드에서 주소록을 추가하려는 경우"\n</li></string>
     <string name="seclectSyncGroups_title">"동기화할 그룹 선택"</string>
     <string name="liveFolder_all_label">"전체 주소록"</string>
     <string name="liveFolder_favorites_label">"중요편지함"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"음성메일로 바로 보냄"</string>
     <string name="detailsRingtone">"<xliff:g id="RINGTONE_NAME">%s</xliff:g>(으)로 설정"</string>
     <string name="callBack">"콜백"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"다시 걸기"</string>
+    <string name="returnCall">"부재중 전화에 전화 걸기"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
+    <string name="favoritesFrquentSeparator">"자주 통화한 목록"</string>
+    <string name="add_contact_dlg_title">"주소 추가"</string>
+    <string name="add_contact_dlg_message_fmt">"주소록에 \'<xliff:g id="EMAIL">%s</xliff:g>\'을(를) 추가하시겠습니까?"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 3b47bac..c00eb4a 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -26,6 +26,8 @@
     <string name="editContactDescription">"Rediger kontakt"</string>
     <string name="insertContactDescription">"Opprett kontakt"</string>
     <string name="searchHint">"Søk i kontakter"</string>
+    <!-- no translation found for menu_search (9147752853603483719) -->
+    <skip />
     <string name="menu_newContact">"Ny kontakt"</string>
     <string name="menu_viewContact">"Se på kontakt"</string>
     <string name="menu_callNumber">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -42,8 +44,7 @@
     <string name="deleteConfirmation_title">"Slett"</string>
     <string name="deleteConfirmation">"Denne kontakten vil bli slettet."</string>
     <string name="menu_done">"Lagre"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"Tilbakestill"</string>
     <string name="editContact_title_edit">"Rediger kontakt"</string>
     <string name="editContact_title_insert">"Ny kontakt"</string>
     <string name="menu_addItem">"Mer informasjon"</string>
@@ -125,15 +126,15 @@
     <string name="voicemail">"Telefonsvarer"</string>
     <string name="unknown">"Ukjent"</string>
     <string name="private_num">"Skjult nummer"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Bruk tastaturet for å ringe"</string>
     <string name="dialerDialpadHintText">"Ring for å legge til en samtale"</string>
     <string name="simContacts_emptyLoading">"Henter fra SIM-kort…"</string>
     <string name="simContacts_title">"Kontakter på SIM-kort"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synkroniser Google-kontaktene dine!"</font>" "\n"Etter å ha synkronisert telefonen vil kontaktene dine bli tilgjengelig overalt."</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"Du har ingen kontakter."\n\n"For å legge til kontakter, trykk "<font fgcolor="#ffffffff"><b>"menyknappen"</b></font>" og velg:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å lage en ny kontakt fra grunnen av"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer kontakter"</b></font>" for å legge til kontakter fra SIM-kortet"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"Du har ingen kontakter."\n\n"For å legge til kontakter, trykk "<font fgcolor="#ffffffff"><b>"menyknappen"</b></font>" og velg:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Rediger synkroniserte grupper"</b></font>" for å legge til fra en ny eller eksisterende Google-konto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Ny kontakt"</b></font>" for å lage en ny kontakt fra grunnen av"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer kontakter"</b></font>" for å legge til kontakter fra SIM-kortet"\n</li></string>
     <string name="seclectSyncGroups_title">"Velg grupper som skal synkroniseres"</string>
     <string name="liveFolder_all_label">"Alle kontakter"</string>
     <string name="liveFolder_favorites_label">"Med stjerne"</string>
@@ -162,10 +163,13 @@
     <string name="detailIncomingCallsGoToVoicemail">"Vil bli sendt rett til telefonsvarer"</string>
     <string name="detailsRingtone">"Sett til <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Ring tilbake"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
+    <string name="callAgain">"Ring på nytt"</string>
+    <string name="returnCall">"Ring tilbake"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
     <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
+    <!-- no translation found for add_contact_dlg_title (2789046541229846116) -->
     <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
+    <!-- no translation found for add_contact_dlg_message_fmt (7986472669444326576) -->
     <skip />
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 0d3a556..9aed711 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"Contacten"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"Telefoon"</string>
     <string name="shortcutContact">"Contacten"</string>
     <string name="starredList">"Met ster"</string>
     <string name="frequentList">"Vaak"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"Contactpersoon bewerken"</string>
     <string name="insertContactDescription">"Contactpersoon maken"</string>
     <string name="searchHint">"Contacten zoeken"</string>
+    <string name="menu_search">"Zoeken"</string>
     <string name="menu_newContact">"Nieuwe contactpersoon"</string>
     <string name="menu_viewContact">"Contactpersoon weergeven"</string>
     <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g> bellen"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"Verwijderen"</string>
     <string name="deleteConfirmation">"Deze contactpersoon wordt verwijderd."</string>
     <string name="menu_done">"Gereed"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"Terugkeren"</string>
     <string name="editContact_title_edit">"Contactpersoon bewerken"</string>
     <string name="editContact_title_insert">"Nieuwe contactpersoon"</string>
     <string name="menu_addItem">"Meer informatie"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"Voicemail"</string>
     <string name="unknown">"Onbekend"</string>
     <string name="private_num">"Privénummer"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Toetsen gebruiken om te bellen"</string>
     <string name="dialerDialpadHintText">"Bellen om een oproep toe te voegen"</string>
     <string name="simContacts_emptyLoading">"Laden vanaf SIM-kaart..."</string>
     <string name="simContacts_title">"Contacten op SIM-kaart"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchroniseer uw Google-contacten!"</font>" "\n"Zodra uw telefoon is gesynchroniseerd, heeft u uw contacten altijd ter beschikking."</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"Je hebt geen contacten."\n\n"Als je contacten wilt toevoegen, druk je op "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" en selecteer je:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nieuw contact"</b></font>" om een nieuw contact te maken"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacten importeren"</b></font>" om contacten vanaf je SIM-kaart toe te voegen"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"Je hebt geen contacten."\n\n"Als je contacten wilt toevoegen, klik je op "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" en selecteer je:"\n\n<li><font fgcolor="#ffffffff"><b>"\'Synchronisatiegroepen bewerken\'"</b></font>" om contacten toe te voegen uit een nieuw of bestaand Google-account"\n</li>\n"        "<li><font fgcolor="#ffffffff"><b>"\'Nieuw contact\'"</b></font>" om een geheel nieuwe contact te maken"\n</li>\n"        "<li><font fgcolor="#ffffffff"><b>"\'Contacten importeren\'"</b></font>" om contact te importeren vanaf je SIM-kaart"\n</li></string>
     <string name="seclectSyncGroups_title">"Groepen selecteren om te synchroniseren"</string>
     <string name="liveFolder_all_label">"Alle contacten"</string>
     <string name="liveFolder_favorites_label">"Met ster"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"Wordt direct naar voicemail verzonden"</string>
     <string name="detailsRingtone">"Ingesteld op <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Terugbellen"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"Opnieuw bellen"</string>
+    <string name="returnCall">"Terugbellen"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+    <string name="favoritesFrquentSeparator">"Vaak gebeld"</string>
+    <string name="add_contact_dlg_title">"Contact toevoegen"</string>
+    <string name="add_contact_dlg_message_fmt">"\"<xliff:g id="EMAIL">%s</xliff:g>\" toevoegen aan contacten?"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index feb5c8b..844c214 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"Kontakty"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"Wybieranie numeru"</string>
     <string name="shortcutContact">"Kontakt"</string>
     <string name="starredList">"Oznaczony gwiazdką"</string>
     <string name="frequentList">"Częste"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"Edytuj kontakt"</string>
     <string name="insertContactDescription">"Utwórz kontakt"</string>
     <string name="searchHint">"Przeszukuj kontakty"</string>
+    <string name="menu_search">"Szukaj"</string>
     <string name="menu_newContact">"Nowy kontakt"</string>
     <string name="menu_viewContact">"Wyświetl kontakt"</string>
     <string name="menu_callNumber">"Zadzwoń do kontaktu <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"Usuń"</string>
     <string name="deleteConfirmation">"Ten kontakt zostanie usunięty."</string>
     <string name="menu_done">"Gotowe"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"Przywróć"</string>
     <string name="editContact_title_edit">"Edytuj kontakt"</string>
     <string name="editContact_title_insert">"Nowy kontakt"</string>
     <string name="menu_addItem">"Więcej informacji"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"Poczta głosowa"</string>
     <string name="unknown">"Nieznane"</string>
     <string name="private_num">"Numer prywatny"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Wybierz numer za pomocą klawiatury"</string>
     <string name="dialerDialpadHintText">"Wybierz numer, aby dodać połączenie"</string>
     <string name="simContacts_emptyLoading">"Wczytywanie z karty SIM…"</string>
     <string name="simContacts_title">"Kontakty z karty SIM"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Zsynchronizuj kontakty Google!"</font>" "\n"Po zsynchronizowaniu telefonu zawsze będziesz mieć kontakty pod ręką."</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"Nie masz żadnych kontaktów."\n\n"Aby dodać kontakty, wybierz "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i wybierz polecenie:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>" w celu utworzenia nowego kontaktu od początku"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importuj kontakty"</b></font>" w celu dodania kontaktów z karty SIM"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"Nie masz żadnych kontaktów."\n\n"Aby dodać kontakty, naciśnij "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i wybierz polecenie:"\n\n"        "<li><font fgcolor="#ffffffff"><b>"Synchronizacja grup"</b></font>" w celu dodania kontaktów z nowego lub istniejącego konta Google"\n</li>\n"        "<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>" w celu utworzenia nowego kontaktu od początku"\n</li>\n"        "<li><font fgcolor="#ffffffff"><b>"Importuj kontakty"</b></font>" w celu dodania kontaktów z karty SIM"\n</li></string>
     <string name="seclectSyncGroups_title">"Wybierz grupy do zsynchronizowania"</string>
     <string name="liveFolder_all_label">"Wszystkie kontakty"</string>
     <string name="liveFolder_favorites_label">"Oznaczone gwiazdką"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"Zostaną wysłane bezpośrednio na pocztę głosową"</string>
     <string name="detailsRingtone">"Ustaw na <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Oddzwoń"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"Zadzwoń ponownie"</string>
+    <string name="returnCall">"Połączenie zwrotne"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <string name="favoritesFrquentSeparator">"Częste połączenia"</string>
+    <string name="add_contact_dlg_title">"Dodaj kontakt"</string>
+    <string name="add_contact_dlg_message_fmt">"Czy dodać adres „<xliff:g id="EMAIL">%s</xliff:g>” do kontaktów?"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 398c898..d63b72c 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"Контакты"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"Дозвон"</string>
     <string name="shortcutContact">"Контакт"</string>
     <string name="starredList">"Помеченные"</string>
     <string name="frequentList">"Частые"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"Изменить контакт"</string>
     <string name="insertContactDescription">"Создать контакт"</string>
     <string name="searchHint">"Искать контакты"</string>
+    <string name="menu_search">"Поиск"</string>
     <string name="menu_newContact">"Создать контакт"</string>
     <string name="menu_viewContact">"Просмотреть контакт"</string>
     <string name="menu_callNumber">"Позвонить: <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"Удаление"</string>
     <string name="deleteConfirmation">"Этот контакт будет удален."</string>
     <string name="menu_done">"Готово"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"Отменить"</string>
     <string name="editContact_title_edit">"Изменить контакт"</string>
     <string name="editContact_title_insert">"Создание контакта"</string>
     <string name="menu_addItem">"Подробнее"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"Голосовая почта"</string>
     <string name="unknown">"Неизвестно"</string>
     <string name="private_num">"Частный номер"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"Для набора воспользуйтесь клавиатурой"</string>
     <string name="dialerDialpadHintText">"Наберите номер, чтобы добавить вызов"</string>
     <string name="simContacts_emptyLoading">"Идет загрузка с SIM-карты…"</string>
     <string name="simContacts_title">"Контакты на SIM-карте"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Синхронизируйте свои контакты Google!"</font>" "\n"После синхронизации с телефоном вы сможете общаться со знакомыми, где бы вы ни были."</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"Контакты отсутствуют."\n\n" Нажмите кнопку "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n\n<li><font fgcolor="#ffffffff"><b>"Создать контакт"</b></font>" – добавление нового контакта из рабочей области;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импорт контактов"</b></font>" – добавление контактов с SIM-карты."\n</li></string>
+    <string name="noContactsHelpTextWithSync">"Контакты отсутствуют."\n\n"Чтобы добавить контакты, нажмите кнопку "<font fgcolor="#ffffffff"><b>"Меню"</b></font>" и выберите:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Редактировать группы синхронизации"</b></font>" – добавление контакта из нового или существующего аккаунта Google;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Создать контакт"</b></font>" – создание абсолютно нового контакта;"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Импортировать контакты"</b></font>" – добавление контактов, содержащихся на SIM-карте."\n</li></string>
     <string name="seclectSyncGroups_title">"Выбор групп для синхронизации"</string>
     <string name="liveFolder_all_label">"Все контакты"</string>
     <string name="liveFolder_favorites_label">"Помеченные"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"Переадресация в голосовую почту"</string>
     <string name="detailsRingtone">"Выбрано: <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"Перезвонить"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"Позвонить снова"</string>
+    <string name="returnCall">"Перезвонить"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> с."</string>
+    <string name="favoritesFrquentSeparator">"Часто набираемые"</string>
+    <string name="add_contact_dlg_title">"Добавление контакта"</string>
+    <string name="add_contact_dlg_message_fmt">"Добавить адрес <xliff:g id="EMAIL">%s</xliff:g> в·контакты?"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 6ef964e..6a18e65 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"联系人"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"拨号"</string>
     <string name="shortcutContact">"联系人"</string>
     <string name="starredList">"已加星标"</string>
     <string name="frequentList">"经常"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"编辑联系人"</string>
     <string name="insertContactDescription">"创建联系人"</string>
     <string name="searchHint">"搜索联系人"</string>
+    <string name="menu_search">"搜索"</string>
     <string name="menu_newContact">"添加联系人"</string>
     <string name="menu_viewContact">"查看联系人"</string>
     <string name="menu_callNumber">"呼叫<xliff:g id="NAME">%s</xliff:g>"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"删除"</string>
     <string name="deleteConfirmation">"会删除此联系人。"</string>
     <string name="menu_done">"完成"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"还原"</string>
     <string name="editContact_title_edit">"编辑联系人"</string>
     <string name="editContact_title_insert">"添加联系人"</string>
     <string name="menu_addItem">"详细信息"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"语音邮件"</string>
     <string name="unknown">"未知"</string>
     <string name="private_num">"私人号码"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"使用键盘拔号"</string>
     <string name="dialerDialpadHintText">"通过拨号添加通话"</string>
     <string name="simContacts_emptyLoading">"正在从 SIM 卡中载入..."</string>
     <string name="simContacts_title">"SIM 卡联系人"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"同步您的 Google 联系人!"</font>\n"将联系人同步到您的手机后,无论您走到哪里,都可以与他们联系。"</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"您还没有联系人。"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后选择:"\n\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>" - 从头开始创建新联系人"\n</li>\n<li><font fgcolor="#ffffffff"><b>"导入联系人"</b></font>" - 从 SIM 卡添加联系人"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"您还没有联系人。"\n\n"要添加联系人,请按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>",然后选择:"\n\n<li><font fgcolor="#ffffffff"><b>"修改同步组"</b></font>" - 从现有的或新的 Google 帐户添加联系人"\n</li>\n<li><font fgcolor="#ffffffff"><b>"新建联系人"</b></font>" - 从头开始创建新联系人"\n</li>\n<li><font fgcolor="#ffffffff"><b>"导入联系人"</b></font>" - 从 SIM 卡添加联系人"\n</li></string>
     <string name="seclectSyncGroups_title">"选择要同步的组"</string>
     <string name="liveFolder_all_label">"所有联系人"</string>
     <string name="liveFolder_favorites_label">"已加星标"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"将直接发送至语音邮件"</string>
     <string name="detailsRingtone">"设置为“<xliff:g id="RINGTONE_NAME">%s</xliff:g>”"</string>
     <string name="callBack">"回拨"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"再次呼叫"</string>
+    <string name="returnCall">"回电话"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> 分钟 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <string name="favoritesFrquentSeparator">"经常呼叫的联系人"</string>
+    <string name="add_contact_dlg_title">"添加联系人"</string>
+    <string name="add_contact_dlg_message_fmt">"是否将“<xliff:g id="EMAIL">%s</xliff:g>”添加到通讯录中?"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 91704fb..17689c7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -16,8 +16,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"連絡人"</string>
-    <!-- no translation found for launcherDialer (140610573639849799) -->
-    <skip />
+    <string name="launcherDialer">"撥號"</string>
     <string name="shortcutContact">"連絡人"</string>
     <string name="starredList">"已標記星號"</string>
     <string name="frequentList">"經常聯絡"</string>
@@ -27,6 +26,7 @@
     <string name="editContactDescription">"編輯連絡人"</string>
     <string name="insertContactDescription">"建立連絡人"</string>
     <string name="searchHint">"搜尋連絡人"</string>
+    <string name="menu_search">"搜尋"</string>
     <string name="menu_newContact">"新增連絡人"</string>
     <string name="menu_viewContact">"檢視連絡人"</string>
     <string name="menu_callNumber">"撥打電話給 <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -43,8 +43,7 @@
     <string name="deleteConfirmation_title">"刪除"</string>
     <string name="deleteConfirmation">"此連絡人會被刪除。"</string>
     <string name="menu_done">"完成"</string>
-    <!-- no translation found for menu_doNotSave (2174577548513895144) -->
-    <skip />
+    <string name="menu_doNotSave">"復原"</string>
     <string name="editContact_title_edit">"編輯連絡人"</string>
     <string name="editContact_title_insert">"新增連絡人"</string>
     <string name="menu_addItem">"更多資訊"</string>
@@ -126,15 +125,15 @@
     <string name="voicemail">"語音信箱"</string>
     <string name="unknown">"未知的"</string>
     <string name="private_num">"私人號碼"</string>
+    <!-- no translation found for payphone (4864313342828942922) -->
+    <skip />
     <string name="dialerKeyboardHintText">"使用鍵盤撥號"</string>
     <string name="dialerDialpadHintText">"撥號即可新增通話"</string>
     <string name="simContacts_emptyLoading">"從  SIM 卡讀取中…"</string>
     <string name="simContacts_title">"SIM 卡連絡人"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">" 同步處理您的 Google 連絡人!"</font>" "\n" 與手機同步處理後,無論您走到哪,都可存取連絡人資訊。"</string>
-    <!-- no translation found for noContactsHelpText (2249195687463896364) -->
-    <skip />
-    <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
-    <skip />
+    <string name="noContactsHelpText">"您沒有聯絡人。"\n\n"如要新增聯絡人,請按 ["<font fgcolor="#ffffffff"><b></b>"選單"</font>"] 並選取下列選項:"\n\n<li>"["<font fgcolor="#ffffffff"><b></b>"新聯絡人"</font>"]:建立新聯絡人"\n</li>" "\n<li>"["<font fgcolor="#ffffffff"><b></b>"匯入聯絡人"</font>"]:加入 SIM 卡中的聯絡人"\n</li></string>
+    <string name="noContactsHelpTextWithSync">"您沒有聯絡人。"\n\n"如要新增聯絡人,請按 ["<font fgcolor="#ffffffff"><b></b>"選單"</font>"] 鍵並選取下列選項:"\n\n"        "<li>"["<font fgcolor="#ffffffff"><b></b>"編輯同步群組"</font>"]:加入新的或既有的 Google 帳戶聯絡人"\n</li>\n"        "<li>"["<font fgcolor="#ffffffff"><b></b>"新聯絡人"</font>"]:建立新聯絡人"\n</li>\n"        "<li>"["<font fgcolor="#ffffffff"><b></b>"匯入聯絡人"</font>"]:加入 SIM 卡中的聯絡人"\n</li></string>
     <string name="seclectSyncGroups_title">"選取要同步處理的群組"</string>
     <string name="liveFolder_all_label">"全部聯絡人"</string>
     <string name="liveFolder_favorites_label">"星號標記"</string>
@@ -163,10 +162,10 @@
     <string name="detailIncomingCallsGoToVoicemail">"來電將直接轉到語音信箱"</string>
     <string name="detailsRingtone">"設為<xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
     <string name="callBack">"回播電話"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
-    <!-- no translation found for returnCall (8171961914203617813) -->
-    <skip />
-    <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
-    <skip />
+    <string name="callAgain">"重撥"</string>
+    <string name="returnCall">"回電"</string>
+    <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <string name="favoritesFrquentSeparator">"常用聯絡人"</string>
+    <string name="add_contact_dlg_title">"新增聯絡人"</string>
+    <string name="add_contact_dlg_message_fmt">"要將「<xliff:g id="EMAIL">%s</xliff:g>」新增為聯絡人嗎?"</string>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8eb1976..747cd7d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -256,6 +256,9 @@
     <!-- The group type that displays only contacts with phone numbers -->
     <string name="groupNameWithPhones">Contacts with phone numbers</string>
     
+    <!-- The group type that displays "Starred in Android" contacts -->
+    <string name="starredInAndroid">Starred in Android</string>
+    
     <!-- Toast displayed when a contact is created -->
     <string name="contactCreatedToast">Contact created.</string>
     
@@ -348,6 +351,9 @@
 
     <!-- String used to display calls from private numbers in the call log -->
     <string name="private_num">Private number</string>
+    
+    <!-- String used to display calls from pay phone in the call log -->
+    <string name="payphone">Pay phone</string>
 
     <!-- Displayed in the text entry box in the dialer when in landscape mode to guide the user
          to dial using the physical keyboard -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e43842c..c202eda 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -31,4 +31,8 @@
         <item name="android:src">@drawable/ic_btn_round_more</item>
     </style>
 
+    <style name="TallTitleBarTheme" parent="android:Theme.NoTitleBar">
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+
 </resources>
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index 012a33e..d7d888c 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.contacts;
 
+import com.android.internal.telephony.CallerInfo;
+
 import android.app.ListActivity;
 import android.content.ContentResolver;
 import android.content.ContentUris;
@@ -166,79 +168,89 @@
                 String callText = null;
                 switch (callType) {
                     case Calls.INCOMING_TYPE:
-                        mCallTypeIcon.setImageResource(android.R.drawable.sym_call_incoming);
+                        mCallTypeIcon.setImageResource(R.drawable.ic_call_log_header_incoming_call);
                         mCallType.setText(R.string.type_incoming);
                         callText = getString(R.string.callBack);
                         break;
     
                     case Calls.OUTGOING_TYPE:
-                        mCallTypeIcon.setImageResource(android.R.drawable.sym_call_outgoing);
+                        mCallTypeIcon.setImageResource(R.drawable.ic_call_log_header_outgoing_call);
                         mCallType.setText(R.string.type_outgoing);
                         callText = getString(R.string.callAgain);
                         break;
     
                     case Calls.MISSED_TYPE:
-                        mCallTypeIcon.setImageResource(android.R.drawable.sym_call_missed);
+                        mCallTypeIcon.setImageResource(R.drawable.ic_call_log_header_missed_call);
                         mCallType.setText(R.string.type_missed);
                         callText = getString(R.string.returnCall);
                         break;
                 }
     
-                // Perform a reverse-phonebook lookup to find the PERSON_ID
-                String callLabel = null;
-                Uri personUri = null;
-                Uri phoneUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(mNumber));
-                Cursor phonesCursor = resolver.query(phoneUri, PHONES_PROJECTION, null, null, null);
-                try {
-                    if (phonesCursor != null && phonesCursor.moveToFirst()) {
-                        long personId = phonesCursor.getLong(COLUMN_INDEX_ID);
-                        personUri = ContentUris.withAppendedId(
-                                Contacts.People.CONTENT_URI, personId);
-                        callText = getString(R.string.recentCalls_callNumber,
-                                phonesCursor.getString(COLUMN_INDEX_NAME));
-                        mNumber = phonesCursor.getString(COLUMN_INDEX_NUMBER);
-                        callLabel = Phones.getDisplayLabel(this,
-                                phonesCursor.getInt(COLUMN_INDEX_TYPE),
-                                phonesCursor.getString(COLUMN_INDEX_LABEL)).toString();
-                    } else {
-                        mNumber = PhoneNumberUtils.formatNumber(mNumber);
+                if (mNumber.equals(CallerInfo.UNKNOWN_NUMBER) ||
+                        mNumber.equals(CallerInfo.PRIVATE_NUMBER)) {
+                    // List is empty, let the empty view show instead.
+                    TextView emptyText = (TextView) findViewById(R.id.emptyText);
+                    if (emptyText != null) {
+                        emptyText.setText(mNumber.equals(CallerInfo.PRIVATE_NUMBER) 
+                                ? R.string.private_num : R.string.unknown);
                     }
-                } finally {
-                    if (phonesCursor != null) phonesCursor.close();
-                }
-
-                // Build list of various available actions
-                List<ViewEntry> actions = new ArrayList<ViewEntry>();
-                
-                Intent callIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
-                        Uri.fromParts("tel", mNumber, null));
-                ViewEntry entry = new ViewEntry(android.R.drawable.sym_action_call, callText,
-                        callIntent);
-                entry.number = mNumber;
-                entry.label = callLabel;
-                actions.add(entry);
-                
-                Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
-                        Uri.fromParts("sms", mNumber, null));
-                actions.add(new ViewEntry(R.drawable.sym_action_sms,
-                        getString(R.string.menu_sendTextMessage), smsIntent));
-                
-                // Let user view contact details if they exist, otherwise add option
-                // to create new contact from this number.
-                if (personUri != null) {
-                    Intent viewIntent = new Intent(Intent.ACTION_VIEW, personUri);
-                    actions.add(new ViewEntry(R.drawable.sym_action_view_contact,
-                            getString(R.string.menu_viewContact), viewIntent));
                 } else {
-                    Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
-                    createIntent.setType(People.CONTENT_ITEM_TYPE);
-                    createIntent.putExtra(Insert.PHONE, mNumber);
-                    actions.add(new ViewEntry(R.drawable.sym_action_add,
-                            getString(R.string.recentCalls_addToContact), createIntent));
+                    // Perform a reverse-phonebook lookup to find the PERSON_ID
+                    String callLabel = null;
+                    Uri personUri = null;
+                    Uri phoneUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(mNumber));
+                    Cursor phonesCursor = resolver.query(phoneUri, PHONES_PROJECTION, null, null, null);
+                    try {
+                        if (phonesCursor != null && phonesCursor.moveToFirst()) {
+                            long personId = phonesCursor.getLong(COLUMN_INDEX_ID);
+                            personUri = ContentUris.withAppendedId(
+                                    Contacts.People.CONTENT_URI, personId);
+                            callText = getString(R.string.recentCalls_callNumber,
+                                    phonesCursor.getString(COLUMN_INDEX_NAME));
+                            mNumber = phonesCursor.getString(COLUMN_INDEX_NUMBER);
+                            callLabel = Phones.getDisplayLabel(this,
+                                    phonesCursor.getInt(COLUMN_INDEX_TYPE),
+                                    phonesCursor.getString(COLUMN_INDEX_LABEL)).toString();
+                        } else {
+                            mNumber = PhoneNumberUtils.formatNumber(mNumber);
+                        }
+                    } finally {
+                        if (phonesCursor != null) phonesCursor.close();
+                    }
+    
+                    // Build list of various available actions
+                    List<ViewEntry> actions = new ArrayList<ViewEntry>();
+                    
+                    Intent callIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
+                            Uri.fromParts("tel", mNumber, null));
+                    ViewEntry entry = new ViewEntry(android.R.drawable.sym_action_call, callText,
+                            callIntent);
+                    entry.number = mNumber;
+                    entry.label = callLabel;
+                    actions.add(entry);
+                    
+                    Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
+                            Uri.fromParts("sms", mNumber, null));
+                    actions.add(new ViewEntry(R.drawable.sym_action_sms,
+                            getString(R.string.menu_sendTextMessage), smsIntent));
+                    
+                    // Let user view contact details if they exist, otherwise add option
+                    // to create new contact from this number.
+                    if (personUri != null) {
+                        Intent viewIntent = new Intent(Intent.ACTION_VIEW, personUri);
+                        actions.add(new ViewEntry(R.drawable.sym_action_view_contact,
+                                getString(R.string.menu_viewContact), viewIntent));
+                    } else {
+                        Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+                        createIntent.setType(People.CONTENT_ITEM_TYPE);
+                        createIntent.putExtra(Insert.PHONE, mNumber);
+                        actions.add(new ViewEntry(R.drawable.sym_action_add,
+                                getString(R.string.recentCalls_addToContact), createIntent));
+                    }
+                    
+                    ViewAdapter adapter = new ViewAdapter(this, actions);
+                    setListAdapter(adapter);
                 }
-                
-                ViewAdapter adapter = new ViewAdapter(this, actions);
-                setListAdapter(adapter);
             } else {
                 // Something went wrong reading in our primary data, so we're going to
                 // bail out and show error to users.
diff --git a/src/com/android/contacts/ContactsGroupSyncSelector.java b/src/com/android/contacts/ContactsGroupSyncSelector.java
index 80b5166..e1fbdf1 100644
--- a/src/com/android/contacts/ContactsGroupSyncSelector.java
+++ b/src/com/android/contacts/ContactsGroupSyncSelector.java
@@ -36,6 +36,8 @@
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 
+import java.util.ArrayList;
+
 public final class ContactsGroupSyncSelector extends ListActivity implements View.OnClickListener {
 
     private static final String[] PROJECTION = new String[] {
@@ -51,12 +53,12 @@
 
     private static final int SUBACTIVITY_GET_ACCOUNT = 1;
 
-    boolean[] mChecked;
+    ArrayList<Boolean> mChecked;
+    ArrayList<Long> mGroupIds;
     boolean mSyncAllGroups;
-    long[] mGroupIds;
     
     private final class GroupsAdapter extends ArrayAdapter<CharSequence> {
-        public GroupsAdapter(CharSequence[] items) {
+        public GroupsAdapter(ArrayList<CharSequence> items) {
             super(ContactsGroupSyncSelector.this,
                     android.R.layout.simple_list_item_checked,
                     android.R.id.text1, items);
@@ -94,7 +96,7 @@
     @Override
     protected void onListItemClick(ListView list, View view, int position, long id) {
         boolean isChecked = list.isItemChecked(position);
-        mChecked[position] = isChecked;
+        mChecked.set(position, isChecked);
         if (position == 0) {
             mSyncAllGroups = isChecked;
             adjustChecks();
@@ -127,11 +129,12 @@
                     Settings.setSetting(resolver, null, Settings.SYNC_EVERYTHING, "1");
                 } else {
                     ContentValues values = new ContentValues();
-                    int count = mChecked.length;
+                    int count = mChecked.size();
                     for (int i = 1; i < count; i++) {
                         values.clear();
-                        values.put(Groups.SHOULD_SYNC, mChecked[i]);
-                        resolver.update(ContentUris.withAppendedId(Groups.CONTENT_URI, mGroupIds[i]),
+                        values.put(Groups.SHOULD_SYNC, mChecked.get(i));
+                        resolver.update(
+                                ContentUris.withAppendedId(Groups.CONTENT_URI, mGroupIds.get(i)),
                                 values, null, null);
                     }
                     // For now we only support a single account and the UI doesn't know what
@@ -189,33 +192,39 @@
         Cursor cursor = resolver.query(Groups.CONTENT_URI, PROJECTION, null, null, Groups.NAME);
         if (cursor != null) {
             try {
-                int count = cursor.getCount() + 1;
-                CharSequence[] items = new String[count];
-                boolean[] checked = new boolean[count];
-                long[] groupIds = new long[count];
-    
-                int i = 0;
-                items[i++] = getString(R.string.syncAllGroups);
-                items[i++] = getString(R.string.groupNameMyContacts);
-    
+                int count = cursor.getCount() + 1; // add 1 for "sync all"
+                ArrayList<CharSequence> items = new ArrayList<CharSequence>(count);
+                ArrayList<Boolean> checked = new ArrayList<Boolean>(count);
+                ArrayList<Long> groupIds = new ArrayList<Long>(count);
+
+                // The first item in the list is always "sync all"
+                items.add(getString(R.string.syncAllGroups));
+                checked.add(mSyncAllGroups);
+                groupIds.add(Long.valueOf(0)); // dummy entry
+
                 while (cursor.moveToNext()) {
                     String name = cursor.getString(COLUMN_INDEX_NAME);
                     String systemId = cursor.isNull(COLUMN_INDEX_SYSTEM_ID) ?
                             null : cursor.getString(COLUMN_INDEX_SYSTEM_ID);
                     if (systemId == null || !Groups.GROUP_MY_CONTACTS.equals(systemId)) {
-                        items[i] = name;
-                        checked[i] = cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0;
-                        groupIds[i] = cursor.getLong(COLUMN_INDEX_ID);
-                        i++;
+                        // Localize the "Starred in Android" string which we get from the server
+                        // side.
+                        if (Groups.GROUP_ANDROID_STARRED.equals(name)) {
+                            name = getString(R.string.starredInAndroid);
+                        }
+                        items.add(name);
+                        checked.add(cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0);
+                        groupIds.add(cursor.getLong(COLUMN_INDEX_ID));
                     } else {
-                        checked[1] = cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0;
-                        groupIds[1] = cursor.getLong(COLUMN_INDEX_ID);
+                        // If My Contacts is around it wants to be the second list entry
+                        items.add(1, getString(R.string.groupNameMyContacts));
+                        checked.add(1, cursor.getInt(COLUMN_INDEX_SHOULD_SYNC) != 0);
+                        groupIds.add(1, cursor.getLong(COLUMN_INDEX_ID));
                     }
                 }
                 mChecked = checked;
-                mSyncAllGroups = getShouldSyncEverything(resolver);
-                checked[0] = mSyncAllGroups;
                 mGroupIds = groupIds;
+                mSyncAllGroups = getShouldSyncEverything(resolver);
     
                 // Setup the adapter
                 setListAdapter(new GroupsAdapter(items));
@@ -233,10 +242,10 @@
                 list.setItemChecked(i, true);
             }
         } else {
-            boolean[] checked = mChecked;
+            ArrayList<Boolean> checked = mChecked;
             int count = list.getCount();
             for (int i = 0; i < count; i++) {
-                list.setItemChecked(i, checked[i]);
+                list.setItemChecked(i, checked.get(i));
             }
         }
     }
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index b9dc4f2..7dbc76c 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.contacts;
 
+import static com.android.contacts.ShowOrCreateActivity.QUERY_KIND_EMAIL_OR_IM;
+
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.ListActivity;
@@ -32,6 +34,7 @@
 import android.content.SharedPreferences;
 import android.database.CharArrayBuffer;
 import android.database.Cursor;
+import android.database.CursorWrapper;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
@@ -41,12 +44,12 @@
 import android.preference.PreferenceManager;
 import android.provider.Contacts;
 import android.provider.Contacts.ContactMethods;
-import android.provider.Contacts.ContactMethodsColumns;
 import android.provider.Contacts.Groups;
 import android.provider.Contacts.Intents;
 import android.provider.Contacts.People;
 import android.provider.Contacts.Phones;
 import android.provider.Contacts.Presence;
+import android.provider.Contacts.Intents.Insert;
 import android.provider.Contacts.Intents.UI;
 import android.text.TextUtils;
 import android.util.Log;
@@ -139,8 +142,8 @@
             55 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE | MODE_MASK_NO_FILTER;
     /** Run a search query */
     static final int MODE_QUERY = 60 | MODE_MASK_NO_FILTER;
-    /** Show all contacts matching query, or handle special cases where 0 or 1 contacts found. */
-    static final int MODE_SHOW_OR_CREATE_CONTACT = 65 | MODE_MASK_PICKER | MODE_MASK_NO_FILTER;
+    /** Run a search query in PICK mode, but that still launches to VIEW */
+    static final int MODE_QUERY_PICK_TO_VIEW = 65 | MODE_MASK_NO_FILTER | MODE_MASK_PICKER;
 
     static final int DEFAULT_MODE = MODE_ALL_CONTACTS;
 
@@ -184,6 +187,11 @@
         People.PRESENCE_STATUS, // 8
         SORT_STRING, // 9
     };
+    
+    static final String[] SIMPLE_CONTACTS_PROJECTION = new String[] {
+        People._ID, // 0
+        NAME_COLUMN, // 1
+    };
 
     static final String[] STREQUENT_PROJECTION = new String[] {
         People._ID, // 0
@@ -233,7 +241,7 @@
     static final int SORT_STRING_INDEX = 9;
 
     static final int PHONES_PERSON_ID_INDEX = 6;
-    static final int CONTACT_METHODS_PERSON_ID_INDEX = 6;
+    static final int SIMPLE_CONTACTS_PERSON_ID_INDEX = 0;
     
     static final int DISPLAY_GROUP_INDEX_ALL_CONTACTS = 0;
     static final int DISPLAY_GROUP_INDEX_ALL_CONTACTS_WITH_PHONES = 1;
@@ -270,27 +278,13 @@
     private Uri mGroupUri;
     private boolean mJustCreated;
     private boolean mSyncEnabled;
-    
-    /**
-     * {@link Bundle} of extras to include when launching
-     * {@link Intents.Insert#ACTION}, usually when responding to
-     * {@link Intents#SHOW_OR_CREATE_CONTACT}.
-     */
-    private Bundle mCreateExtras;
-    
-    /**
-     * Title to display to user when asking if a contact should be created,
-     * usually the requested E-mail address or phone number when responding to a
-     * {@link Intents#SHOW_OR_CREATE_CONTACT}.
-     */
-    private String mCreateData;
 
     /**
      * Cursor row index that holds reference back to {@link People#_ID}, such as
      * {@link ContactMethods#PERSON_ID}. Used when responding to a
-     * {@link Intents#SHOW_OR_CREATE_CONTACT}.
+     * {@link Intent#ACTION_SEARCH} in mode {@link #MODE_QUERY_PICK_TO_VIEW}.
      */
-    private int mCreatePersonIndex;
+    private int mQueryPersonIdIndex;
 
     /**
      * Used to keep track of the scroll state of the list.
@@ -300,7 +294,22 @@
 
     private boolean mCreateShortcut;
     private boolean mDefaultMode = false;
+    
+    /**
+     * Internal query type when in mode {@link #MODE_QUERY_PICK_TO_VIEW}.
+     */
+    private int mQueryMode = QUERY_MODE_NONE;
 
+    private static final int QUERY_MODE_NONE = -1;
+    private static final int QUERY_MODE_MAILTO = 1;
+    private static final int QUERY_MODE_TEL = 2;
+    
+    /**
+     * Data to use when in mode {@link #MODE_QUERY_PICK_TO_VIEW}. Usually
+     * provided by scheme-specific part of incoming {@link Intent#getData()}.
+     */
+    private String mQueryData;
+    
     private class DeleteClickListener implements DialogInterface.OnClickListener {
         private Uri mUri;
 
@@ -313,23 +322,6 @@
         }
     }
     
-    private class IntentClickListener implements DialogInterface.OnClickListener {
-        private Activity mParent;
-        private Intent mIntent;
-
-        public IntentClickListener(Activity parent, Intent intent) {
-            mParent = parent;
-            mIntent = intent;
-        }
-
-        public void onClick(DialogInterface dialog, int which) {
-            if (mIntent != null) {
-                mParent.startActivity(mIntent);
-            }
-            mParent.finish();
-        }
-    }
-
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -407,8 +399,20 @@
                 finish();
                 return;
             }
-            // Otherwise handle the more normal search case
-            mMode = MODE_QUERY;
+            
+            // See if search request has extras to specify query
+            if (intent.hasExtra(Insert.EMAIL)) {
+                mMode = MODE_QUERY_PICK_TO_VIEW;
+                mQueryMode = QUERY_MODE_MAILTO;
+                mQueryData = intent.getStringExtra(Insert.EMAIL);
+            } else if (intent.hasExtra(Insert.PHONE)) {
+                mMode = MODE_QUERY_PICK_TO_VIEW;
+                mQueryMode = QUERY_MODE_TEL;
+                mQueryData = intent.getStringExtra(Insert.PHONE);
+            } else {
+                // Otherwise handle the more normal search case
+                mMode = MODE_QUERY;
+            }
 
         // Since this is the filter activity it receives all intents
         // dispatched from the SearchManager for security reasons
@@ -436,8 +440,6 @@
             startActivity(newIntent);
             finish();
             return;
-        } else if (Intents.SHOW_OR_CREATE_CONTACT.equals(action)) {
-            mMode = MODE_SHOW_OR_CREATE_CONTACT;
         }
 
         if (mMode == MODE_UNKNOWN) {
@@ -492,60 +494,6 @@
         }
     }
 
-    /**
-     * Handles special cases of the {@link Intents#SHOW_OR_CREATE_CONTACT}
-     * intent. When zero results found, prompt user to create new contact. When
-     * one contact found, shortcut to viewing that contact.
-     * 
-     * @param c Valid cursor after performing query
-     */
-    private void handleShowOrCreate(final Cursor c) {
-        int count = 0;
-        long personId = 0;
-        if (c != null) {
-            count = c.getCount();
-            if (count == 1 && c.moveToFirst()) {
-                // Try reading ID for the only contact returned
-                personId = c.getLong(mCreatePersonIndex);
-            }
-        }
-        
-        if (count == 1) {
-            // If we only found one item, jump right to viewing it
-            Intent showIntent = new Intent(Intent.ACTION_VIEW,
-                    ContentUris.withAppendedId(People.CONTENT_URI, personId));
-            startActivity(showIntent);
-            finish();
-            
-        } else if (count == 0) {
-            // Insert create values coming from our request
-            Intent createIntent = new Intent(Intent.ACTION_INSERT, People.CONTENT_URI);
-            createIntent.putExtras(mCreateExtras);
-            
-            // Prompt user if they really want to start creating a new
-            // contact. Skip this step if the caller requested {@link
-            // Contacts#EXTRA_FORCE_CREATE}.
-            boolean forceCreate = getIntent().getBooleanExtra(Intents.EXTRA_FORCE_CREATE, false);
-            
-            if (forceCreate) {
-                startActivity(createIntent);
-                finish();
-            } else {
-                CharSequence message = getResources().getString(
-                        R.string.add_contact_dlg_message_fmt, mCreateData);
-                
-                new AlertDialog.Builder(this)
-                        .setTitle(R.string.add_contact_dlg_title)
-                        .setMessage(message)
-                        .setPositiveButton(android.R.string.ok,
-                                new IntentClickListener(this, createIntent))
-                        .setNegativeButton(android.R.string.cancel,
-                                new IntentClickListener(this, null))
-                        .show();
-            }
-        }
-    }
-
     private void setEmptyText() {
         TextView empty = (TextView) findViewById(R.id.emptyText);
         // Center the text by default
@@ -713,7 +661,14 @@
         super.onRestart();
 
         // The cursor was killed off in onStop(), so we need to get a new one here
-        startQuery();
+        // We do not perform the query if a filter is set on the list because the
+        // filter will cause the query to happen anyway
+        if (TextUtils.isEmpty(getListView().getTextFilter())) {
+            startQuery();
+        } else {
+            // Run the filtered query on the adapter
+            ((ContactItemListAdapter) getListAdapter()).onContentChanged();
+        }
     }
     
     private void updateGroup() {
@@ -1046,10 +1001,10 @@
                 Intent intent = new Intent(Intent.ACTION_VIEW,
                         ContentUris.withAppendedId(People.CONTENT_URI, id));
                 startActivity(intent);
-            } else if (mMode == MODE_SHOW_OR_CREATE_CONTACT) {
-                // Figure out person ID because we might be using indirect cursor
+            } else if (mMode == MODE_QUERY_PICK_TO_VIEW) {
+                // Started with query that should launch to view contact
                 Cursor c = (Cursor) mAdapter.getItem(position);
-                long personId = c.getLong(mCreatePersonIndex);
+                long personId = c.getLong(mQueryPersonIdIndex);
                 Intent intent = new Intent(Intent.ACTION_VIEW,
                         ContentUris.withAppendedId(People.CONTENT_URI, personId));
                 startActivity(intent);
@@ -1097,7 +1052,7 @@
             } else {
                 intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                         Intent.ShortcutIconResource.fromContext(this,
-                                R.drawable.ic_launcher_contacts));
+                                R.drawable.ic_launcher_shortcut_contact));
             }
             setResult(RESULT_OK, intent);
         } else {
@@ -1184,52 +1139,27 @@
                 break;
             }
             
-            case MODE_SHOW_OR_CREATE_CONTACT: {
-                // Caller requested a specific E-mail address or phone number,
-                // so show only matching entries. Once the query finishes we
-                // handle edge cases of 0 or 1 items.
-                Uri data = getIntent().getData();
-                String scheme = null;
-                String ssp = null;
-                if (data != null) {
-                    scheme = data.getScheme();
-                    ssp = data.getSchemeSpecificPart();
-                    mCreateData = ssp;
-                }
-                
-                mCreateExtras = new Bundle();
-                Bundle originalExtras = getIntent().getExtras();
-                if (originalExtras != null) {
-                    mCreateExtras.putAll(originalExtras);
-                }
-
-                if ("mailto".equals(scheme)) {
-                    mCreateExtras.putString(Intents.Insert.EMAIL, ssp);
-                    mCreatePersonIndex = CONTACT_METHODS_PERSON_ID_INDEX;
-                    
+            case MODE_QUERY_PICK_TO_VIEW: {
+                if (mQueryMode == QUERY_MODE_MAILTO) {
+                    // Find all contacts with the given search string as either
+                    // an E-mail or IM address.
+                    mQueryPersonIdIndex = SIMPLE_CONTACTS_PERSON_ID_INDEX;
+                    Uri uri = Uri.withAppendedPath(People.WITH_EMAIL_OR_IM_FILTER_URI,
+                            Uri.encode(mQueryData));
                     mQueryHandler.startQuery(QUERY_TOKEN, null,
-                            ContactMethods.CONTENT_URI, CONTACT_METHODS_PROJECTION,
-                            ContactMethodsColumns.KIND + "=" + Contacts.KIND_EMAIL + " AND " +
-                            ContactMethods.DATA + "=?", new String[] { ssp },
-                            getSortOrder(CONTACT_METHODS_PROJECTION));
+                            uri, SIMPLE_CONTACTS_PROJECTION, null, null,
+                            getSortOrder(CONTACTS_PROJECTION));
                     
-                } else if ("tel".equals(scheme)) {
-                    mCreateExtras.putString(Intents.Insert.PHONE, ssp);
-                    mCreatePersonIndex = PHONES_PERSON_ID_INDEX;
-                    
+                } else if (mQueryMode == QUERY_MODE_TEL) {
+                    mQueryPersonIdIndex = PHONES_PERSON_ID_INDEX;
                     mQueryHandler.startQuery(QUERY_TOKEN, null,
-                            Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, ssp),
+                            Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, mQueryData),
                             PHONES_PROJECTION, null, null,
                             getSortOrder(PHONES_PROJECTION));
-                    
-                } else {
-                    Log.w(TAG, "Invalid intent:" + getIntent());
-                    finish();
                 }
-                
                 break;
             }
-
+            
             case MODE_STARRED:
                 mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI,
                         CONTACTS_PROJECTION,
@@ -1413,7 +1343,6 @@
                     getString(R.string.groupNameWithPhones));
             prefStrings.add(GROUP_WITH_PHONES);
             
-            int i = 3;
             int currentIndex = DISPLAY_GROUP_INDEX_ALL_CONTACTS;
             while (cursor.moveToNext()) {
                 String systemId = cursor.getString(GROUPS_COLUMN_INDEX_SYSTEM_ID);
@@ -1421,11 +1350,15 @@
                 if (cursor.isNull(GROUPS_COLUMN_INDEX_SYSTEM_ID)
                         && !Groups.GROUP_MY_CONTACTS.equals(systemId)) {
                     // All groups that aren't My Contacts, since that one is localized on the phone
+
+                    // Localize the "Starred in Android" string which we get from the server side.
+                    if (Groups.GROUP_ANDROID_STARRED.equals(name)) {
+                        name = getString(R.string.starredInAndroid);
+                    }
                     groups.add(name);
                     if (name.equals(mDisplayInfo)) {
-                        currentIndex = i;
+                        currentIndex = groups.size() - 1;
                     }
-                    i++;
                 } else {
                     // The My Contacts group
                     groups.add(DISPLAY_GROUP_INDEX_MY_CONTACTS,
@@ -1443,8 +1376,7 @@
                 currentIndex = DISPLAY_GROUP_INDEX_ALL_CONTACTS_WITH_PHONES;
             }
             mDisplayGroups = groups.toArray(new CharSequence[groups.size()]);
-            builder.setSingleChoiceItems(mDisplayGroups,
-                    currentIndex, this);
+            builder.setSingleChoiceItems(mDisplayGroups, currentIndex, this);
             mDisplayGroupOriginalSelection = currentIndex;
         } finally {
             cursor.close();
@@ -1467,11 +1399,6 @@
                 activity.getListView().clearTextFilter();                
                 activity.mAdapter.changeCursor(cursor);
                 
-                // Handle SHOW_OR_CREATE now that we have valid cursor
-                if (activity.mMode == MODE_SHOW_OR_CREATE_CONTACT) {
-                    activity.handleShowOrCreate(cursor);
-                }
-    
                 // Now that the cursor is populated again, it's possible to restore the list state
                 if (activity.mListState != null) {
                     activity.mList.onRestoreInstanceState(activity.mListState);
@@ -1507,6 +1434,7 @@
         private CharSequence[] mLocalizedLabels;
         private boolean mDisplayPhotos = false;
         private SparseArray<SoftReference<Bitmap>> mBitmapCache = null;
+        private int mFrequentSeparatorPos = ListView.INVALID_POSITION;
 
         public ContactItemListAdapter(Context context) {
             super(context, R.layout.contacts_list_item, null, false);
@@ -1579,6 +1507,45 @@
         }
 
         @Override
+        public int getItemViewType(int position) {
+            if (position == mFrequentSeparatorPos) {
+                // We don't want the separator view to be recycled.
+                return IGNORE_ITEM_VIEW_TYPE;
+            }
+            return super.getItemViewType(position);
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (!mDataValid) {
+                throw new IllegalStateException(
+                        "this should only be called when the cursor is valid");
+            }
+
+            // Handle the separator specially
+            if (position == mFrequentSeparatorPos) {
+                LayoutInflater inflater =
+                        (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
+                TextView view = (TextView) inflater.inflate(R.layout.list_separator, parent, false);
+                view.setText(R.string.favoritesFrquentSeparator);
+                return view;
+            }
+
+            if (!mCursor.moveToPosition(getRealPosition(position))) {
+                throw new IllegalStateException("couldn't move cursor to position " + position);
+            }
+            
+            View v;
+            if (convertView == null) {
+                v = newView(mContext, mCursor, parent);
+            } else {
+                v = convertView;
+            }
+            bindView(v, mContext, mCursor);
+            return v;
+        }
+
+        @Override
         public View newView(Context context, Cursor cursor, ViewGroup parent) {
             final View view = super.newView(context, cursor, parent);
 
@@ -1606,6 +1573,17 @@
                 cache.nameView.setText(mUnknownNameText);
             }
             
+            // Bail out early if using a specific SEARCH query mode, usually for
+            // matching a specific E-mail or phone number. Any contact details
+            // shown would be identical, and columns might not even be present
+            // in the returned cursor.
+            if (mQueryMode != QUERY_MODE_NONE) {
+                cache.numberView.setVisibility(View.GONE);
+                cache.labelView.setVisibility(View.GONE);
+                cache.presenceView.setVisibility(View.GONE);
+                return;
+            }
+            
             // Set the phone number
             TextView numberView = cache.numberView;
             TextView labelView = cache.labelView;
@@ -1642,27 +1620,18 @@
 
             // Set the proper icon (star or presence or nothing)
             ImageView presenceView = cache.presenceView;
-            if (mMode != MODE_STREQUENT) {
-                if ((mMode & MODE_MASK_NO_PRESENCE) == 0) {
-                    int serverStatus;
-                    if (!cursor.isNull(SERVER_STATUS_COLUMN_INDEX)) {
-                        serverStatus = cursor.getInt(SERVER_STATUS_COLUMN_INDEX);
-                        presenceView.setImageResource(
-                                Presence.getPresenceIconResourceId(serverStatus));
-                        presenceView.setVisibility(View.VISIBLE);
-                    } else {
-                        presenceView.setVisibility(View.GONE);
-                    }
-                } else {
-                    presenceView.setVisibility(View.GONE);
-                }
-            } else {
-                if (cursor.getInt(STARRED_COLUMN_INDEX) != 0) {
-                    presenceView.setImageResource(R.drawable.star_on);
+            if ((mMode & MODE_MASK_NO_PRESENCE) == 0) {
+                int serverStatus;
+                if (!cursor.isNull(SERVER_STATUS_COLUMN_INDEX)) {
+                    serverStatus = cursor.getInt(SERVER_STATUS_COLUMN_INDEX);
+                    presenceView.setImageResource(
+                            Presence.getPresenceIconResourceId(serverStatus));
                     presenceView.setVisibility(View.VISIBLE);
                 } else {
                     presenceView.setVisibility(View.GONE);
                 }
+            } else {
+                presenceView.setVisibility(View.GONE);
             }
 
             // Set the photo, if requested
@@ -1695,13 +1664,29 @@
                 if (photo != null) {
                     cache.photoView.setImageBitmap(photo);
                 } else {
-                    cache.photoView.setImageResource(R.drawable.ic_contact_picture);
+                    cache.photoView.setImageResource(R.drawable.ic_contact_list_picture);
                 }
             }
         }
 
         @Override
         public void changeCursor(Cursor cursor) {
+            // Get the split between starred and frequent items, if the mode is strequent
+            mFrequentSeparatorPos = ListView.INVALID_POSITION;
+            if (cursor != null && cursor.getCount() > 0 && mMode == MODE_STREQUENT) {
+                cursor.move(-1);
+                for (int i = 0; cursor.moveToNext(); i++) {
+                    int starred = cursor.getInt(STARRED_COLUMN_INDEX);
+                    if (starred == 0) {
+                        if (i > 0) {
+                            // Only add the separator when there are starred items present
+                            mFrequentSeparatorPos = i;
+                        }
+                        break;
+                    }
+                }
+            }
+
             super.changeCursor(cursor);
 
             // Update the indexer for the fast scroll widget
@@ -1749,7 +1734,7 @@
                 return mIndexer.getSections();
            }
         }
-        
+
         public int getPositionForSection(int sectionIndex) {
             if (mMode == MODE_STREQUENT) {
                 return 0;
@@ -1766,14 +1751,55 @@
 
             return mIndexer.getPositionForSection(sectionIndex);
         }
-        
+
         public int getSectionForPosition(int position) {
             // Note: JapaneseContactListIndexer depends on the fact
             // this method always returns 0. If you change this,
             // please care it too.
             return 0;
-        }        
+        }
+
+        @Override
+        public boolean areAllItemsEnabled() {
+            return mMode != MODE_STREQUENT;
+        }
+
+        @Override
+        public boolean isEnabled(int position) {
+            return position != mFrequentSeparatorPos;
+        }
+
+        @Override
+        public int getCount() {
+            if (mFrequentSeparatorPos != ListView.INVALID_POSITION) {
+                return super.getCount() + 1;
+            } else {
+                return super.getCount();
+            }
+        }
+        
+        private int getRealPosition(int pos) {
+            if (mFrequentSeparatorPos == ListView.INVALID_POSITION) {
+                // No separator, identity map
+                return pos;
+            } else if (pos <= mFrequentSeparatorPos) {
+                // Before or at the separator, identity map
+                return pos;
+            } else {
+                // After the separator, remove 1 from the pos to get the real underlying pos
+                return pos - 1;
+            }
+            
+        }
+        
+        @Override
+        public Object getItem(int pos) {
+            return super.getItem(getRealPosition(pos));
+        }
+        
+        @Override
+        public long getItemId(int pos) {
+            return super.getItemId(getRealPosition(pos)); 
+        }
     }
 }
-
-
diff --git a/src/com/android/contacts/ContactsLiveFolders.java b/src/com/android/contacts/ContactsLiveFolders.java
index 8ca199a..d437e80 100644
--- a/src/com/android/contacts/ContactsLiveFolders.java
+++ b/src/com/android/contacts/ContactsLiveFolders.java
@@ -39,7 +39,7 @@
             if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
                 setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
                         getString(R.string.liveFolder_favorites_label),
-                        R.drawable.ic_launcher_contacts_starred));
+                        R.drawable.ic_launcher_folder_live_contacts_starred));
             } else {
                 setResult(RESULT_CANCELED);
             }
@@ -62,7 +62,7 @@
             if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
                 setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
                         getString(R.string.liveFolder_phones_label),
-                        R.drawable.ic_launcher_contacts_phones));
+                        R.drawable.ic_launcher_folder_live_contacts_phone));
             } else {
                 setResult(RESULT_CANCELED);
             }
@@ -85,7 +85,7 @@
             if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
                 setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
                         getString(R.string.liveFolder_all_label),
-                        R.drawable.ic_launcher_contacts));
+                        R.drawable.ic_launcher_folder_live_contacts));
             } else {
                 setResult(RESULT_CANCELED);
             }
diff --git a/src/com/android/contacts/RecentCallsListActivity.java b/src/com/android/contacts/RecentCallsListActivity.java
index dbf2879..8949f6e 100644
--- a/src/com/android/contacts/RecentCallsListActivity.java
+++ b/src/com/android/contacts/RecentCallsListActivity.java
@@ -114,17 +114,11 @@
     private static final int QUERY_TOKEN = 53;
     private static final int UPDATE_TOKEN = 54;
 
-    private RecentCallsAdapter mAdapter;
+    RecentCallsAdapter mAdapter;
     private QueryHandler mQueryHandler;
-    private String mVoiceMailNumber;
+    String mVoiceMailNumber;
 
-    private CharSequence[] mLabelArray;
-
-    private Drawable mDrawableIncoming;
-    private Drawable mDrawableOutgoing;
-    private Drawable mDrawableMissed;
-
-    private static final class ContactInfo {
+    static final class ContactInfo {
         public long personId;
         public String name;
         public int type;
@@ -136,13 +130,14 @@
 
     public static final class RecentCallsListItemViews {
         TextView line1View;
-        TextView line2View;
-        TextView durationView;
+        TextView labelView;
+        TextView numberView;
         TextView dateView;
         ImageView iconView;
+        View callView;
     }
 
-    private static final class CallerInfoQuery {
+    static final class CallerInfoQuery {
         String number;
         int position;
         String name;
@@ -151,8 +146,8 @@
     }
 
     /** Adapter class to fill in data for the Call Log */
-    private final class RecentCallsAdapter extends ResourceCursorAdapter
-            implements Runnable, ViewTreeObserver.OnPreDrawListener {
+    final class RecentCallsAdapter extends ResourceCursorAdapter
+            implements Runnable, ViewTreeObserver.OnPreDrawListener, View.OnClickListener {
         HashMap<String,ContactInfo> mContactInfo;
         private final LinkedList<CallerInfoQuery> mRequests;
         private volatile boolean mDone;
@@ -163,6 +158,20 @@
         private boolean mFirst;
         private Thread mCallerIdThread;
 
+        private CharSequence[] mLabelArray;
+
+        private Drawable mDrawableIncoming;
+        private Drawable mDrawableOutgoing;
+        private Drawable mDrawableMissed;
+
+        public void onClick(View view) {
+            String number = (String) view.getTag();
+            if (!TextUtils.isEmpty(number)) {
+                Uri telUri = Uri.fromParts("tel", number, null);
+                startActivity(new Intent(Intent.ACTION_CALL_PRIVILEGED, telUri));
+            }
+        }
+
         public boolean onPreDraw() {
             if (mFirst) {
                 mHandler.sendEmptyMessageDelayed(START_THREAD, 1000);
@@ -191,6 +200,14 @@
             mContactInfo = new HashMap<String,ContactInfo>();
             mRequests = new LinkedList<CallerInfoQuery>();
             mPreDrawListener = null;
+
+            mDrawableIncoming = getResources().getDrawable(
+                    R.drawable.ic_call_log_list_incoming_call);
+            mDrawableOutgoing = getResources().getDrawable(
+                    R.drawable.ic_call_log_list_outgoing_call);
+            mDrawableMissed = getResources().getDrawable(
+                    R.drawable.ic_call_log_list_missed_call);
+            mLabelArray = getResources().getTextArray(com.android.internal.R.array.phoneTypes);
         }
 
         void setLoading(boolean loading) {
@@ -331,11 +348,13 @@
             // Get the views to bind to
             RecentCallsListItemViews views = new RecentCallsListItemViews();
             views.line1View = (TextView) view.findViewById(R.id.line1);
-            views.line2View = (TextView) view.findViewById(R.id.line2);
-            views.durationView = (TextView) view.findViewById(R.id.duration);
+            views.labelView = (TextView) view.findViewById(R.id.label);
+            views.numberView = (TextView) view.findViewById(R.id.number);
             views.dateView = (TextView) view.findViewById(R.id.date);
             views.iconView = (ImageView) view.findViewById(R.id.call_type_icon);
-
+            views.callView = view.findViewById(R.id.call_icon);
+            views.callView.setOnClickListener(this);
+            
             view.setTag(views);
 
             return view;
@@ -350,6 +369,9 @@
             String callerName = c.getString(CALLER_NAME_COLUMN_INDEX);
             int callerNumberType = c.getInt(CALLER_NUMBERTYPE_COLUMN_INDEX);
             String callerNumberLabel = c.getString(CALLER_NUMBERLABEL_COLUMN_INDEX);
+            
+            // Store away the number so we can call it directly if you click on the call icon
+            views.callView.setTag(number);
 
             // Lookup contacts with this number
             ContactInfo info = mContactInfo.get(number);
@@ -387,32 +409,24 @@
             // Set the text lines
             if (!TextUtils.isEmpty(name)) {
                 views.line1View.setText(name);
+                views.labelView.setVisibility(View.VISIBLE);
                 CharSequence numberLabel = Phones.getDisplayLabel(context, ntype, label,
                         mLabelArray);
+                views.numberView.setVisibility(View.VISIBLE);
+                views.numberView.setText(number);
                 if (!TextUtils.isEmpty(numberLabel)) {
-                    views.line2View.setText(numberLabel);
+                    views.labelView.setText(numberLabel);
+                    views.labelView.setVisibility(View.VISIBLE);
                 } else {
-                    views.line2View.setText(number);
+                    views.labelView.setVisibility(View.GONE);
                 }
-
-                // Set the presence icon
-/*
-                int serverStatus;
-                if (!c.isNull(SERVER_STATUS_COLUMN_INDEX)) {
-                    serverStatus = c.getInt(SERVER_STATUS_COLUMN_INDEX);
-                    views.line2View.setCompoundDrawablesWithIntrinsicBounds(
-                            getResources().getDrawable(
-                                    Presence.getPresenceIconResourceId(serverStatus)),
-                            null, null, null);
-                } else {
-                    views.line2View.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
-                }
-*/
             } else {
                 if (number.equals(CallerInfo.UNKNOWN_NUMBER)) {
                     number = getString(R.string.unknown);
                 } else if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
                     number = getString(R.string.private_num);
+                } else if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
+                    number = getString(R.string.payphone);
                 } else if (number.equals(mVoiceMailNumber)) {
                     number = getString(R.string.voicemail);
                 } else {
@@ -421,29 +435,18 @@
                 }
 
                 views.line1View.setText(number);
-                views.line2View.setText(null);
-
-                // Clear the presence icon
-//                views.line2View.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
+                views.numberView.setVisibility(View.GONE);
+                views.labelView.setVisibility(View.GONE);
             }
 
             int type = c.getInt(CALL_TYPE_COLUMN_INDEX);
             long date = c.getLong(DATE_COLUMN_INDEX);
 
-            // Set the duration
-            if (type == Calls.MISSED_TYPE) {
-                views.durationView.setVisibility(View.GONE);
-            } else {
-                views.durationView.setVisibility(View.VISIBLE);
-                views.durationView.setText(DateUtils.formatElapsedTime(c.getLong(DURATION_COLUMN_INDEX)));
-            }
-
             // Set the date/time field by mixing relative and absolute times.
-            int flags = DateUtils.FORMAT_ABBREV_RELATIVE | DateUtils.FORMAT_SHOW_DATE
-                    | DateUtils.FORMAT_ABBREV_MONTH;
+            int flags = DateUtils.FORMAT_ABBREV_RELATIVE;
             
-            views.dateView.setText(DateUtils.getRelativeDateTimeString(context, date,
-                    DateUtils.MINUTE_IN_MILLIS, DateUtils.DAY_IN_MILLIS * 2, flags));
+            views.dateView.setText(DateUtils.getRelativeTimeSpanString(date,
+                    System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS, flags));
 
             // Set the icon
             switch (type) {
@@ -459,6 +462,7 @@
                     views.iconView.setImageDrawable(mDrawableMissed);
                     break;
             }
+
             // Listen for the first draw
             if (mPreDrawListener == null) {
                 mFirst = true;
@@ -496,11 +500,6 @@
 
         setContentView(R.layout.recent_calls);
 
-        mDrawableIncoming = getResources().getDrawable(android.R.drawable.sym_call_incoming);
-        mDrawableOutgoing = getResources().getDrawable(android.R.drawable.sym_call_outgoing);
-        mDrawableMissed = getResources().getDrawable(android.R.drawable.sym_call_missed);
-        mLabelArray = getResources().getTextArray(com.android.internal.R.array.phoneTypes);
-
         // Typing here goes to the dialer
         setDefaultKeyMode(DEFAULT_KEYS_DIALER);
 
@@ -616,6 +615,8 @@
             number = getString(R.string.unknown);
         } else if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
             number = getString(R.string.private_num);
+        } else if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
+            number = getString(R.string.payphone);
         } else if (number.equals(mVoiceMailNumber)) {
             number = getString(R.string.voicemail);
             numberUri = Uri.parse("voicemail:x");
@@ -799,7 +800,8 @@
             String number = cursor.getString(NUMBER_COLUMN_INDEX);
             if (TextUtils.isEmpty(number)
                     || number.equals(CallerInfo.UNKNOWN_NUMBER)
-                    || number.equals(CallerInfo.PRIVATE_NUMBER)) {
+                    || number.equals(CallerInfo.PRIVATE_NUMBER)
+                    || number.equals(CallerInfo.PAYPHONE_NUMBER)) {
                 // This number can't be called, do nothing
                 return;
             }
diff --git a/src/com/android/contacts/ShowOrCreateActivity.java b/src/com/android/contacts/ShowOrCreateActivity.java
new file mode 100755
index 0000000..0732ffe
--- /dev/null
+++ b/src/com/android/contacts/ShowOrCreateActivity.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.AsyncQueryHandler;
+import android.content.ComponentName;
+import android.content.ContentUris;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Contacts;
+import android.provider.Contacts.ContactMethods;
+import android.provider.Contacts.ContactMethodsColumns;
+import android.provider.Contacts.Intents;
+import android.provider.Contacts.People;
+import android.provider.Contacts.Phones;
+import android.util.Log;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Handle several edge cases around showing or possibly creating contacts in
+ * connected with a specific E-mail address or phone number. Will search based
+ * on incoming {@link Intent#getData()} as described by
+ * {@link Intents#SHOW_OR_CREATE_CONTACT}.
+ * <ul>
+ * <li>If no matching contacts found, will prompt user with dialog to add to a
+ * contact, then will use {@link Intent#ACTION_INSERT_OR_EDIT} to let create new
+ * contact or edit new data into an existing one.
+ * <li>If one matching contact found, directly show {@link Intent#ACTION_VIEW}
+ * that specific contact.
+ * <li>If more than one matching found, show list of matching contacts using
+ * {@link Intent#ACTION_SEARCH}.
+ * </ul>
+ */
+public final class ShowOrCreateActivity extends Activity {
+    static final String TAG = "ShowOrCreateActivity";
+    static final boolean LOGD = false;
+
+    static final String[] PHONES_PROJECTION = new String[] {
+        Phones.PERSON_ID,
+    };
+
+    static final String[] PEOPLE_PROJECTION = new String[] {
+        People._ID,
+    };
+    
+    static final String SCHEME_MAILTO = "mailto";
+    static final String SCHEME_TEL = "tel";
+    
+    static final int PERSON_ID_INDEX = 0;
+
+    /**
+     * Query clause to filter {@link ContactMethods#CONTENT_URI} to only search
+     * {@link Contacts#KIND_EMAIL} or {@link Contacts#KIND_IM}.
+     */
+    static final String QUERY_KIND_EMAIL_OR_IM = ContactMethodsColumns.KIND +
+            " IN (" + Contacts.KIND_EMAIL + "," + Contacts.KIND_IM + ")";
+    
+    static final int QUERY_TOKEN = 42;
+    
+    private QueryHandler mQueryHandler;
+    
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        
+        // Create handler if doesn't exist, otherwise cancel any running
+        if (mQueryHandler == null) {
+            mQueryHandler = new QueryHandler(this);
+        } else {
+            mQueryHandler.cancelOperation(QUERY_TOKEN);
+        }
+
+        final Intent intent = getIntent();
+        final Uri data = intent.getData();
+        
+        // Unpack scheme and target data from intent
+        String scheme = null;
+        String ssp = null;
+        if (data != null) {
+            scheme = data.getScheme();
+            ssp = data.getSchemeSpecificPart();
+        }
+        
+        // Build set of extras for possible use when creating contact
+        Bundle createExtras = new Bundle();
+        Bundle originalExtras = intent.getExtras();
+        if (originalExtras != null) {
+            createExtras.putAll(originalExtras);
+        }
+        mQueryHandler.setCreateExtras(createExtras);
+        
+        // Read possible extra with specific title
+        String createDescrip = intent.getStringExtra(Intents.EXTRA_CREATE_DESCRIPTION);
+        if (createDescrip == null) {
+            createDescrip = ssp;
+        }
+        mQueryHandler.setCreateDescription(createDescrip);
+        
+        // Allow caller to bypass dialog prompt
+        boolean createForce = intent.getBooleanExtra(Intents.EXTRA_FORCE_CREATE, false);
+        mQueryHandler.setCreateForce(createForce);
+        
+        // Handle specific query request
+        if (SCHEME_MAILTO.equals(scheme)) {
+            createExtras.putString(Intents.Insert.EMAIL, ssp);
+            Uri uri = Uri.withAppendedPath(People.WITH_EMAIL_OR_IM_FILTER_URI, Uri.encode(ssp));
+            mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+                    PEOPLE_PROJECTION, null, null, null);
+        } else if (SCHEME_TEL.equals(scheme)) {
+            createExtras.putString(Intents.Insert.PHONE, ssp);
+            mQueryHandler.startQuery(QUERY_TOKEN, null,
+                    Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, ssp),
+                    PHONES_PROJECTION, null, null, null);
+            
+        } else {
+            Log.w(TAG, "Invalid intent:" + getIntent());
+            finish();
+        }
+    }
+    
+    @Override
+    protected void onStop() {
+        super.onStop();
+        if (mQueryHandler != null) {
+            mQueryHandler.cancelOperation(QUERY_TOKEN);
+        }
+    }
+    
+    /**
+     * Listener for {@link DialogInterface} that launches a given {@link Intent}
+     * when clicked. When clicked, this also closes the parent using
+     * {@link Activity#finish()}.
+     */
+    private static class IntentClickListener implements DialogInterface.OnClickListener {
+        private Activity mParent;
+        private Intent mIntent;
+
+        /**
+         * @param parent {@link Activity} to use for launching target.
+         * @param intent Target {@link Intent} to launch when clicked.
+         */
+        public IntentClickListener(Activity parent, Intent intent) {
+            mParent = parent;
+            mIntent = intent;
+        }
+
+        public void onClick(DialogInterface dialog, int which) {
+            if (mIntent != null) {
+                mParent.startActivity(mIntent);
+            }
+            mParent.finish();
+        }
+    }
+
+    /**
+     * Handle asynchronous query to find matching contacts. When query finishes,
+     * will handle based on number of matching contacts found.
+     */
+    private static final class QueryHandler extends AsyncQueryHandler {
+        private final WeakReference<Activity> mActivity;
+        private Bundle mCreateExtras;
+        private String mCreateDescrip;
+        private boolean mCreateForce;
+
+        public QueryHandler(Activity activity) {
+            super(activity.getContentResolver());
+            mActivity = new WeakReference<Activity>(activity);
+        }
+        
+        public void setCreateExtras(Bundle createExtras) {
+            mCreateExtras = createExtras;
+        }
+        
+        public void setCreateDescription(String createDescrip) {
+            mCreateDescrip = createDescrip;
+        }
+        
+        public void setCreateForce(boolean createForce) {
+            mCreateForce = createForce;
+        }
+
+        @Override
+        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
+            Activity activity = mActivity.get();
+            if (activity == null) {
+                return;
+            }
+            
+            // Count contacts found by query
+            int count = 0;
+            long personId = -1;
+            if (cursor != null) {
+                try {
+                    count = cursor.getCount();
+                    if (count == 1 && cursor.moveToFirst()) {
+                        // Try reading ID if only one contact returned
+                        personId = cursor.getLong(PERSON_ID_INDEX);
+                    }
+                } finally {
+                    cursor.close();
+                }
+            }
+            
+            if (LOGD) Log.d(TAG, "onQueryComplete count=" + count);
+            
+            if (count == 1) {
+                // If we only found one item, jump right to viewing it
+                Intent viewIntent = new Intent(Intent.ACTION_VIEW,
+                        ContentUris.withAppendedId(People.CONTENT_URI, personId));
+                activity.startActivity(viewIntent);
+                activity.finish();
+                
+            } else if (count > 1) {
+                // If more than one, show pick list
+                Intent listIntent = new Intent(Intent.ACTION_SEARCH);
+                listIntent.setComponent(new ComponentName(activity, ContactsListActivity.class));
+                listIntent.putExtras(mCreateExtras);
+                activity.startActivity(listIntent);
+                activity.finish();
+                
+            } else {
+                // No matching contacts found
+                if (mCreateForce) {
+                    // Forced to create new contact
+                    Intent createIntent = new Intent(Intent.ACTION_INSERT, People.CONTENT_URI);
+                    createIntent.putExtras(mCreateExtras);
+                    createIntent.setType(People.CONTENT_TYPE);
+                    
+                    activity.startActivity(createIntent);
+                    activity.finish();
+                    
+                } else {
+                    // Prompt user to insert or edit contact 
+                    Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+                    createIntent.putExtras(mCreateExtras);
+                    createIntent.setType(People.CONTENT_ITEM_TYPE);
+                    
+                    CharSequence message = activity.getResources().getString(
+                            R.string.add_contact_dlg_message_fmt, mCreateDescrip);
+                    
+                    new AlertDialog.Builder(activity)
+                            .setTitle(R.string.add_contact_dlg_title)
+                            .setMessage(message)
+                            .setPositiveButton(android.R.string.ok,
+                                    new IntentClickListener(activity, createIntent))
+                            .setNegativeButton(android.R.string.cancel,
+                                    new IntentClickListener(activity, null))
+                            .show();
+                }
+            }
+        }
+    }
+}
diff --git a/src/com/android/contacts/TwelveKeyDialer.java b/src/com/android/contacts/TwelveKeyDialer.java
index c80e67b..ea157fc 100644
--- a/src/com/android/contacts/TwelveKeyDialer.java
+++ b/src/com/android/contacts/TwelveKeyDialer.java
@@ -55,6 +55,7 @@
 import android.view.View;
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.EditText;
@@ -321,8 +322,9 @@
         if (!TextUtils.isEmpty(dialString)) {
             Editable digits = mDigits.getText();
             digits.replace(0, digits.length(), dialString);
-            mDigits.setCompoundDrawablesWithIntrinsicBounds(
-                    getResources().getDrawable(R.drawable.ic_dial_number), null, null, null);
+            // for some reason this isn't getting called in the digits.replace call above..
+            // but in any case, this will make sure the background drawable looks right
+            afterTextChanged(digits);
         }
     }
 
@@ -426,6 +428,19 @@
     }
 
     @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        if (hasFocus) {
+            // Hide soft keyboard, if visible (it's fugly over button dialer).
+            // The only known case where this will be true is when launching the dialer with
+            // ACTION_DIAL via a soft keyboard.  we dismiss it here because we don't
+            // have a window token yet in onCreate / onNewIntent
+            InputMethodManager inputMethodManager = (InputMethodManager)
+                    getSystemService(Context.INPUT_METHOD_SERVICE);
+            inputMethodManager.hideSoftInputFromWindow(mDigits.getWindowToken(), 0);            
+        }
+    }
+
+    @Override
     protected void onPause() {
         super.onPause();
 
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index 99e72b0..28a82b4 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -413,20 +413,23 @@
                     Bundle bundle = new Bundle();
                     String name = mCursor.getString(CONTACT_NAME_COLUMN);
                     if (!TextUtils.isEmpty(name)) {
+                        // Correctly handle when section headers are hidden
+                        int sepAdjust = SHOW_SEPARATORS ? 1 : 0;
+                        
                         bundle.putString(Contacts.Intents.Insert.NAME, name);
                         // The 0th ViewEntry in each ArrayList below is a separator item
-                        int entriesToAdd = Math.min(mPhoneEntries.size() - 1, PHONE_KEYS.length);
+                        int entriesToAdd = Math.min(mPhoneEntries.size() - sepAdjust, PHONE_KEYS.length);
                         for (int x = 0; x < entriesToAdd; x++) {
-                            ViewEntry entry = mPhoneEntries.get(x + 1);
+                            ViewEntry entry = mPhoneEntries.get(x + sepAdjust);
                             bundle.putString(PHONE_KEYS[x], entry.data);
                         }
-                        entriesToAdd = Math.min(mEmailEntries.size() - 1, EMAIL_KEYS.length);
+                        entriesToAdd = Math.min(mEmailEntries.size() - sepAdjust, EMAIL_KEYS.length);
                         for (int x = 0; x < entriesToAdd; x++) {
-                            ViewEntry entry = mEmailEntries.get(x + 1);
+                            ViewEntry entry = mEmailEntries.get(x + sepAdjust);
                             bundle.putString(EMAIL_KEYS[x], entry.data);
                         }
-                        if (mPostalEntries.size() >= 2) {
-                            ViewEntry entry = mPostalEntries.get(1);
+                        if (mPostalEntries.size() >= 1 + sepAdjust) {
+                            ViewEntry entry = mPostalEntries.get(sepAdjust);
                             bundle.putString(Contacts.Intents.Insert.POSTAL, entry.data);
                         }
                         intent.putExtra("ENCODE_DATA", bundle);
@@ -893,6 +896,11 @@
     }
 
     String buildActionString(int actionResId, CharSequence type, boolean lowerCase) {
+        // If there is no type just display an empty string
+        if (type == null) {
+            type = "";
+        }
+
         if (lowerCase) {
             return getString(actionResId, type.toString().toLowerCase());
         } else {