Merge "Fixes NPE with 3p entries in QuickContact"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6cbe798..9bd4621 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -313,6 +313,11 @@
          Clicking this view causes Quick Contacts to close. [CHAR LIMIT=NONE] -->
     <string name="quickcontact_transparent_view_description">Click to return to previous screen</string>
 
+    <!-- When a contact has no data, we prompt the user to add a phone number for the contact. [CHAR LIMIT=40] -->
+    <string name="quickcontact_add_phone_number">Add phone number</string>
+    <!-- When a contact has no data, we prompt the user to add an email for the contact. [CHAR LIMIT=40] -->
+    <string name="quickcontact_add_email">Add email</string>
+
     <!-- Shown as a toast when the user attempts an action (add contact, edit
          contact, etc) and no application was found that could perform that
          action. [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 157ed0b..ed13950 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -801,6 +801,7 @@
                     UserManager.DISALLOW_MODIFY_ACCOUNTS);
             if (!disallowModifyAccounts && !areContactWritableAccountsAvailable() &&
                     AccountPromptUtils.shouldShowAccountPrompt(this)) {
+                AccountPromptUtils.neverShowAccountPromptAgain(this);
                 AccountPromptUtils.launchAccountPrompt(this);
                 return;
             }
diff --git a/src/com/android/contacts/interactions/CalendarInteractionsLoader.java b/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
index 941698c..7d7a8f2 100644
--- a/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
@@ -45,9 +45,6 @@
             long numberFutureMillisecondToSearchLocalCalendar,
             long numberPastMillisecondToSearchLocalCalendar) {
         super(context);
-        for (String address: emailAddresses) {
-            Log.v(TAG, address);
-        }
         mEmailAddresses = emailAddresses;
         mMaxFutureToRetrieve = maxFutureToRetrieve;
         mMaxPastToRetrieve = maxPastToRetrieve;
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 87405fd..5b1fa10 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -480,9 +480,6 @@
         super.onCreate(savedInstanceState);
 
         getWindow().setStatusBarColor(Color.TRANSPARENT);
-        // Since we can't disable Window animations from the Launcher, we can minimize the
-        // silliness of the animation by setting the navigation bar transparent.
-        getWindow().setNavigationBarColor(Color.TRANSPARENT);
 
         processIntent(getIntent());
 
@@ -985,8 +982,10 @@
                 intent = new Intent(Intent.ACTION_VIEW).setData(builder.build());
             }
             header = getResources().getString(R.string.header_event_entry);
-            subHeader = getResources().getString(Event.getTypeResource(
-                    event.getKindTypeColumn(kind)));
+            if (event.hasKindTypeColumn(kind)) {
+                subHeader = getResources().getString(Event.getTypeResource(
+                        event.getKindTypeColumn(kind)));
+            }
             text = DateUtils.formatDate(this, dataString);
         } else if (dataItem instanceof RelationDataItem) {
             final RelationDataItem relation = (RelationDataItem) dataItem;
@@ -998,14 +997,18 @@
             }
             header = getResources().getString(R.string.header_relation_entry);
             subHeader = relation.getName();
-            text = Relation.getTypeLabel(getResources(), relation.getKindTypeColumn(kind),
-                    relation.getLabel()).toString();
+            if (relation.hasKindTypeColumn(kind)) {
+                text = Relation.getTypeLabel(getResources(), relation.getKindTypeColumn(kind),
+                        relation.getLabel()).toString();
+            }
         } else if (dataItem instanceof PhoneDataItem) {
             final PhoneDataItem phone = (PhoneDataItem) dataItem;
             if (!TextUtils.isEmpty(phone.getNumber())) {
                 header = phone.buildDataString(this, kind);
-                text = Phone.getTypeLabel(getResources(), phone.getKindTypeColumn(kind),
-                        phone.getLabel()).toString();
+                if (phone.hasKindTypeColumn(kind)) {
+                    text = Phone.getTypeLabel(getResources(), phone.getKindTypeColumn(kind),
+                            phone.getLabel()).toString();
+                }
                 icon = getResources().getDrawable(R.drawable.ic_phone_24dp);
                 if (PhoneCapabilityTester.isPhone(this)) {
                     intent = CallUtil.getCallIntent(phone.getNumber());
@@ -1018,8 +1021,10 @@
                 final Uri mailUri = Uri.fromParts(CallUtil.SCHEME_MAILTO, address, null);
                 intent = new Intent(Intent.ACTION_SENDTO, mailUri);
                 header = email.getAddress();
-                text = Email.getTypeLabel(getResources(), email.getKindTypeColumn(kind),
-                        email.getLabel()).toString();
+                if (email.hasKindTypeColumn(kind)) {
+                    text = Email.getTypeLabel(getResources(), email.getKindTypeColumn(kind),
+                            email.getLabel()).toString();
+                }
                 icon = getResources().getDrawable(R.drawable.ic_email_24dp);
             }
         } else if (dataItem instanceof StructuredPostalDataItem) {
@@ -1028,8 +1033,10 @@
             if (!TextUtils.isEmpty(postalAddress)) {
                 intent = StructuredPostalUtils.getViewPostalAddressIntent(postalAddress);
                 header = postal.getFormattedAddress();
-                text = StructuredPostal.getTypeLabel(getResources(), postal.getKindTypeColumn(kind),
-                        postal.getLabel()).toString();
+                if (postal.hasKindTypeColumn(kind)) {
+                    text = StructuredPostal.getTypeLabel(getResources(),
+                            postal.getKindTypeColumn(kind), postal.getLabel()).toString();
+                }
                 icon = getResources().getDrawable(R.drawable.ic_place_24dp);
             }
         } else if (dataItem instanceof SipAddressDataItem) {
@@ -1322,9 +1329,14 @@
                     break;
                 case LOADER_CALENDAR_ID:
                     Log.v(TAG, "LOADER_CALENDAR_ID");
+                    final String[] emailsArray = args.getStringArray(KEY_LOADER_EXTRA_EMAILS);
+                    List<String> emailsList = null;
+                    if (emailsArray != null) {
+                        emailsList = Arrays.asList(args.getStringArray(KEY_LOADER_EXTRA_EMAILS));
+                    }
                     loader = new CalendarInteractionsLoader(
                             QuickContactActivity.this,
-                            Arrays.asList(args.getStringArray(KEY_LOADER_EXTRA_EMAILS)),
+                            emailsList,
                             MAX_FUTURE_CALENDAR_RETRIEVE,
                             MAX_PAST_CALENDAR_RETRIEVE,
                             FUTURE_MILLISECOND_TO_SEARCH_LOCAL_CALENDAR,