mirror of
https://github.com/etesync/android
synced 2024-11-26 01:48:34 +00:00
Importing calendar colors from <calendar:color xmlns="http://apple.com/ns/ical/"> element (see #31)
This commit is contained in:
parent
477a3c89f7
commit
c1f57a4470
@ -91,12 +91,20 @@ public class LocalCalendar extends LocalCollection<Event> {
|
|||||||
public static void create(Account account, ContentResolver resolver, ServerInfo.ResourceInfo info) throws RemoteException {
|
public static void create(Account account, ContentResolver resolver, ServerInfo.ResourceInfo info) throws RemoteException {
|
||||||
ContentProviderClient client = resolver.acquireContentProviderClient(CalendarContract.AUTHORITY);
|
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();
|
ContentValues values = new ContentValues();
|
||||||
values.put(Calendars.ACCOUNT_NAME, account.name);
|
values.put(Calendars.ACCOUNT_NAME, account.name);
|
||||||
values.put(Calendars.ACCOUNT_TYPE, account.type);
|
values.put(Calendars.ACCOUNT_TYPE, account.type);
|
||||||
values.put(Calendars.NAME, info.getPath());
|
values.put(Calendars.NAME, info.getPath());
|
||||||
values.put(Calendars.CALENDAR_DISPLAY_NAME, info.getTitle());
|
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.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_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);
|
values.put(Calendars.ALLOWED_ATTENDEE_TYPES, Attendees.TYPE_NONE + "," + Attendees.TYPE_REQUIRED + "," + Attendees.TYPE_OPTIONAL + "," + Attendees.TYPE_RESOURCE);
|
||||||
|
@ -26,7 +26,6 @@ import android.widget.CheckBox;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
import at.bitfire.davdroid.R;
|
import at.bitfire.davdroid.R;
|
||||||
import at.bitfire.davdroid.URIUtils;
|
import at.bitfire.davdroid.URIUtils;
|
||||||
|
|
||||||
@ -104,11 +103,11 @@ public class EnterCredentialsFragment extends Fragment implements TextWatcher {
|
|||||||
void queryServer() {
|
void queryServer() {
|
||||||
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
||||||
|
|
||||||
String host_path = URIUtils.sanitize(editBaseURL.getText().toString());
|
String host_path = editBaseURL.getText().toString();
|
||||||
|
|
||||||
Bundle args = new Bundle();
|
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_USER_NAME, editUserName.getText().toString());
|
||||||
args.putString(QueryServerDialogFragment.EXTRA_PASSWORD, editPassword.getText().toString());
|
args.putString(QueryServerDialogFragment.EXTRA_PASSWORD, editPassword.getText().toString());
|
||||||
args.putBoolean(QueryServerDialogFragment.EXTRA_AUTH_PREEMPTIVE, checkboxPreemptive.isChecked());
|
args.putBoolean(QueryServerDialogFragment.EXTRA_AUTH_PREEMPTIVE, checkboxPreemptive.isChecked());
|
||||||
|
@ -165,7 +165,7 @@ public class QueryServerDialogFragment extends DialogFragment implements LoaderC
|
|||||||
ServerInfo.ResourceInfo.Type.ADDRESS_BOOK,
|
ServerInfo.ResourceInfo.Type.ADDRESS_BOOK,
|
||||||
resource.getLocation().getPath(),
|
resource.getLocation().getPath(),
|
||||||
resource.getDisplayName(),
|
resource.getDisplayName(),
|
||||||
resource.getDescription()
|
resource.getDescription(), resource.getColor()
|
||||||
);
|
);
|
||||||
addressBooks.add(info);
|
addressBooks.add(info);
|
||||||
}
|
}
|
||||||
@ -187,7 +187,7 @@ public class QueryServerDialogFragment extends DialogFragment implements LoaderC
|
|||||||
ServerInfo.ResourceInfo.Type.CALENDAR,
|
ServerInfo.ResourceInfo.Type.CALENDAR,
|
||||||
resource.getLocation().getPath(),
|
resource.getLocation().getPath(),
|
||||||
resource.getDisplayName(),
|
resource.getDisplayName(),
|
||||||
resource.getDescription()
|
resource.getDescription(), resource.getColor()
|
||||||
);
|
);
|
||||||
calendars.add(info);
|
calendars.add(info);
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,6 @@ public class ServerInfo implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final Type type;
|
final Type type;
|
||||||
final String path, title, description;
|
final String path, title, description, color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,9 @@ public class DavProp {
|
|||||||
@Element(required=false,name="calendar-description")
|
@Element(required=false,name="calendar-description")
|
||||||
DavPropCalendarDescription calendarDescription;
|
DavPropCalendarDescription calendarDescription;
|
||||||
|
|
||||||
|
@Element(required=false,name="calendar-color")
|
||||||
|
DavPropCalendarColor calendarColor;
|
||||||
|
|
||||||
@Element(required=false)
|
@Element(required=false)
|
||||||
DavPropGetCTag getctag;
|
DavPropGetCTag getctag;
|
||||||
|
|
||||||
@ -99,6 +102,12 @@ public class DavProp {
|
|||||||
@Getter private String description;
|
@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/")
|
@Namespace(prefix="CS",reference="http://calendarserver.org/ns/")
|
||||||
public static class DavPropGetCTag {
|
public static class DavPropGetCTag {
|
||||||
@Text(required=false)
|
@Text(required=false)
|
||||||
|
@ -53,6 +53,7 @@ public class HttpPropfind extends HttpEntityEnclosingRequestBase {
|
|||||||
propfind.prop.resourcetype = new DavProp.DavPropResourceType();
|
propfind.prop.resourcetype = new DavProp.DavPropResourceType();
|
||||||
propfind.prop.addressbookDescription = new DavProp.DavPropAddressbookDescription();
|
propfind.prop.addressbookDescription = new DavProp.DavPropAddressbookDescription();
|
||||||
propfind.prop.calendarDescription = new DavProp.DavPropCalendarDescription();
|
propfind.prop.calendarDescription = new DavProp.DavPropCalendarDescription();
|
||||||
|
propfind.prop.calendarColor = new DavProp.DavPropCalendarColor();
|
||||||
break;
|
break;
|
||||||
case COLLECTION_CTAG:
|
case COLLECTION_CTAG:
|
||||||
depth = 0;
|
depth = 0;
|
||||||
|
@ -58,7 +58,7 @@ public class WebDavResource {
|
|||||||
|
|
||||||
public enum Property {
|
public enum Property {
|
||||||
CURRENT_USER_PRINCIPAL,
|
CURRENT_USER_PRINCIPAL,
|
||||||
DISPLAY_NAME, DESCRIPTION,
|
DISPLAY_NAME, DESCRIPTION, COLOR,
|
||||||
ADDRESSBOOK_HOMESET, CALENDAR_HOMESET,
|
ADDRESSBOOK_HOMESET, CALENDAR_HOMESET,
|
||||||
IS_ADDRESSBOOK, IS_CALENDAR,
|
IS_ADDRESSBOOK, IS_CALENDAR,
|
||||||
CTAG, ETAG,
|
CTAG, ETAG,
|
||||||
@ -213,6 +213,10 @@ public class WebDavResource {
|
|||||||
return properties.get(Property.DESCRIPTION);
|
return properties.get(Property.DESCRIPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getColor() {
|
||||||
|
return properties.get(Property.COLOR);
|
||||||
|
}
|
||||||
|
|
||||||
public String getAddressbookHomeSet() {
|
public String getAddressbookHomeSet() {
|
||||||
return properties.get(Property.ADDRESSBOOK_HOMESET);
|
return properties.get(Property.ADDRESSBOOK_HOMESET);
|
||||||
}
|
}
|
||||||
@ -426,6 +430,9 @@ public class WebDavResource {
|
|||||||
|
|
||||||
if (prop.calendarDescription != null)
|
if (prop.calendarDescription != null)
|
||||||
referenced.properties.put(Property.DESCRIPTION, prop.calendarDescription.getDescription());
|
referenced.properties.put(Property.DESCRIPTION, prop.calendarDescription.getDescription());
|
||||||
|
|
||||||
|
if (prop.calendarColor != null)
|
||||||
|
referenced.properties.put(Property.COLOR, prop.calendarColor.getColor());
|
||||||
} else
|
} else
|
||||||
referenced.properties.remove(Property.IS_CALENDAR);
|
referenced.properties.remove(Property.IS_CALENDAR);
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,7 @@ exports.getBodyParts = function(conf) {
|
|||||||
<collection/>\
|
<collection/>\
|
||||||
<CAL:calendar/>\
|
<CAL:calendar/>\
|
||||||
</resourcetype>\
|
</resourcetype>\
|
||||||
|
<A:calendar-color xmlns:A="http://apple.com/ns/ical/">0xFF00FF</A:calendar-color>\
|
||||||
</prop>\
|
</prop>\
|
||||||
<status>HTTP/1.1 200 OK</status>\
|
<status>HTTP/1.1 200 OK</status>\
|
||||||
</propstat>\
|
</propstat>\
|
||||||
|
@ -111,6 +111,7 @@ public class WebDavResourceTest extends InstrumentationTestCase {
|
|||||||
WebDavResource dav = new WebDavResource(davCollection, "calendars/test", true);
|
WebDavResource dav = new WebDavResource(davCollection, "calendars/test", true);
|
||||||
dav.propfind(HttpPropfind.Mode.MEMBERS_COLLECTIONS);
|
dav.propfind(HttpPropfind.Mode.MEMBERS_COLLECTIONS);
|
||||||
assertEquals(3, dav.getMembers().size());
|
assertEquals(3, dav.getMembers().size());
|
||||||
|
assertEquals("0xFF00FF", dav.getMembers().get(2).getColor());
|
||||||
for (WebDavResource member : dav.getMembers()) {
|
for (WebDavResource member : dav.getMembers()) {
|
||||||
if (member.getName().contains(".ics"))
|
if (member.getName().contains(".ics"))
|
||||||
assertTrue(member.isCalendar());
|
assertTrue(member.isCalendar());
|
||||||
|
Loading…
Reference in New Issue
Block a user