Handle cases where TYPE can be undefined, such as EAS.

When TYPE not provided, assume a default value and check
that label isn't empty when CUSTOM is used.
diff --git a/core/java/android/pim/vcard/VCardComposer.java b/core/java/android/pim/vcard/VCardComposer.java
index 6554827..3c01a9e 100644
--- a/core/java/android/pim/vcard/VCardComposer.java
+++ b/core/java/android/pim/vcard/VCardComposer.java
@@ -871,11 +871,10 @@
     }
 
     private boolean appendPostalsForDoCoMoInternal(final StringBuilder builder,
-            final List<ContentValues> contentValuesList, int preferedType) {
+            final List<ContentValues> contentValuesList, Integer preferedType) {
         for (ContentValues contentValues : contentValuesList) {
-            final int type = contentValues.getAsInteger(StructuredPostal.TYPE);
-            final String label = contentValues
-                    .getAsString(StructuredPostal.LABEL);
+            final Integer type = contentValues.getAsInteger(StructuredPostal.TYPE);
+            final String label = contentValues.getAsString(StructuredPostal.LABEL);
             if (type == preferedType) {
                 appendVCardPostalLine(builder, type, label, contentValues);
                 return true;
@@ -887,9 +886,8 @@
     private void appendPostalsForGeneric(final StringBuilder builder,
             final List<ContentValues> contentValuesList) {
         for (ContentValues contentValues : contentValuesList) {
-            final int type = contentValues.getAsInteger(StructuredPostal.TYPE);
-            final String label = contentValues
-                    .getAsString(StructuredPostal.LABEL);
+            final Integer type = contentValues.getAsInteger(StructuredPostal.TYPE);
+            final String label = contentValues.getAsString(StructuredPostal.LABEL);
             appendVCardPostalLine(builder, type, label, contentValues);
         }
     }
@@ -900,15 +898,10 @@
                 .get(Im.CONTENT_ITEM_TYPE);
         if (contentValuesList != null) {
             for (ContentValues contentValues : contentValuesList) {
-                int type = contentValues.getAsInteger(Im.PROTOCOL);
+                Integer protocol = contentValues.getAsInteger(Im.PROTOCOL);
                 String data = contentValues.getAsString(Im.DATA);
-                
-                Log.d("@@@", "Im information. protocol=\"" + type +
-                        "\", data=\"" + data + "\", protocol=\"" +
-                        contentValues.getAsString(Im.PROTOCOL) + "\", custom_protocol=\"" +
-                        contentValues.getAsString(Im.CUSTOM_PROTOCOL) + "\"");
 
-                if (type == Im.PROTOCOL_GOOGLE_TALK) {
+                if (protocol != null && protocol == Im.PROTOCOL_GOOGLE_TALK) {
                     if (VCardConfig.usesAndroidSpecificProperty(mVCardType)) {
                         appendVCardLine(builder, Constants.PROPERTY_X_GOOGLE_TALK, data);
                     }
@@ -1129,8 +1122,8 @@
         builder.append(VCARD_COL_SEPARATOR);
     }
 
-    private void appendVCardPostalLine(StringBuilder builder, int type,
-            String label, final ContentValues contentValues) {
+    private void appendVCardPostalLine(StringBuilder builder, Integer type, String label,
+            final ContentValues contentValues) {
         builder.append(VCARD_PROPERTY_ADR);
         builder.append(VCARD_ATTR_SEPARATOR);
 
@@ -1150,6 +1143,10 @@
             }
         }
 
+        if (type == null) {
+            type = StructuredPostal.TYPE_OTHER;
+        }
+
         boolean typeIsAppended = false;
         switch (type) {
         case StructuredPostal.TYPE_HOME:
@@ -1161,7 +1158,8 @@
             typeIsAppended = true;
             break;
         case StructuredPostal.TYPE_CUSTOM:
-            if (mUsesAndroidProperty && VCardUtils.containsOnlyAlphaDigitHyphen(label)){
+            if (mUsesAndroidProperty && !TextUtils.isEmpty(label)
+                        && VCardUtils.containsOnlyAlphaDigitHyphen(label)) {
                 // We're not sure whether the label is valid in the spec ("IANA-token" in the vCard 3.1
                 // is unclear...)
                 // Just for safety, we add "X-" at the beggining of each label.
@@ -1216,17 +1214,21 @@
         builder.append(VCARD_COL_SEPARATOR);
     }
 
-    private void appendVCardEmailLine(StringBuilder builder, int type,
-            String label, String data) {
+    private void appendVCardEmailLine(StringBuilder builder, Integer type, String label, String data) {
         builder.append(VCARD_PROPERTY_EMAIL);
         builder.append(VCARD_ATTR_SEPARATOR);
 
+        if (type == null) {
+            type = Email.TYPE_OTHER;
+        }
+
         switch (type) {
         case Email.TYPE_CUSTOM:
-            if (label.equals(
-                    android.provider.Contacts.ContactMethodsColumns.MOBILE_EMAIL_TYPE_NAME)) {
+            if (android.provider.Contacts.ContactMethodsColumns.MOBILE_EMAIL_TYPE_NAME
+                        .equals(label)) {
                 builder.append(Constants.ATTR_TYPE_CELL);
-            } else if (mUsesAndroidProperty && VCardUtils.containsOnlyAlphaDigitHyphen(label)){
+            } else if (mUsesAndroidProperty && !TextUtils.isEmpty(label)
+                        && VCardUtils.containsOnlyAlphaDigitHyphen(label)) {
                 builder.append("X-");
                 builder.append(label);
             } else {
@@ -1257,11 +1259,15 @@
         builder.append(VCARD_COL_SEPARATOR);
     }
 
-    private void appendVCardTelephoneLine(StringBuilder builder, int type,
-            String label, String encodedData) {
+    private void appendVCardTelephoneLine(StringBuilder builder, Integer type, String label,
+            String encodedData) {
         builder.append(VCARD_PROPERTY_TEL);
         builder.append(VCARD_ATTR_SEPARATOR);
 
+        if (type == null) {
+            type = Phone.TYPE_OTHER;
+        }
+
         switch (type) {
         case Phone.TYPE_HOME:
             appendTypeAttributes(builder, Arrays.asList(
@@ -1295,8 +1301,8 @@
             builder.append(Constants.ATTR_TYPE_VOICE);
             break;
         case Phone.TYPE_CUSTOM:
-            if (mUsesAndroidProperty) {
-                VCardUtils.containsOnlyAlphaDigitHyphen(label);
+            if (mUsesAndroidProperty && !TextUtils.isEmpty(label)
+                        && VCardUtils.containsOnlyAlphaDigitHyphen(label)) {
                 builder.append("X-" + label);
             } else {
                 // Just ignore the custom type.
@@ -1316,11 +1322,10 @@
     /**
      * Appends phone type string which may not be available in some devices.
      */
-    private void appendUncommonPhoneType(StringBuilder builder, int type) {
+    private void appendUncommonPhoneType(StringBuilder builder, Integer type) {
         if (mIsDoCoMo) {
             // The previous implementation for DoCoMo had been conservative
-            // about
-            // miscellaneous types.
+            // about miscellaneous types.
             builder.append(Constants.ATTR_TYPE_VOICE);
         } else {
             String phoneAttribute = VCardUtils.getPhoneAttributeString(type);
diff --git a/core/java/android/pim/vcard/VCardUtils.java b/core/java/android/pim/vcard/VCardUtils.java
index b7b706f..ffceade 100644
--- a/core/java/android/pim/vcard/VCardUtils.java
+++ b/core/java/android/pim/vcard/VCardUtils.java
@@ -75,7 +75,7 @@
         sPhoneTypesSetUnknownToContacts.add(Constants.ATTR_TYPE_VIDEO);
     }
     
-    public static String getPhoneAttributeString(int type) {
+    public static String getPhoneAttributeString(Integer type) {
         return sKnownPhoneTypesMap_ItoS.get(type);
     }