Loading src/main/java/at/bitfire/vcard4android/CachedGroupMembership.kt +14 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,20 @@ package at.bitfire.vcard4android import android.provider.ContactsContract.RawContacts.Data /** * Represents a "cached group membership" row. Cached group memberships exist only * for one reason, which _only_ applies to the vCard4 (KIND/MEMBER) group method: * * Every group has its list of members. When a contact's group memberships are changed, * the contact is automatically set to dirty, but the group itself is not! * * So we keep a copy of all group membership rows as "cached memberships". At the * beginning of every sync, the group memberships of every contact are compared with * its cached group memberships. If they differ, the respective contact group * is set to dirty (because its memberships have changed). * * Cached group memberships must not be used for anything else that detecting dirty groups. */ object CachedGroupMembership { const val CONTENT_ITEM_TYPE = "x.davdroid/cached-group-membership" Loading src/main/java/at/bitfire/vcard4android/Contact.kt +2 −3 Original line number Diff line number Diff line Loading @@ -12,8 +12,6 @@ import at.bitfire.vcard4android.property.CustomScribes.registerCustomScribes import at.bitfire.vcard4android.property.XAbDate import ezvcard.VCardVersion import ezvcard.io.text.VCardReader import ezvcard.parameter.EmailType import ezvcard.parameter.TelephoneType import ezvcard.property.* import org.apache.commons.lang3.builder.HashCodeBuilder import org.apache.commons.lang3.builder.ReflectionToStringBuilder Loading @@ -21,6 +19,7 @@ import java.io.IOException import java.io.OutputStream import java.io.Reader import java.util.* import kotlin.collections.HashSet /** * Data class for a contact; between vCards and the Android contacts provider. Loading @@ -40,7 +39,7 @@ class Contact { var group = false /** list of UIDs of group members without urn:uuid prefix (only meaningful if [group] is true) */ val members = LinkedList<String>() val members = mutableSetOf<String>() var displayName: String? = null var prefix: String? = null Loading src/test/java/at/bitfire/vcard4android/ContactReaderTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ class ContactReaderTest { kind = Kind.group() members += Member("member1") }) assertEquals("member1", c.members.first) assertEquals("member1", c.members.first()) } @Test Loading @@ -185,7 +185,7 @@ class ContactReaderTest { kind = Kind.group() members += Member("urn:uuid:be829cf2-4244-42f8-bd4c-ab39b4b5fcd3") }) assertEquals("be829cf2-4244-42f8-bd4c-ab39b4b5fcd3", c.members.first) assertEquals("be829cf2-4244-42f8-bd4c-ab39b4b5fcd3", c.members.first()) } @Test Loading Loading
src/main/java/at/bitfire/vcard4android/CachedGroupMembership.kt +14 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,20 @@ package at.bitfire.vcard4android import android.provider.ContactsContract.RawContacts.Data /** * Represents a "cached group membership" row. Cached group memberships exist only * for one reason, which _only_ applies to the vCard4 (KIND/MEMBER) group method: * * Every group has its list of members. When a contact's group memberships are changed, * the contact is automatically set to dirty, but the group itself is not! * * So we keep a copy of all group membership rows as "cached memberships". At the * beginning of every sync, the group memberships of every contact are compared with * its cached group memberships. If they differ, the respective contact group * is set to dirty (because its memberships have changed). * * Cached group memberships must not be used for anything else that detecting dirty groups. */ object CachedGroupMembership { const val CONTENT_ITEM_TYPE = "x.davdroid/cached-group-membership" Loading
src/main/java/at/bitfire/vcard4android/Contact.kt +2 −3 Original line number Diff line number Diff line Loading @@ -12,8 +12,6 @@ import at.bitfire.vcard4android.property.CustomScribes.registerCustomScribes import at.bitfire.vcard4android.property.XAbDate import ezvcard.VCardVersion import ezvcard.io.text.VCardReader import ezvcard.parameter.EmailType import ezvcard.parameter.TelephoneType import ezvcard.property.* import org.apache.commons.lang3.builder.HashCodeBuilder import org.apache.commons.lang3.builder.ReflectionToStringBuilder Loading @@ -21,6 +19,7 @@ import java.io.IOException import java.io.OutputStream import java.io.Reader import java.util.* import kotlin.collections.HashSet /** * Data class for a contact; between vCards and the Android contacts provider. Loading @@ -40,7 +39,7 @@ class Contact { var group = false /** list of UIDs of group members without urn:uuid prefix (only meaningful if [group] is true) */ val members = LinkedList<String>() val members = mutableSetOf<String>() var displayName: String? = null var prefix: String? = null Loading
src/test/java/at/bitfire/vcard4android/ContactReaderTest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ class ContactReaderTest { kind = Kind.group() members += Member("member1") }) assertEquals("member1", c.members.first) assertEquals("member1", c.members.first()) } @Test Loading @@ -185,7 +185,7 @@ class ContactReaderTest { kind = Kind.group() members += Member("urn:uuid:be829cf2-4244-42f8-bd4c-ab39b4b5fcd3") }) assertEquals("be829cf2-4244-42f8-bd4c-ab39b4b5fcd3", c.members.first) assertEquals("be829cf2-4244-42f8-bd4c-ab39b4b5fcd3", c.members.first()) } @Test Loading