mirror of
https://github.com/etesync/android
synced 2024-12-26 16:38:34 +00:00
Detect VCard/4 support per sync, too
This commit is contained in:
parent
ece6be0f9d
commit
3225a4bbc1
@ -44,17 +44,14 @@ public class DavResourceFinderTest extends InstrumentationTestCase {
|
||||
List<ResourceInfo> collections = info.getAddressBooks();
|
||||
// two address books
|
||||
assertEquals(2, collections.size());
|
||||
// first one
|
||||
ResourceInfo collection = collections.get(0);
|
||||
assertEquals(TestConstants.roboHydra.resolve("/dav/addressbooks/test/default-v4.vcf/").toString(), collection.getURL());
|
||||
assertEquals(TestConstants.roboHydra.resolve("/dav/addressbooks/test/default.vcf/").toString(), collection.getURL());
|
||||
assertEquals("Default Address Book", collection.getDescription());
|
||||
assertEquals(VCardVersion.V4_0, collection.getVCardVersion());
|
||||
// second one
|
||||
collection = collections.get(1);
|
||||
assertEquals("https://my.server/absolute:uri/my-address-book/", collection.getURL());
|
||||
assertEquals("Absolute URI VCard3 Book", collection.getDescription());
|
||||
assertEquals(VCardVersion.V3_0, collection.getVCardVersion());
|
||||
|
||||
assertEquals("Absolute URI VCard Book", collection.getDescription());
|
||||
|
||||
/*** CalDAV ***/
|
||||
assertTrue(info.isCalDAV());
|
||||
collections = info.getCalendars();
|
||||
|
@ -105,19 +105,17 @@ public class WebDavResourceTest extends InstrumentationTestCase {
|
||||
assertEquals("useless-member", ab.getName());
|
||||
assertFalse(ab.isAddressBook());
|
||||
|
||||
// the second one is a VCard4-capable address book (referenced by relative URI)
|
||||
// the second one is an address book (referenced by relative URI)
|
||||
ab = dav.getMembers().get(1);
|
||||
assertEquals(TestConstants.roboHydra.resolve("/dav/addressbooks/test/default-v4.vcf/"), ab.getLocation());
|
||||
assertEquals("default-v4.vcf", ab.getName());
|
||||
assertEquals(TestConstants.roboHydra.resolve("/dav/addressbooks/test/default.vcf/"), ab.getLocation());
|
||||
assertEquals("default.vcf", ab.getName());
|
||||
assertTrue(ab.isAddressBook());
|
||||
assertEquals(VCardVersion.V4_0, ab.getVCardVersion());
|
||||
|
||||
// the third one is a (non-VCard4-capable) address book (referenced by an absolute URI)
|
||||
// the third one is an address book (referenced by an absolute URI)
|
||||
ab = dav.getMembers().get(2);
|
||||
assertEquals(new URI("https://my.server/absolute:uri/my-address-book/"), ab.getLocation());
|
||||
assertEquals("my-address-book", ab.getName());
|
||||
assertTrue(ab.isAddressBook());
|
||||
assertNull(ab.getVCardVersion());
|
||||
}
|
||||
|
||||
public void testPropfindCalendars() throws Exception {
|
||||
|
@ -132,7 +132,7 @@ exports.getBodyParts = function(conf) {
|
||||
</propstat>\
|
||||
</response>\
|
||||
<response>\
|
||||
<href>/dav/addressbooks/test/default-v4.vcf</href>\
|
||||
<href>/dav/addressbooks/test/default.vcf</href>\
|
||||
<propstat>\
|
||||
<prop xmlns:CARD="urn:ietf:params:xml:ns:carddav">\
|
||||
<resourcetype>\
|
||||
@ -140,10 +140,6 @@ exports.getBodyParts = function(conf) {
|
||||
<CARD:addressbook/>\
|
||||
</resourcetype>\
|
||||
<CARD:addressbook-description>Default Address Book</CARD:addressbook-description>\
|
||||
<CARD:supported-address-data>\
|
||||
<CARD:address-data-type content-type="text/vcard" version="3.0" />\
|
||||
<CARD:address-data-type content-type="text/vcard" version="4.0" />\
|
||||
</CARD:supported-address-data>\
|
||||
</prop>\
|
||||
<status>HTTP/1.1 200 OK</status>\
|
||||
</propstat>\
|
||||
@ -156,7 +152,7 @@ exports.getBodyParts = function(conf) {
|
||||
<collection/>\
|
||||
<CARD:addressbook/>\
|
||||
</resourcetype>\
|
||||
<CARD:addressbook-description>Absolute URI VCard3 Book</CARD:addressbook-description>\
|
||||
<CARD:addressbook-description>Absolute URI VCard Book</CARD:addressbook-description>\
|
||||
</prop>\
|
||||
<status>HTTP/1.1 200 OK</status>\
|
||||
</propstat>\
|
||||
|
@ -91,11 +91,6 @@ public class DavResourceFinder implements Closeable {
|
||||
resource.getDescription(), resource.getColor()
|
||||
);
|
||||
|
||||
VCardVersion version = resource.getVCardVersion();
|
||||
if (version == null)
|
||||
version = VCardVersion.V3_0; // VCard 3.0 MUST be supported
|
||||
info.setVCardVersion(version);
|
||||
|
||||
addressBooks.add(info);
|
||||
}
|
||||
serverInfo.setAddressBooks(addressBooks);
|
||||
|
@ -48,6 +48,7 @@ import java.io.InputStream;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@ -55,6 +56,8 @@ import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import at.bitfire.davdroid.syncadapter.AccountSettings;
|
||||
import at.bitfire.davdroid.webdav.WebDavResource;
|
||||
import ezvcard.VCardVersion;
|
||||
import ezvcard.parameter.AddressType;
|
||||
import ezvcard.parameter.EmailType;
|
||||
import ezvcard.parameter.ImppType;
|
||||
@ -75,9 +78,8 @@ public class LocalAddressBook extends LocalCollection<Contact> {
|
||||
|
||||
protected final static String COLUMN_UNKNOWN_PROPERTIES = RawContacts.SYNC3;
|
||||
|
||||
|
||||
final protected AccountSettings accountSettings;
|
||||
|
||||
|
||||
|
||||
/* database fields */
|
||||
|
||||
@ -125,9 +127,10 @@ public class LocalAddressBook extends LocalCollection<Contact> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMetaData(String displayName, String color)
|
||||
public void updateMetaData(WebDavResource resource)
|
||||
{
|
||||
// address books don't have a display name or color in Android
|
||||
final VCardVersion vCardVersion = resource.getVCardVersion();
|
||||
accountSettings.setAddressBookVCardVersion(vCardVersion != null ? vCardVersion : VCardVersion.V3_0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,6 +22,7 @@ import android.database.Cursor;
|
||||
import android.database.DatabaseUtils;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.RemoteException;
|
||||
import android.provider.CalendarContract;
|
||||
import android.provider.CalendarContract.Attendees;
|
||||
@ -60,12 +61,14 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.text.ParseException;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import at.bitfire.davdroid.DAVUtils;
|
||||
import at.bitfire.davdroid.DateUtils;
|
||||
import at.bitfire.davdroid.webdav.WebDavResource;
|
||||
import lombok.Cleanup;
|
||||
import lombok.Getter;
|
||||
|
||||
@ -193,12 +196,17 @@ public class LocalCalendar extends LocalCollection<Event> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMetaData(String displayName, String color) throws LocalStorageException {
|
||||
public void updateMetaData(WebDavResource resource) throws LocalStorageException {
|
||||
ContentValues values = new ContentValues();
|
||||
|
||||
final String displayName = resource.getDisplayName();
|
||||
if (displayName != null)
|
||||
values.put(Calendars.CALENDAR_DISPLAY_NAME, displayName);
|
||||
|
||||
final String color = resource.getColor();
|
||||
if (color != null)
|
||||
values.put(Calendars.CALENDAR_COLOR, DAVUtils.CalDAVtoARGBColor(color));
|
||||
|
||||
try {
|
||||
if (values.size() > 0)
|
||||
providerClient.update(ContentUris.withAppendedId(calendarsURI(), id), values, null, null);
|
||||
|
@ -18,6 +18,7 @@ import android.content.OperationApplicationException;
|
||||
import android.database.Cursor;
|
||||
import android.database.DatabaseUtils;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.RemoteException;
|
||||
import android.provider.CalendarContract;
|
||||
import android.util.Log;
|
||||
@ -25,9 +26,11 @@ import android.util.Log;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import at.bitfire.davdroid.webdav.WebDavResource;
|
||||
import lombok.Cleanup;
|
||||
|
||||
/**
|
||||
@ -74,9 +77,6 @@ public abstract class LocalCollection<T extends Resource> {
|
||||
abstract protected String entryColumnUID();
|
||||
|
||||
|
||||
/** ID of the collection (for instance, CalendarContract.Calendars._ID) */
|
||||
// protected long id;
|
||||
|
||||
/** SQL filter expression */
|
||||
String sqlFilter;
|
||||
|
||||
@ -95,8 +95,8 @@ public abstract class LocalCollection<T extends Resource> {
|
||||
abstract public void setCTag(String cTag) throws LocalStorageException;
|
||||
/** gets the CTag of the collection */
|
||||
abstract public String getCTag() throws LocalStorageException;
|
||||
/** update locally stored collection properties */
|
||||
abstract public void updateMetaData(String displayName, String color) throws LocalStorageException;
|
||||
/** update locally stored collection properties (e.g. display name and color) from a WebDavResource */
|
||||
abstract public void updateMetaData(WebDavResource resource) throws LocalStorageException;
|
||||
|
||||
|
||||
// content provider (= database) querying
|
||||
|
@ -18,6 +18,7 @@ import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.RemoteException;
|
||||
import android.provider.CalendarContract;
|
||||
import android.util.Log;
|
||||
|
||||
import net.fortuna.ical4j.model.Date;
|
||||
@ -35,10 +36,12 @@ import net.fortuna.ical4j.util.TimeZones;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.dmfs.provider.tasks.TaskContract;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import at.bitfire.davdroid.DAVUtils;
|
||||
import at.bitfire.davdroid.DateUtils;
|
||||
import at.bitfire.davdroid.webdav.WebDavResource;
|
||||
import lombok.Cleanup;
|
||||
import lombok.Getter;
|
||||
|
||||
@ -132,12 +135,17 @@ public class LocalTaskList extends LocalCollection<Task> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateMetaData(String displayName, String color) throws LocalStorageException {
|
||||
public void updateMetaData(WebDavResource resource) throws LocalStorageException {
|
||||
ContentValues values = new ContentValues();
|
||||
|
||||
final String displayName = resource.getDisplayName();
|
||||
if (displayName != null)
|
||||
values.put(TaskContract.TaskLists.LIST_NAME, displayName);
|
||||
|
||||
final String color = resource.getColor();
|
||||
if (color != null)
|
||||
values.put(TaskContract.TaskLists.LIST_COLOR, DAVUtils.CalDAVtoARGBColor(color));
|
||||
|
||||
try {
|
||||
if (values.size() > 0)
|
||||
providerClient.update(ContentUris.withAppendedId(taskListsURI(account), id), values, null, null);
|
||||
|
@ -59,8 +59,6 @@ public class ServerInfo implements Serializable {
|
||||
description,
|
||||
color;
|
||||
|
||||
VCardVersion vCardVersion;
|
||||
|
||||
String timezone;
|
||||
|
||||
|
||||
@ -75,7 +73,6 @@ public class ServerInfo implements Serializable {
|
||||
description = src.description;
|
||||
color = src.color;
|
||||
|
||||
vCardVersion = src.vCardVersion;
|
||||
timezone = src.timezone;
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,6 @@ public class AccountSettings {
|
||||
for (ServerInfo.ResourceInfo addressBook : serverInfo.getAddressBooks())
|
||||
if (addressBook.isEnabled()) {
|
||||
bundle.putString(KEY_ADDRESSBOOK_URL, addressBook.getURL());
|
||||
bundle.putString(KEY_ADDRESSBOOK_VCARD_VERSION, addressBook.getVCardVersion().getVersion());
|
||||
break;
|
||||
}
|
||||
return bundle;
|
||||
@ -146,6 +145,10 @@ public class AccountSettings {
|
||||
version = VCardVersion.valueOfByStr(versionStr);
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setAddressBookVCardVersion(VCardVersion version) {
|
||||
accountManager.setUserData(account, KEY_ADDRESSBOOK_VCARD_VERSION, version.getVersion());
|
||||
}
|
||||
|
||||
|
||||
// update from previous account settings
|
||||
|
@ -47,7 +47,7 @@ public class SyncManager {
|
||||
// PHASE 1: fetch collection properties
|
||||
remote.getProperties();
|
||||
final WebDavResource collectionResource = remote.getCollection();
|
||||
local.updateMetaData(collectionResource.getDisplayName(), collectionResource.getColor());
|
||||
local.updateMetaData(collectionResource);
|
||||
|
||||
// PHASE 2: push local changes to server
|
||||
int deletedRemotely = pushDeleted(),
|
||||
|
@ -58,7 +58,6 @@ public class HttpPropfind extends HttpEntityEnclosingRequestBaseHC4 {
|
||||
propfind.prop.resourcetype = new DavProp.ResourceType();
|
||||
propfind.prop.currentUserPrivilegeSet = new LinkedList<>();
|
||||
propfind.prop.addressbookDescription = new DavProp.AddressbookDescription();
|
||||
propfind.prop.supportedAddressData = new LinkedList<>();
|
||||
break;
|
||||
case CALDAV_COLLECTIONS:
|
||||
depth = 1;
|
||||
@ -75,6 +74,7 @@ public class HttpPropfind extends HttpEntityEnclosingRequestBaseHC4 {
|
||||
propfind.prop.resourcetype = new DavProp.ResourceType();
|
||||
propfind.prop.displayname = new DavProp.DisplayName();
|
||||
propfind.prop.calendarColor = new DavProp.CalendarColor();
|
||||
propfind.prop.supportedAddressData = new LinkedList<>();
|
||||
break;
|
||||
case MEMBERS_ETAG:
|
||||
depth = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user