|
|
/*
|
|
|
* Copyright © 2013 – 2016 Ricki Hirner (bitfire web engineering).
|
|
|
* All rights reserved. This program and the accompanying materials
|
|
|
* are made available under the terms of the GNU Public License v3.0
|
|
|
* which accompanies this distribution, and is available at
|
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
|
*/
|
|
|
|
|
|
package at.bitfire.davdroid.model;
|
|
|
|
|
|
import android.content.ContentValues;
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
|
|
|
import at.bitfire.davdroid.GsonHelper;
|
|
|
import at.bitfire.davdroid.model.ServiceDB.Collections;
|
|
|
import lombok.ToString;
|
|
|
|
|
|
@ToString
|
|
|
public class CollectionInfo implements Serializable {
|
|
|
public transient long id;
|
|
|
public transient Long serviceID;
|
|
|
|
|
|
public enum Type {
|
|
|
ADDRESS_BOOK,
|
|
|
CALENDAR
|
|
|
}
|
|
|
|
|
|
public Type type;
|
|
|
|
|
|
public transient String url; // Essentially the uuid
|
|
|
|
|
|
public boolean readOnly;
|
|
|
public String displayName, description;
|
|
|
public Integer color;
|
|
|
|
|
|
public String timeZone;
|
|
|
public Boolean supportsVEVENT;
|
|
|
public Boolean supportsVTODO;
|
|
|
|
|
|
public boolean selected;
|
|
|
|
|
|
public CollectionInfo() {
|
|
|
}
|
|
|
|
|
|
public static CollectionInfo defaultForService(String sService) {
|
|
|
Type service = Type.valueOf(sService);
|
|
|
CollectionInfo info = new CollectionInfo();
|
|
|
info.displayName = "Default";
|
|
|
info.selected = true;
|
|
|
info.readOnly = false;
|
|
|
info.type = service;
|
|
|
|
|
|
if (service.equals(Type.CALENDAR)) {
|
|
|
info.supportsVEVENT = true;
|
|
|
// info.supportsVTODO = true;
|
|
|
} else {
|
|
|
// Carddav
|
|
|
}
|
|
|
return info;
|
|
|
}
|
|
|
|
|
|
public boolean isOfTypeService(String service) {
|
|
|
return service.equals(type.toString());
|
|
|
}
|
|
|
|
|
|
public static CollectionInfo fromDB(ContentValues values) {
|
|
|
CollectionInfo info = new CollectionInfo();
|
|
|
info.id = values.getAsLong(Collections.ID);
|
|
|
info.serviceID = values.getAsLong(Collections.SERVICE_ID);
|
|
|
|
|
|
info.url = values.getAsString(Collections.URL);
|
|
|
info.readOnly = values.getAsInteger(Collections.READ_ONLY) != 0;
|
|
|
info.displayName = values.getAsString(Collections.DISPLAY_NAME);
|
|
|
info.description = values.getAsString(Collections.DESCRIPTION);
|
|
|
|
|
|
info.color = values.getAsInteger(Collections.COLOR);
|
|
|
|
|
|
info.timeZone = values.getAsString(Collections.TIME_ZONE);
|
|
|
info.supportsVEVENT = getAsBooleanOrNull(values, Collections.SUPPORTS_VEVENT);
|
|
|
info.supportsVTODO = getAsBooleanOrNull(values, Collections.SUPPORTS_VTODO);
|
|
|
|
|
|
info.selected = values.getAsInteger(Collections.SYNC) != 0;
|
|
|
return info;
|
|
|
}
|
|
|
|
|
|
public ContentValues toDB() {
|
|
|
ContentValues values = new ContentValues();
|
|
|
// Collections.SERVICE_ID is never changed
|
|
|
|
|
|
values.put(Collections.URL, url);
|
|
|
values.put(Collections.READ_ONLY, readOnly ? 1 : 0);
|
|
|
values.put(Collections.DISPLAY_NAME, displayName);
|
|
|
values.put(Collections.DESCRIPTION, description);
|
|
|
values.put(Collections.COLOR, color);
|
|
|
|
|
|
values.put(Collections.TIME_ZONE, timeZone);
|
|
|
if (supportsVEVENT != null)
|
|
|
values.put(Collections.SUPPORTS_VEVENT, supportsVEVENT ? 1 : 0);
|
|
|
if (supportsVTODO != null)
|
|
|
values.put(Collections.SUPPORTS_VTODO, supportsVTODO ? 1 : 0);
|
|
|
|
|
|
values.put(Collections.SYNC, selected ? 1 : 0);
|
|
|
return values;
|
|
|
}
|
|
|
|
|
|
public static CollectionInfo fromJson(String json) {
|
|
|
return GsonHelper.gson.fromJson(json, CollectionInfo.class);
|
|
|
}
|
|
|
|
|
|
public String toJson() {
|
|
|
return GsonHelper.gson.toJson(this, CollectionInfo.class);
|
|
|
}
|
|
|
|
|
|
private static Boolean getAsBooleanOrNull(ContentValues values, String field) {
|
|
|
Integer i = values.getAsInteger(field);
|
|
|
return (i == null) ? null : (i != 0);
|
|
|
}
|
|
|
|
|
|
}
|