From c1f57a447029556bd03940f9a0813d9c930aa6d9 Mon Sep 17 00:00:00 2001 From: rfc2822 Date: Sat, 9 Nov 2013 12:42:32 +0100 Subject: [PATCH] Importing calendar colors from element (see #31) --- src/at/bitfire/davdroid/resource/LocalCalendar.java | 10 +++++++++- .../davdroid/syncadapter/EnterCredentialsFragment.java | 5 ++--- .../syncadapter/QueryServerDialogFragment.java | 4 ++-- src/at/bitfire/davdroid/syncadapter/ServerInfo.java | 2 +- src/at/bitfire/davdroid/webdav/DavProp.java | 9 +++++++++ src/at/bitfire/davdroid/webdav/HttpPropfind.java | 1 + src/at/bitfire/davdroid/webdav/WebDavResource.java | 9 ++++++++- test/robohydra/plugins/dav-default/index.js | 1 + .../davdroid/webdav/test/WebDavResourceTest.java | 1 + 9 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/at/bitfire/davdroid/resource/LocalCalendar.java b/src/at/bitfire/davdroid/resource/LocalCalendar.java index 8aef809e..d80544b5 100644 --- a/src/at/bitfire/davdroid/resource/LocalCalendar.java +++ b/src/at/bitfire/davdroid/resource/LocalCalendar.java @@ -91,12 +91,20 @@ public class LocalCalendar extends LocalCollection { public static void create(Account account, ContentResolver resolver, ServerInfo.ResourceInfo info) throws RemoteException { ContentProviderClient client = resolver.acquireContentProviderClient(CalendarContract.AUTHORITY); + int color = 0xFFC3EA6E; + if (info.getColor() != null) + try { + color = Integer.decode(info.getColor()); + } catch(Exception ex) { + Log.w(TAG, "Couldn't parse calendar color " + info.getColor()); + } + ContentValues values = new ContentValues(); values.put(Calendars.ACCOUNT_NAME, account.name); values.put(Calendars.ACCOUNT_TYPE, account.type); values.put(Calendars.NAME, info.getPath()); values.put(Calendars.CALENDAR_DISPLAY_NAME, info.getTitle()); - values.put(Calendars.CALENDAR_COLOR, 0xFFC3EA6E); + values.put(Calendars.CALENDAR_COLOR, color); values.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER); values.put(Calendars.ALLOWED_AVAILABILITY, Events.AVAILABILITY_BUSY + "," + Events.AVAILABILITY_FREE + "," + Events.AVAILABILITY_TENTATIVE); values.put(Calendars.ALLOWED_ATTENDEE_TYPES, Attendees.TYPE_NONE + "," + Attendees.TYPE_REQUIRED + "," + Attendees.TYPE_OPTIONAL + "," + Attendees.TYPE_RESOURCE); diff --git a/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java b/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java index 2ec8b796..188b1f1c 100644 --- a/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java +++ b/src/at/bitfire/davdroid/syncadapter/EnterCredentialsFragment.java @@ -26,7 +26,6 @@ import android.widget.CheckBox; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; -import android.widget.Toast; import at.bitfire.davdroid.R; import at.bitfire.davdroid.URIUtils; @@ -104,11 +103,11 @@ public class EnterCredentialsFragment extends Fragment implements TextWatcher { void queryServer() { FragmentTransaction ft = getFragmentManager().beginTransaction(); - String host_path = URIUtils.sanitize(editBaseURL.getText().toString()); + String host_path = editBaseURL.getText().toString(); Bundle args = new Bundle(); - args.putString(QueryServerDialogFragment.EXTRA_BASE_URL, protocol + host_path); + args.putString(QueryServerDialogFragment.EXTRA_BASE_URL, URIUtils.sanitize(protocol + host_path)); args.putString(QueryServerDialogFragment.EXTRA_USER_NAME, editUserName.getText().toString()); args.putString(QueryServerDialogFragment.EXTRA_PASSWORD, editPassword.getText().toString()); args.putBoolean(QueryServerDialogFragment.EXTRA_AUTH_PREEMPTIVE, checkboxPreemptive.isChecked()); diff --git a/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java b/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java index 7610e7c3..28714a5d 100644 --- a/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java +++ b/src/at/bitfire/davdroid/syncadapter/QueryServerDialogFragment.java @@ -165,7 +165,7 @@ public class QueryServerDialogFragment extends DialogFragment implements LoaderC ServerInfo.ResourceInfo.Type.ADDRESS_BOOK, resource.getLocation().getPath(), resource.getDisplayName(), - resource.getDescription() + resource.getDescription(), resource.getColor() ); addressBooks.add(info); } @@ -187,7 +187,7 @@ public class QueryServerDialogFragment extends DialogFragment implements LoaderC ServerInfo.ResourceInfo.Type.CALENDAR, resource.getLocation().getPath(), resource.getDisplayName(), - resource.getDescription() + resource.getDescription(), resource.getColor() ); calendars.add(info); } diff --git a/src/at/bitfire/davdroid/syncadapter/ServerInfo.java b/src/at/bitfire/davdroid/syncadapter/ServerInfo.java index 7aa0cdbc..845dee61 100644 --- a/src/at/bitfire/davdroid/syncadapter/ServerInfo.java +++ b/src/at/bitfire/davdroid/syncadapter/ServerInfo.java @@ -38,6 +38,6 @@ public class ServerInfo implements Serializable { } final Type type; - final String path, title, description; + final String path, title, description, color; } } diff --git a/src/at/bitfire/davdroid/webdav/DavProp.java b/src/at/bitfire/davdroid/webdav/DavProp.java index 976543b1..9bb6eaee 100644 --- a/src/at/bitfire/davdroid/webdav/DavProp.java +++ b/src/at/bitfire/davdroid/webdav/DavProp.java @@ -38,6 +38,9 @@ public class DavProp { @Element(required=false,name="calendar-description") DavPropCalendarDescription calendarDescription; + @Element(required=false,name="calendar-color") + DavPropCalendarColor calendarColor; + @Element(required=false) DavPropGetCTag getctag; @@ -99,6 +102,12 @@ public class DavProp { @Getter private String description; } + @Namespace(prefix="A",reference="http://apple.com/ns/ical/") + public static class DavPropCalendarColor { + @Text(required=false) + @Getter private String color; + } + @Namespace(prefix="CS",reference="http://calendarserver.org/ns/") public static class DavPropGetCTag { @Text(required=false) diff --git a/src/at/bitfire/davdroid/webdav/HttpPropfind.java b/src/at/bitfire/davdroid/webdav/HttpPropfind.java index d742ea0b..6537507a 100644 --- a/src/at/bitfire/davdroid/webdav/HttpPropfind.java +++ b/src/at/bitfire/davdroid/webdav/HttpPropfind.java @@ -53,6 +53,7 @@ public class HttpPropfind extends HttpEntityEnclosingRequestBase { propfind.prop.resourcetype = new DavProp.DavPropResourceType(); propfind.prop.addressbookDescription = new DavProp.DavPropAddressbookDescription(); propfind.prop.calendarDescription = new DavProp.DavPropCalendarDescription(); + propfind.prop.calendarColor = new DavProp.DavPropCalendarColor(); break; case COLLECTION_CTAG: depth = 0; diff --git a/src/at/bitfire/davdroid/webdav/WebDavResource.java b/src/at/bitfire/davdroid/webdav/WebDavResource.java index b4814b9b..51a845d3 100644 --- a/src/at/bitfire/davdroid/webdav/WebDavResource.java +++ b/src/at/bitfire/davdroid/webdav/WebDavResource.java @@ -58,7 +58,7 @@ public class WebDavResource { public enum Property { CURRENT_USER_PRINCIPAL, - DISPLAY_NAME, DESCRIPTION, + DISPLAY_NAME, DESCRIPTION, COLOR, ADDRESSBOOK_HOMESET, CALENDAR_HOMESET, IS_ADDRESSBOOK, IS_CALENDAR, CTAG, ETAG, @@ -213,6 +213,10 @@ public class WebDavResource { return properties.get(Property.DESCRIPTION); } + public String getColor() { + return properties.get(Property.COLOR); + } + public String getAddressbookHomeSet() { return properties.get(Property.ADDRESSBOOK_HOMESET); } @@ -426,6 +430,9 @@ public class WebDavResource { if (prop.calendarDescription != null) referenced.properties.put(Property.DESCRIPTION, prop.calendarDescription.getDescription()); + + if (prop.calendarColor != null) + referenced.properties.put(Property.COLOR, prop.calendarColor.getColor()); } else referenced.properties.remove(Property.IS_CALENDAR); } diff --git a/test/robohydra/plugins/dav-default/index.js b/test/robohydra/plugins/dav-default/index.js index e563755e..1c9b99fb 100644 --- a/test/robohydra/plugins/dav-default/index.js +++ b/test/robohydra/plugins/dav-default/index.js @@ -116,6 +116,7 @@ exports.getBodyParts = function(conf) { \ \ \ + 0xFF00FF\ \ HTTP/1.1 200 OK\ \ diff --git a/test/src/at/bitfire/davdroid/webdav/test/WebDavResourceTest.java b/test/src/at/bitfire/davdroid/webdav/test/WebDavResourceTest.java index 7146bc86..d094e3e5 100644 --- a/test/src/at/bitfire/davdroid/webdav/test/WebDavResourceTest.java +++ b/test/src/at/bitfire/davdroid/webdav/test/WebDavResourceTest.java @@ -111,6 +111,7 @@ public class WebDavResourceTest extends InstrumentationTestCase { WebDavResource dav = new WebDavResource(davCollection, "calendars/test", true); dav.propfind(HttpPropfind.Mode.MEMBERS_COLLECTIONS); assertEquals(3, dav.getMembers().size()); + assertEquals("0xFF00FF", dav.getMembers().get(2).getColor()); for (WebDavResource member : dav.getMembers()) { if (member.getName().contains(".ics")) assertTrue(member.isCalendar());