Merge change 23475 into eclair

* changes:
  Return appropriate URI for PICKER intents.
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_contacts.png b/res/drawable-finger/ic_tab_selected_contacts.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_selected_contacts.png
rename to res/drawable-finger/ic_tab_selected_contacts.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_dialer.png b/res/drawable-finger/ic_tab_selected_dialer.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_selected_dialer.png
rename to res/drawable-finger/ic_tab_selected_dialer.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_recent.png b/res/drawable-finger/ic_tab_selected_recent.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_selected_recent.png
rename to res/drawable-finger/ic_tab_selected_recent.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_starred.png b/res/drawable-finger/ic_tab_selected_starred.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_selected_starred.png
rename to res/drawable-finger/ic_tab_selected_starred.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_contacts.png b/res/drawable-finger/ic_tab_unselected_contacts.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_unselected_contacts.png
rename to res/drawable-finger/ic_tab_unselected_contacts.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_dialer.png b/res/drawable-finger/ic_tab_unselected_dialer.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_unselected_dialer.png
rename to res/drawable-finger/ic_tab_unselected_dialer.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_recent.png b/res/drawable-finger/ic_tab_unselected_recent.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_unselected_recent.png
rename to res/drawable-finger/ic_tab_unselected_recent.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_starred.png b/res/drawable-finger/ic_tab_unselected_starred.png
similarity index 100%
rename from res/drawable-mdpi-finger/ic_tab_unselected_starred.png
rename to res/drawable-finger/ic_tab_unselected_starred.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_contacts.png b/res/drawable-hdpi-finger/ic_tab_selected_contacts.png
deleted file mode 100644
index 171b562..0000000
--- a/res/drawable-hdpi-finger/ic_tab_selected_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_dialer.png b/res/drawable-hdpi-finger/ic_tab_selected_dialer.png
deleted file mode 100644
index 910796b..0000000
--- a/res/drawable-hdpi-finger/ic_tab_selected_dialer.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_recent.png b/res/drawable-hdpi-finger/ic_tab_selected_recent.png
deleted file mode 100644
index 2685043..0000000
--- a/res/drawable-hdpi-finger/ic_tab_selected_recent.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_starred.png b/res/drawable-hdpi-finger/ic_tab_selected_starred.png
deleted file mode 100644
index 06c3d77..0000000
--- a/res/drawable-hdpi-finger/ic_tab_selected_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_contacts.png b/res/drawable-hdpi-finger/ic_tab_unselected_contacts.png
deleted file mode 100644
index e489e05..0000000
--- a/res/drawable-hdpi-finger/ic_tab_unselected_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_dialer.png b/res/drawable-hdpi-finger/ic_tab_unselected_dialer.png
deleted file mode 100644
index e5d10c6..0000000
--- a/res/drawable-hdpi-finger/ic_tab_unselected_dialer.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_recent.png b/res/drawable-hdpi-finger/ic_tab_unselected_recent.png
deleted file mode 100644
index a386eab..0000000
--- a/res/drawable-hdpi-finger/ic_tab_unselected_recent.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_starred.png b/res/drawable-hdpi-finger/ic_tab_unselected_starred.png
deleted file mode 100644
index 4a909fa..0000000
--- a/res/drawable-hdpi-finger/ic_tab_unselected_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/values/config.xml b/res/values/config.xml
index 98d0d13..a7f39ff 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -45,23 +45,23 @@
 
     <!-- The type of vcard for improt. If the vcard importer cannot guess the exact type
     of a vCard type, the improter uses this type. -->
-    <string name="config_import_vcard_type">default</string>
+    <string name="config_import_vcard_type" translatable="false">default</string>
 
     <!-- The type of VCard for export. If you want to let the app emit vCard which is
     specific to some vendor (like DoCoMo), specify this type (e.g. "docomo") -->
-    <string name="config_export_vcard_type">default</string>
+    <string name="config_export_vcard_type" translatable="false">default</string>
 
     <!-- Directory in which exported VCard file is stored -->
-    <string name="config_export_dir">/sdcard</string>
+    <string name="config_export_dir" translatable="false">/sdcard</string>
 
     <!-- Prefix of exported VCard file -->
-    <string name="config_export_file_prefix"></string>
+    <string name="config_export_file_prefix" translatable="false"></string>
 
     <!-- Suffix of exported VCard file. Attached before an extension -->
-    <string name="config_export_file_suffix"></string>
+    <string name="config_export_file_suffix" translatable="false"></string>
 
     <!-- Extension for exported VCard files -->
-    <string name="config_export_file_extension">vcf</string>
+    <string name="config_export_file_extension" translatable="false">vcf</string>
 
     <!-- Minimum number of exported VCard file index -->
     <integer name="config_export_file_min_index">1</integer>
@@ -73,7 +73,7 @@
      config_export_extension. e.g. If "aaa" is added to here and 00001.vcf and 00002.aaa
      exist in a target directory, 00003.vcf becomes a next file name candidate.
      Without this configuration, 00002.vcf becomes the candidate.-->
