Provide only "add phone number" option in QuickContact for SIM contact

Bug: 31547071

Test: Manually test for
1, a SIM contact;
2, linked contact from a SIM contact and a non-SIM contact;
3, linked contact all from SIM contacts.

Change-Id: Iab5b5161574d644c9a7c4289a7a3d175ae86169c
diff --git a/src/com/android/contacts/common/model/Contact.java b/src/com/android/contacts/common/model/Contact.java
index 2187b1d..c84ff2a 100644
--- a/src/com/android/contacts/common/model/Contact.java
+++ b/src/com/android/contacts/common/model/Contact.java
@@ -25,6 +25,7 @@
 import android.provider.ContactsContract.DisplayNameSources;
 
 import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.account.SimAccountType;
 import com.android.contacts.common.util.DataStatus;
 import com.android.contacts.group.GroupMetaData;
 
@@ -471,6 +472,19 @@
         return mIsUserProfile;
     }
 
+    /**
+     * @return true if all the raw contacts are from SIM accounts, and false otherwise.
+     */
+    public boolean areAllRawContactsSimAccounts(final Context context) {
+        if (getRawContacts() == null) return false;
+
+        for (RawContact rawContact : getRawContacts()) {
+            final AccountType accountType = rawContact.getAccountType(context);
+            if (!(accountType instanceof SimAccountType)) return false;
+        }
+        return true;
+    }
+
     @Override
     public String toString() {
         return "{requested=" + mRequestedUri + ",lookupkey=" + mLookupKey +
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 40bcd55..b301324 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -1660,7 +1660,7 @@
                 mScroller);
 
         if (contactCardEntries.size() == 0 && aboutCardEntries.size() == 0) {
-            initializeNoContactDetailCard();
+            initializeNoContactDetailCard(cp2DataCardModel.areAllRawContactsSimAccounts);
         } else {
             mNoContactDetailsCard.setVisibility(View.GONE);
         }
@@ -1681,8 +1681,9 @@
 
     /**
      * Create a card that shows "Add email" and "Add phone number" entries in grey.
+     * When contact is a SIM contact, only shows "Add phone number".
      */
-    private void initializeNoContactDetailCard() {
+    private void initializeNoContactDetailCard(boolean areAllRawContactsSimAccounts) {
         final Drawable phoneIcon = getResources().getDrawable(
                 R.drawable.ic_phone_24dp).mutate();
         final Entry phonePromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
@@ -1699,25 +1700,28 @@
                 /* thirdExtras = */ null,
                 R.drawable.ic_phone_24dp);
 
-        final Drawable emailIcon = getResources().getDrawable(
-                R.drawable.ic_email_24dp).mutate();
-        final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
-                emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */ null,
-                /* subHeaderIcon = */ null,
-                /* text = */ null, /* textIcon = */ null, /* primaryContentDescription = */ null,
-                getEditContactIntent(), /* alternateIcon = */ null,
-                /* alternateIntent = */ null, /* alternateContentDescription = */ null,
-                /* shouldApplyColor = */ true, /* isEditable = */ false,
-                /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
-                /* thirdIntent = */ null, /* thirdContentDescription = */ null,
-                /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
-                R.drawable.ic_email_24dp);
-
         final List<List<Entry>> promptEntries = new ArrayList<>();
         promptEntries.add(new ArrayList<Entry>(1));
-        promptEntries.add(new ArrayList<Entry>(1));
         promptEntries.get(0).add(phonePromptEntry);
-        promptEntries.get(1).add(emailPromptEntry);
+
+        if (!areAllRawContactsSimAccounts) {
+            final Drawable emailIcon = getResources().getDrawable(
+                    R.drawable.ic_email_24dp).mutate();
+            final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
+                    emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */ null,
+                    /* subHeaderIcon = */ null,
+                    /* text = */ null, /* textIcon = */ null, /* primaryContentDescription = */ null,
+                    getEditContactIntent(), /* alternateIcon = */ null,
+                    /* alternateIntent = */ null, /* alternateContentDescription = */ null,
+                    /* shouldApplyColor = */ true, /* isEditable = */ false,
+                    /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
+                    /* thirdIntent = */ null, /* thirdContentDescription = */ null,
+                    /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
+                    R.drawable.ic_email_24dp);
+
+            promptEntries.add(new ArrayList<Entry>(1));
+            promptEntries.get(1).add(emailPromptEntry);
+        }
 
         final int subHeaderTextColor = getResources().getColor(
                 R.color.quickcontact_entry_sub_header_text_color);
@@ -1828,6 +1832,7 @@
         dataModel.aboutCardEntries = aboutCardEntries;
         dataModel.contactCardEntries = contactCardEntries;
         dataModel.dataItemsMap = dataItemsMap;
+        dataModel.areAllRawContactsSimAccounts = data.areAllRawContactsSimAccounts(this);
         return dataModel;
     }
 
@@ -1844,6 +1849,7 @@
         public List<List<Entry>> aboutCardEntries;
         public List<List<Entry>> contactCardEntries;
         public String customAboutCardName;
+        public boolean areAllRawContactsSimAccounts;
     }
 
     private static class MutableString {