Merge change 26137 into eclair

* changes:
  Contacts: Fixed to choose correct item in list, counting header in.
diff --git a/src/com/android/contacts/DialtactsActivity.java b/src/com/android/contacts/DialtactsActivity.java
index 2ba3d26..9fb5f41 100644
--- a/src/com/android/contacts/DialtactsActivity.java
+++ b/src/com/android/contacts/DialtactsActivity.java
@@ -16,24 +16,21 @@
 
 package com.android.contacts;
 
+import com.android.internal.telephony.ITelephony;
+
 import android.app.Activity;
 import android.app.TabActivity;
 import android.content.Intent;
 import android.content.SharedPreferences;
-import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.provider.CallLog;
-import android.provider.Contacts;
 import android.provider.CallLog.Calls;
-import android.provider.Contacts.Intents.UI;
+import android.provider.ContactsContract.Intents.UI;
 import android.util.Log;
-import android.view.KeyEvent;
 import android.view.Window;
 import android.widget.TabHost;
-import com.android.internal.telephony.ITelephony;
 
 /**
  * The dialer activity that has one tab with the virtual 12key dialer,
@@ -83,7 +80,7 @@
 
         setCurrentTab(intent);
 
-        if (intent.getAction().equals(Contacts.Intents.UI.FILTER_CONTACTS_ACTION)
+        if (intent.getAction().equals(UI.FILTER_CONTACTS_ACTION)
                 && icicle == null) {
             setupFilterText(intent);
         }
@@ -235,7 +232,7 @@
         fixIntent(newIntent);
         setCurrentTab(newIntent);
         final String action = newIntent.getAction();
-        if (action.equals(Contacts.Intents.UI.FILTER_CONTACTS_ACTION)) {
+        if (action.equals(UI.FILTER_CONTACTS_ACTION)) {
             setupFilterText(newIntent);
         } else if (isDialIntent(newIntent)) {
             setupDialUri(newIntent);
@@ -282,7 +279,7 @@
         if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
             return;
         }
-        String filter = intent.getStringExtra(Contacts.Intents.UI.FILTER_TEXT_EXTRA_KEY);
+        String filter = intent.getStringExtra(UI.FILTER_TEXT_EXTRA_KEY);
         if (filter != null && filter.length() > 0) {
             mFilterText = filter;
         }
diff --git a/src/com/android/contacts/ui/EditContactActivity.java b/src/com/android/contacts/ui/EditContactActivity.java
index 843615a..6059e62 100644
--- a/src/com/android/contacts/ui/EditContactActivity.java
+++ b/src/com/android/contacts/ui/EditContactActivity.java
@@ -736,12 +736,17 @@
 
             final ArrayList<Account> writable = sources.getAccounts(true);
 
+            // No Accounts available.  Create a phone-local contact.
+            if (writable.isEmpty()) {
+                selectAccount(null);
+                return null;  // Don't show a dialog.
+            }
+
             // In the common case of a single account being writable, auto-select
             // it without showing a dialog.
             if (writable.size() == 1) {
                 selectAccount(writable.get(0));
-                // Signal to not show a dialog:
-                return null;
+                return null;  // Don't show a dialog.
             }
 
             final ArrayAdapter<Account> accountAdapter = new ArrayAdapter<Account>(target,
@@ -802,6 +807,13 @@
             return builder;
         }
 
+        /**
+         * Sets up EditContactActivity's mState for the account selected.
+         * Runs from a background thread.
+         *
+         * @param account may be null to signal a device-local contact should
+         *     be created.
+         */
         private void selectAccount(Account account) {
             EditContactActivity target = mTarget.get();
             if (target == null) {
@@ -809,13 +821,19 @@
             }
             final Sources sources = Sources.getInstance(target);
             final ContentValues values = new ContentValues();
-            values.put(RawContacts.ACCOUNT_NAME, account.name);
-            values.put(RawContacts.ACCOUNT_TYPE, account.type);
+            if (account != null) {
+                values.put(RawContacts.ACCOUNT_NAME, account.name);
+                values.put(RawContacts.ACCOUNT_TYPE, account.type);
+            } else {
+                values.putNull(RawContacts.ACCOUNT_NAME);
+                values.putNull(RawContacts.ACCOUNT_TYPE);
+            }
 
             // Parse any values from incoming intent
             final EntityDelta insert = new EntityDelta(ValuesDelta.fromAfter(values));
-            final ContactsSource source = sources.getInflatedSource(account.type,
-                                                                    ContactsSource.LEVEL_CONSTRAINTS);
+            final ContactsSource source = sources.getInflatedSource(
+                account != null ? account.type : null,
+                ContactsSource.LEVEL_CONSTRAINTS);
             final Bundle extras = target.getIntent().getExtras();
             EntityModifier.parseExtras(target, source, insert, extras);