auto import from //branches/cupcake_rel/...@141571
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e0aadd5..71a90eb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -241,7 +241,8 @@
 
         <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" />
@@ -252,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" />
@@ -264,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" />
@@ -314,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" />
@@ -324,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" />
@@ -334,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/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/ic_contact_list_picture_2.png b/res/drawable-finger/ic_contact_list_picture_2.png
new file mode 100644
index 0000000..771ffb2
--- /dev/null
+++ b/res/drawable-finger/ic_contact_list_picture_2.png
Binary files differ
diff --git a/res/drawable-finger/ic_contact_list_picture_3.png b/res/drawable-finger/ic_contact_list_picture_3.png
new file mode 100644
index 0000000..92c1213
--- /dev/null
+++ b/res/drawable-finger/ic_contact_list_picture_3.png
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/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/values-ja/strings.xml b/res/values-ja/strings.xml
index efc635e..fe17666 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,10 +16,10 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"連絡先"</string>
-    <string name="launcherDialer">"通話"</string>
+    <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>
@@ -95,7 +95,7 @@
     <string name="groupNameWithPhones">"電話番号のある連絡先"</string>
     <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>
@@ -109,8 +109,8 @@
     <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>
@@ -129,7 +129,7 @@
     <!-- 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>
@@ -163,8 +163,7 @@
     <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 />
+    <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>
     <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
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/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 5ba0ec5..a13b9d8 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;
@@ -70,8 +73,6 @@
 import android.widget.SectionIndexer;
 import android.widget.TextView;
 
-import static com.android.contacts.ShowOrCreateActivity.QUERY_KIND_EMAIL_OR_IM;
-
 import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -1039,7 +1040,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 {
@@ -1414,6 +1415,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);
@@ -1486,6 +1488,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);
 
@@ -1549,27 +1590,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
@@ -1602,13 +1634,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
@@ -1656,7 +1704,7 @@
                 return mIndexer.getSections();
            }
         }
-        
+
         public int getPositionForSection(int sectionIndex) {
             if (mMode == MODE_STREQUENT) {
                 return 0;
@@ -1673,13 +1721,56 @@
 
             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/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();