Check for empty contact lookup keys

Bug:19588470
Change-Id: I1b0b262483a316a0a84a051e2a4225c68523e47e
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 266ea46..4c3671f 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -387,6 +387,9 @@
                     Cursor c = resolver.query(Profile.CONTENT_URI,
                             new String[] {Contacts._ID, Contacts.LOOKUP_KEY},
                             null, null, null);
+                    if (c == null) {
+                        continue;
+                    }
                     try {
                         if (c.moveToFirst()) {
                             final long contactId = c.getLong(0);
@@ -401,7 +404,9 @@
                                     rawContactId);
                     lookupUri = RawContacts.getContactLookupUri(resolver, rawContactUri);
                 }
-                Log.v(TAG, "Saved contact. New URI: " + lookupUri);
+                if (lookupUri != null) {
+                    Log.v(TAG, "Saved contact. New URI: " + lookupUri);
+                }
 
                 // We can change this back to false later, if we fail to save the contact photo.
                 succeeded = true;
diff --git a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
index e3fa7e2..f4e8c78 100644
--- a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
+++ b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
@@ -495,6 +495,9 @@
                             if (photoId == 0) {
                                 mContactId = cursor.getLong(ContactQuery._ID);
                                 startDisambiguationQuery(mDisplayName);
+                            } else if (TextUtils.isEmpty(mLookupKey)) {
+                                finish();
+                                return;
                             } else {
                                 // Otherwise do the photo query.
                                 Uri lookupUri = Contacts.getLookupUri(mContactId, mLookupKey);
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index da5bb9d..8277cdd 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -31,6 +31,7 @@
 import android.provider.ContactsContract.PhoneLookup;
 import android.provider.ContactsContract.RawContacts;
 import android.telecom.PhoneAccount;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.contacts.common.ContactsUtils;
@@ -170,7 +171,7 @@
             cursor.close();
         }
 
-        if (count == 1 && contactId != -1) {
+        if (count == 1 && contactId != -1 && !TextUtils.isEmpty(lookupKey)) {
             // If we only found one item, jump right to viewing it
             final Uri contactUri = Contacts.getLookupUri(contactId, lookupKey);
             final Intent viewIntent = new Intent(Intent.ACTION_VIEW, contactUri);
diff --git a/src/com/android/contacts/editor/AggregationSuggestionView.java b/src/com/android/contacts/editor/AggregationSuggestionView.java
index a3d04e4..e3bab7e 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionView.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionView.java
@@ -20,6 +20,7 @@
 import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.provider.ContactsContract.Contacts;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -138,6 +139,9 @@
     public boolean handleItemClickEvent() {
         if (mListener != null && isEnabled()) {
             if (canEditSuggestedContact()) {
+                if (TextUtils.isEmpty(mLookupKey)) {
+                    return false;
+                }
                 mListener.onEditAction(Contacts.getLookupUri(mContactId, mLookupKey));
             } else {
                 ArrayList<Long> rawContactIds = Lists.newArrayList();
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index b10963b..b05cbab 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -32,6 +32,7 @@
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Contacts.Entity;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.contacts.ContactSaveService;
@@ -254,6 +255,11 @@
                 readOnlyRawContacts.add(rawContactId);
             }
         }
+        if (TextUtils.isEmpty(lookupKey)) {
+            Log.e(TAG, "Failed to find contact lookup key");
+            getActivity().finish();
+            return;
+        }
 
         int readOnlyCount = readOnlyRawContacts.size();
         int writableCount = writableRawContacts.size();