diff options
author | Daisuke Miyakawa <dmiyakawa@google.com> | 2009-09-24 14:24:52 -0700 |
---|---|---|
committer | Daisuke Miyakawa <dmiyakawa@google.com> | 2009-09-24 14:41:23 -0700 |
commit | 7497b78c561d4c7ad7626060219ec1767a5a69fa (patch) | |
tree | 3c12497e060a08c5e0210077336366877a962dcd /core/java/android/pim/vcard | |
parent | dccf22dcea384e65ae54456122b5c660e6fefe00 (diff) | |
download | frameworks_base-7497b78c561d4c7ad7626060219ec1767a5a69fa.zip frameworks_base-7497b78c561d4c7ad7626060219ec1767a5a69fa.tar.gz frameworks_base-7497b78c561d4c7ad7626060219ec1767a5a69fa.tar.bz2 |
Add appendType() utility method.
Some fix toward coll history related code is included.
Diffstat (limited to 'core/java/android/pim/vcard')
-rw-r--r-- | core/java/android/pim/vcard/VCardComposer.java | 91 |
1 files changed, 48 insertions, 43 deletions
diff --git a/core/java/android/pim/vcard/VCardComposer.java b/core/java/android/pim/vcard/VCardComposer.java index d386de5..cef971d 100644 --- a/core/java/android/pim/vcard/VCardComposer.java +++ b/core/java/android/pim/vcard/VCardComposer.java @@ -219,6 +219,9 @@ public class VCardComposer { // Property for call log entry private static final String VCARD_PROPERTY_X_TIMESTAMP = "X-IRMC-CALL-DATETIME"; + private static final String VCARD_PROPERTY_CALLTYPE_INCOMING = "INCOMING"; + private static final String VCARD_PROPERTY_CALLTYPE_OUTGOING = "OUTGOING"; + private static final String VCARD_PROPERTY_CALLTYPE_MISSED = "MISSED"; // Properties for DoCoMo vCard. private static final String VCARD_PROPERTY_X_CLASS = "X-CLASS"; @@ -505,9 +508,9 @@ public class VCardComposer { /** * Format according to RFC 2445 DATETIME type. - * The format is: ("%Y%m%dT%H%M%S"). + * The format is: ("%Y%m%dT%H%M%SZ"). */ - private final String formatDate(final long millSecs) { + private final String toRfc2455Format(final long millSecs) { Time startDate = new Time(); startDate.set(millSecs); String date = startDate.format2445(); @@ -515,38 +518,46 @@ public class VCardComposer { } /** - * Create call history time stamp field. - * - * @param type call type + * Try to append the property line for a call history time stamp field if possible. + * Do nothing if the call log type gotton from the database is invalid. */ - private String createCallHistoryTimeStampField(int type) { + private void tryAppendCallHistoryTimeStampField(final StringBuilder builder) { // Extension for call history as defined in // in the Specification for Ic Mobile Communcation - ver 1.1, // Oct 2000. This is used to send the details of the call // history - missed, incoming, outgoing along with date and time // to the requesting device (For example, transferring phone book // when connected over bluetooth) - // X-IRMC-CALL-DATETIME;MISSED:20050320T100000 - final StringBuilder builder = new StringBuilder(); - builder.append(VCARD_PROPERTY_X_TIMESTAMP); - builder.append(VCARD_ATTR_SEPARATOR); - - if (mIsV30) { - builder.append(Constants.ATTR_TYPE).append(VCARD_ATTR_EQUAL); - } - - if (type == Calls.INCOMING_TYPE) { - builder.append("INCOMING"); - } else if (type == Calls.OUTGOING_TYPE) { - builder.append("OUTGOING"); - } else if (type == Calls.MISSED_TYPE) { - builder.append("MISSED"); - } else { - Log.w(LOG_TAG, "Call log type not correct."); - return null; + // + // e.g. "X-IRMC-CALL-DATETIME;MISSED:20050320T100000Z" + final int callLogType = mCursor.getInt(CALL_TYPE_COLUMN_INDEX); + final String callLogTypeStr; + switch (callLogType) { + case Calls.INCOMING_TYPE: { + callLogTypeStr = VCARD_PROPERTY_CALLTYPE_INCOMING; + break; + } + case Calls.OUTGOING_TYPE: { + callLogTypeStr = VCARD_PROPERTY_CALLTYPE_OUTGOING; + break; + } + case Calls.MISSED_TYPE: { + callLogTypeStr = VCARD_PROPERTY_CALLTYPE_MISSED; + break; + } + default: { + Log.w(LOG_TAG, "Call log type not correct."); + return; + } } - return builder.toString(); + final long dateAsLong = mCursor.getLong(DATE_COLUMN_INDEX); + builder.append(VCARD_PROPERTY_X_TIMESTAMP); + builder.append(VCARD_ATTR_SEPARATOR); + appendType(builder, callLogTypeStr); + builder.append(VCARD_DATA_SEPARATOR); + builder.append(toRfc2455Format(dateAsLong)); + builder.append(VCARD_COL_SEPARATOR); } private String createOneCallLogEntryInternal() { @@ -561,7 +572,7 @@ public class VCardComposer { if (TextUtils.isEmpty(name)) { name = mCursor.getString(NUMBER_COLUMN_INDEX); } - boolean needCharset = !(VCardUtils.containsOnlyAscii(name)); + final boolean needCharset = !(VCardUtils.containsOnlyAscii(name)); appendVCardLine(builder, VCARD_PROPERTY_FULL_NAME, name, needCharset, false); appendVCardLine(builder, VCARD_PROPERTY_NAME, name, needCharset, false); @@ -572,17 +583,8 @@ public class VCardComposer { label = Integer.toString(type); } appendVCardTelephoneLine(builder, type, label, number); - - long date = mCursor.getLong(DATE_COLUMN_INDEX); - String dateClause = formatDate(date); - int callLogType = mCursor.getInt(CALL_TYPE_COLUMN_INDEX); - String timestampFeldString = createCallHistoryTimeStampField(callLogType); - if (timestampFeldString != null) { - appendVCardLine(builder, timestampFeldString, dateClause); - } - + tryAppendCallHistoryTimeStampField(builder); appendVCardLine(builder, VCARD_PROPERTY_END, VCARD_DATA_VCARD); - return builder.toString(); } @@ -1266,8 +1268,7 @@ public class VCardComposer { tmpBuilder.append(VCARD_ATTR_ENCODING_BASE64_V21); } tmpBuilder.append(VCARD_ATTR_SEPARATOR); - tmpBuilder.append("TYPE="); - tmpBuilder.append(type); + appendType(tmpBuilder, type); tmpBuilder.append(VCARD_DATA_SEPARATOR); tmpBuilder.append(encodedData); @@ -1544,12 +1545,16 @@ public class VCardComposer { } else { builder.append(VCARD_ATTR_SEPARATOR); } - if (mIsV30) { - builder.append(Constants.ATTR_TYPE); - builder.append('='); - } - builder.append(type); + appendType(builder, type); + } + } + + private void appendType(final StringBuilder builder, final String type) { + // Note: In vCard 3.0, Type strings also can be like this: "TYPE=HOME,PREF" + if (mIsV30) { + builder.append(Constants.ATTR_TYPE).append(VCARD_ATTR_EQUAL); } + builder.append(type); } private String encodeQuotedPrintable(String str) { |