From 09d688c00a58854d5f0eb066f752feea061e135e Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Fri, 7 Jan 2011 20:07:54 +0000 Subject: [PATCH] Displays kABOrganizationProperty as the displayName of SourceContact for companies fetched from the Address Book of Mac OS X. --- lib/native/mac/libjmacosxaddrbook.jnilib | Bin 60592 -> 65064 bytes ...drbook_macosx_MacOSXAddrBookContactQuery.h | 16 +++++ ...drbook_macosx_MacOSXAddrBookContactQuery.m | 24 +++++++ .../macosx/MacOSXAddrBookContactQuery.java | 61 +++++++++++++++++- 4 files changed, 98 insertions(+), 3 deletions(-) diff --git a/lib/native/mac/libjmacosxaddrbook.jnilib b/lib/native/mac/libjmacosxaddrbook.jnilib index bf7b3548961a2d398269d9c16fc3215aeb11072a..79c3bf2a57a6add17cc3d339b86b2a4cdd7a2c87 100755 GIT binary patch delta 7547 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 delta 6090 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 diff --git a/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.h b/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.h index c4d410e1c..695b64d64 100644 --- a/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.h +++ b/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.h @@ -119,6 +119,22 @@ JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_plugin_addrbook_macosx_Ma JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery_kABNicknameProperty (JNIEnv *, jclass); +/* + * Class: net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery + * Method: kABOrganizationProperty + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery_kABOrganizationProperty + (JNIEnv *, jclass); + +/* + * Class: net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery + * Method: kABPersonFlags + * Signature: ()J + */ +JNIEXPORT jlong JNICALL Java_net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery_kABPersonFlags + (JNIEnv *, jclass); + /* * Class: net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery * Method: kABPhoneProperty diff --git a/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.m b/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.m index 23a2e501f..f21aabe9e 100644 --- a/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.m +++ b/src/native/addrbook/macosx/net_java_sip_communicator_plugin_addrbook_macosx_MacOSXAddrBookContactQuery.m @@ -121,6 +121,8 @@ DEFINE_ABPERSON_PROPERTY_GETTER(kABMiddleNameProperty) DEFINE_ABPERSON_PROPERTY_GETTER(kABMiddleNamePhoneticProperty) DEFINE_ABPERSON_PROPERTY_GETTER(kABMSNInstantProperty) DEFINE_ABPERSON_PROPERTY_GETTER(kABNicknameProperty) +DEFINE_ABPERSON_PROPERTY_GETTER(kABOrganizationProperty) +DEFINE_ABPERSON_PROPERTY_GETTER(kABPersonFlags) DEFINE_ABPERSON_PROPERTY_GETTER(kABPhoneProperty) DEFINE_ABPERSON_PROPERTY_GETTER(kABYahooInstantProperty) @@ -166,6 +168,28 @@ MacOSXAddrBookContactQuery_idToJObject } } } + else if ([o isKindOfClass:[NSNumber class]]) + { + jclass longClass = (*jniEnv)->FindClass(jniEnv, "java/lang/Long"); + + jo = NULL; + if (longClass) + { + jmethodID longMethodID + = (*jniEnv)->GetMethodID( + jniEnv, + longClass, "", "(J)V"); + + if (longMethodID) + { + jo + = (*jniEnv)->NewObject( + jniEnv, + longClass, longMethodID, + (jlong) ([((NSNumber *) o) longValue])); + } + } + } else jo = NULL; if (jo) diff --git a/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactQuery.java b/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactQuery.java index 525ebd965..4dbd609f5 100644 --- a/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactQuery.java +++ b/src/net/java/sip/communicator/plugin/addrbook/macosx/MacOSXAddrBookContactQuery.java @@ -40,7 +40,9 @@ public class MacOSXAddrBookContactQuery kABMSNInstantProperty(), kABNicknameProperty(), kABPhoneProperty(), - kABYahooInstantProperty() + kABYahooInstantProperty(), + kABPersonFlags(), + kABOrganizationProperty() }; /** @@ -115,12 +117,36 @@ public class MacOSXAddrBookContactQuery */ private static final int kABNicknameProperty = 11; + /** + * The index of the kABOrganizationProperty ABPerson + * property in {@link #ABPERSON_PROPERTIES}. + */ + private static final int kABOrganizationProperty = 15; + + /** + * The index of the kABPersonFlags ABPerson property in + * {@link #ABPERSON_PROPERTIES}. + */ + private static final int kABPersonFlags = 14; + /** * The index of the kABPhoneProperty ABPerson property in * {@link #ABPERSON_PROPERTIES}. */ private static final int kABPhoneProperty = 12; + /** + * The flag which indicates that an ABRecord is to be displayed as + * a company. + */ + private static final long kABShowAsCompany = 1; + + /** + * The mask which extracts the kABShowAsXXX flag from the + * personFlags of an ABPerson. + */ + private static final long kABShowAsMask = 7; + /** * The index of the kABYahooInstantProperty ABPerson * property in {@link #ABPERSON_PROPERTIES}. @@ -242,11 +268,26 @@ else if (value instanceof Object[]) */ private String getDisplayName(Object[] values) { - String displayName + long personFlags + = (values[kABPersonFlags] instanceof Long) + ? ((Long) values[kABPersonFlags]).longValue() + : 0; + String displayName; + + if ((personFlags & kABShowAsMask) == kABShowAsCompany) + { + displayName + = (values[kABOrganizationProperty] instanceof String) + ? (String) values[kABOrganizationProperty] + : ""; + if (displayName.length() != 0) + return displayName; + } + + displayName = (values[kABNicknameProperty] instanceof String) ? (String) values[kABNicknameProperty] : ""; - if (displayName.length() != 0) return displayName; @@ -406,6 +447,20 @@ else if (value instanceof Object[]) */ private static native long kABNicknameProperty(); + /** + * Gets the value of the kABOrganizationProperty constant. + * + * @return the value of the kABOrganizationProperty constant + */ + private static native long kABOrganizationProperty(); + + /** + * Gets the value of the kABPersonFlags constant. + * + * @return the value of the kABPersonFlags constant + */ + private static native long kABPersonFlags(); + /** * Gets the value of the kABPhoneProperty constant. *