Don't crash QuickContacts because of null uri

When composeQuickContactActivity() is passed a null uri, then
startActivity throws the following exception:

    ActivityNotFoundException: No Activity found to handle Intent
    { act=android.provider.action.QUICK_CONTACT flg=0x20000000 (has extras) }

I can't reproduce this. So lets just fix the crash.

Inside contact list fragments, ignore clicks on views bound to null uris.
We don't need to change Dialer. It already handles these cases.

Note that we can't fix this by checking for null URIs inside
ContactEntryListFragment. One of the Dialer subclasses of
ContactEntryListFragment requires null URIs.

Bug: 17807956
Change-Id: I41dd878b23b8cc3e9b8ad49e12675a4da9ced466
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 442f5c7..0503d33 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -128,6 +128,9 @@
         } else {
             uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
         }
+        if (uri == null) {
+            return;
+        }
         if (mEditMode) {
             editContact(uri);
         } else  if (mShortcutRequested) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index bf1bdca..4630202 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -18,6 +18,7 @@
 import android.content.Context;
 import android.content.CursorLoader;
 import android.content.Intent;
+import android.net.Uri;
 import android.provider.ContactsContract.Contacts;
 import android.text.TextUtils;
 import android.util.Log;
@@ -86,7 +87,11 @@
 
     @Override
     protected void onItemClick(int position, long id) {
-        viewContact(getAdapter().getContactUri(position));
+        final Uri uri = getAdapter().getContactUri(position);
+        if (uri == null) {
+            return;
+        }
+        viewContact(uri);
     }
 
     @Override
diff --git a/src/com/android/contacts/list/EmailAddressPickerFragment.java b/src/com/android/contacts/list/EmailAddressPickerFragment.java
index 2146b68..f89f743 100644
--- a/src/com/android/contacts/list/EmailAddressPickerFragment.java
+++ b/src/com/android/contacts/list/EmailAddressPickerFragment.java
@@ -45,6 +45,9 @@
     @Override
     protected void onItemClick(int position, long id) {
         EmailAddressListAdapter adapter = (EmailAddressListAdapter)getAdapter();
+        if (getAdapter().getItem(position) == null) {
+            return;
+        }
         pickEmailAddress(adapter.getDataUri(position));
     }
 
diff --git a/src/com/android/contacts/list/PostalAddressPickerFragment.java b/src/com/android/contacts/list/PostalAddressPickerFragment.java
index a23a78b..c64e173 100644
--- a/src/com/android/contacts/list/PostalAddressPickerFragment.java
+++ b/src/com/android/contacts/list/PostalAddressPickerFragment.java
@@ -46,6 +46,9 @@
 
     @Override
     protected void onItemClick(int position, long id) {
+        if (getAdapter().getItem(position) == null) {
+            return;
+        }
         if (!isLegacyCompatibilityMode()) {
             PostalAddressListAdapter adapter = (PostalAddressListAdapter)getAdapter();
             pickPostalAddress(adapter.getDataUri(position));