-    <string name="config_export_extensions_to_consider"></string>
+    <string name="config_export_extensions_to_consider" translatable="false"></string>
 
     <!-- If true, show an onscreen "Dial" button in the dialer.
          (In practice this is used only on platforms with no hard SEND/END
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 00ef14b..04707df 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -730,8 +730,8 @@
     <!-- The failed reason: "There is no valid VCard entry in the file(s)" -->
     <string name="fail_reason_no_vcard_entry">No valid VCard entry found for your selection</string>
 
-    <!-- The failed reason: "One or more files failed to be imported." -->
-    <string name="fail_reason_failed_to_read_files">One or more files failed to be imported.</string>
+    <!-- The failed reason: "One or more files failed to be imported. (&lt;a list of file names&gt;)" -->
+    <string name="fail_reason_failed_to_read_files">One or more files failed to be imported (%s).</string>
 
     <!-- Dialog title shown when a user is asked to select VCard file -->
     <string name="select_vcard_title">Select VCard file</string>
diff --git a/src/com/android/contacts/BaseContactCardActivity.java b/src/com/android/contacts/BaseContactCardActivity.java
index 2aac1a2..bd62b8a 100644
--- a/src/com/android/contacts/BaseContactCardActivity.java
+++ b/src/com/android/contacts/BaseContactCardActivity.java
@@ -74,7 +74,7 @@
     protected static final int TAB_ACCOUNT_TYPE_COLUMN_INDEX = 2;
 
     protected static final String SELECTED_RAW_CONTACT_ID_KEY = "selectedRawContact";
-    protected long mSelectedRawContactId;
+    protected Long mSelectedRawContactId = null;
 
     private static final int TOKEN_TABS = 0;
 
@@ -231,31 +231,24 @@
     }
 
     protected void selectInitialTab() {
-        int selectedTabIndex = -1;
-        if (mSelectedRawContactId > 0) {
-            selectedTabIndex = getTabIndexForRawContactId(mSelectedRawContactId);
-        }
-        if (selectedTabIndex >= 0) {
-            mTabWidget.setCurrentTab(selectedTabIndex);
-        } else {
-            selectDefaultTab();
-        }
-    }
+        int selectedTabIndex = 0;
 
-    /**
-     * Makes the default tab selection. This is called after the tabs have been
-     * bound for the first time, and whenever a new intent is received. Override
-     * this method if you want to customize the default tab behavior.
-     */
-    protected void selectDefaultTab() {
-        // Select the first tab.
-        mTabWidget.setCurrentTab(0);
+        if (mSelectedRawContactId != null) {
+            selectedTabIndex = getTabIndexForRawContactId(mSelectedRawContactId);
+            if (selectedTabIndex == -1) {
+                // If there was no matching tab, just select the first;
+                selectedTabIndex = 0;
+            }
+        }
+
+        mTabWidget.setCurrentTab(selectedTabIndex);
+        onTabSelectionChanged(selectedTabIndex, false);
     }
 
     @Override
     public void onNewIntent(Intent newIntent) {
         setIntent(newIntent);
-        selectDefaultTab();
+        selectInitialTab();
         mUri = newIntent.getData();
     }
 
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index cd9802c..5efe5ca 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -200,9 +200,6 @@
         //TODO Read this value from a preference
         mShowSmsLinksForAllPhones = true;
 
-        //Select the all tab to start.
-        mSelectedRawContactId = ALL_CONTACTS_ID;
-
         mCursor = mResolver.query(Uri.withAppendedPath(mUri, "data"),
                 CONTACT_PROJECTION, null, null, null);
     }
@@ -305,9 +302,6 @@
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        menu.add(0, MENU_ITEM_EDIT, 0, R.string.menu_editContact)
-                .setIcon(android.R.drawable.ic_menu_edit)
-                .setAlphabeticShortcut('e');
         menu.add(0, MENU_ITEM_DELETE, 0, R.string.menu_deleteContact)
                 .setIcon(android.R.drawable.ic_menu_delete);
         menu.add(0, MENU_ITEM_SPLIT_AGGREGATE, 0, R.string.menu_splitAggregate)
@@ -333,6 +327,17 @@
             menu.removeItem(MENU_ITEM_SHOW_BARCODE);
         }
 
+        // Only show the edit option if we have a selected tab.
+        if (mSelectedRawContactId != null) {
+            if (menu.findItem(MENU_ITEM_EDIT) == null) {
+                menu.add(0, MENU_ITEM_EDIT, 0, R.string.menu_editContact)
+                    .setIcon(android.R.drawable.ic_menu_edit)
+                    .setAlphabeticShortcut('e');
+            }
+        } else {
+            menu.removeItem(MENU_ITEM_EDIT);
+        }
+
         boolean isAggregate = mRawContactIds.size() > 1;
         menu.findItem(MENU_ITEM_SPLIT_AGGREGATE).setEnabled(isAggregate);
         return true;
@@ -386,11 +391,15 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case MENU_ITEM_EDIT: {
-                final int tabIndex = mTabWidget.getCurrentTab();
-                long rawContactIdToEdit = getTabRawContactId(tabIndex);
+                Long rawContactIdToEdit = mSelectedRawContactId;
+                if (rawContactIdToEdit == null) {
+                    // This shouldn't be possible. We only show the edit option if
+                    // this value is non-null.
+                    break;
+                }
                 if (rawContactIdToEdit == ALL_CONTACTS_ID) {
                     // If the "all" tab is selected, edit the next tab.
-                    rawContactIdToEdit = getTabRawContactId(tabIndex + 1);
+                    rawContactIdToEdit = getTabRawContactId(mTabWidget.getCurrentTab() + 1);
                 }
                 Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI,
                         rawContactIdToEdit);
@@ -732,7 +741,8 @@
                 }
 
                 // This performs the tab filtering
-                if (mSelectedRawContactId != entry.contactId
+                if (mSelectedRawContactId != null
+                        && mSelectedRawContactId != entry.contactId
                         && mSelectedRawContactId != ALL_CONTACTS_ID) {
                     continue;
                 }