From eeb5776ad1cf99d83e7eadbb2c13d7c24ac05075 Mon Sep 17 00:00:00 2001 From: desperateCoder Date: Fri, 6 Dec 2019 19:28:48 +0100 Subject: fixes #210 --- .../niedermann/nextcloud/deck/api/GsonConfig.java | 26 +++++++------- .../nextcloud/deck/api/GsonUTCDateAdapter.java | 41 ++++++++++++++++++++++ 2 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCDateAdapter.java (limited to 'app/src') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java index a3f8591df..aa949bff1 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonConfig.java @@ -5,6 +5,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; +import java.util.Date; import java.util.List; import it.niedermann.nextcloud.deck.model.Label; @@ -39,18 +40,19 @@ public class GsonConfig { return new GsonBuilder() .setDateFormat(DATE_PATTERN) .setLenient() - .registerTypeAdapter(boardList, new NextcloudArrayDeserializer<>("boards", FullBoard.class)) - .registerTypeAdapter(board, new NextcloudDeserializer<>("board", FullBoard.class)) - .registerTypeAdapter(cardList, new NextcloudArrayDeserializer<>("cards", FullCard.class)) - .registerTypeAdapter(card, new NextcloudDeserializer<>("card", FullCard.class)) - .registerTypeAdapter(labelList, new NextcloudArrayDeserializer<>("labels", Label.class)) - .registerTypeAdapter(label, new NextcloudDeserializer<>("label", Label.class)) - .registerTypeAdapter(stackList, new NextcloudArrayDeserializer<>("stacks", FullStack.class)) - .registerTypeAdapter(stack, new NextcloudDeserializer<>("stack", FullStack.class)) - .registerTypeAdapter(capabilitiesList, new NextcloudArrayDeserializer<>("capabilities", Capabilities.class)) - .registerTypeAdapter(capabilities, new NextcloudDeserializer<>("capability", Capabilities.class)) - .registerTypeAdapter(activityList, new NextcloudDeserializer<>("activities", Activity.class)) - .registerTypeAdapter(activity, new NextcloudDeserializer<>("activity", Activity.class)) + .registerTypeAdapter(Date.class, new GsonUTCDateAdapter()) + .registerTypeAdapter(boardList, new NextcloudArrayDeserializer<>("boards", FullBoard.class)) + .registerTypeAdapter(board, new NextcloudDeserializer<>("board", FullBoard.class)) + .registerTypeAdapter(cardList, new NextcloudArrayDeserializer<>("cards", FullCard.class)) + .registerTypeAdapter(card, new NextcloudDeserializer<>("card", FullCard.class)) + .registerTypeAdapter(labelList, new NextcloudArrayDeserializer<>("labels", Label.class)) + .registerTypeAdapter(label, new NextcloudDeserializer<>("label", Label.class)) + .registerTypeAdapter(stackList, new NextcloudArrayDeserializer<>("stacks", FullStack.class)) + .registerTypeAdapter(stack, new NextcloudDeserializer<>("stack", FullStack.class)) + .registerTypeAdapter(capabilitiesList, new NextcloudArrayDeserializer<>("capabilities", Capabilities.class)) + .registerTypeAdapter(capabilities, new NextcloudDeserializer<>("capability", Capabilities.class)) + .registerTypeAdapter(activityList, new NextcloudDeserializer<>("activities", Activity.class)) + .registerTypeAdapter(activity, new NextcloudDeserializer<>("activity", Activity.class)) .create(); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCDateAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCDateAdapter.java new file mode 100644 index 000000000..c4273c7a8 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/GsonUTCDateAdapter.java @@ -0,0 +1,41 @@ +package it.niedermann.nextcloud.deck.api; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +public class GsonUTCDateAdapter implements JsonSerializer, JsonDeserializer { + + private final DateFormat dateFormat; + + public GsonUTCDateAdapter() { + //This is the format I need + dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); + //This is the key line which converts the date to UTC which cannot be accessed with the default serializer + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + } + + @Override public synchronized JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) { + return new JsonPrimitive(dateFormat.format(date)); + } + + @Override public synchronized Date deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) { + try { + return dateFormat.parse(jsonElement.getAsString()); + } catch (ParseException e) { + throw new JsonParseException(e); + } + } +} \ No newline at end of file -- cgit v1.2.3