diff --git a/build.gradle b/build.gradle index 239a87b..00ff4a0 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ android { repositories { maven { url 'https://maven.fabric.io/public' } + maven { url "http://dl.bintray.com/touchin/touchin-tools" } } dependencies { @@ -34,7 +35,7 @@ dependencies { } compileOnly 'com.facebook.fresco:fresco:1.5.0' - compileOnly 'com.bluelinelabs:logansquare:1.3.7' + compileOnly 'ru.touchin:logansquare:1.4.1' compileOnly 'com.scottyab:aes-crypto:0.0.4' diff --git a/src/main/java/ru/touchin/templates/logansquare/LoganSquareJsonFactory.java b/src/main/java/ru/touchin/templates/logansquare/LoganSquareJsonFactory.java index 6411f83..20c5b15 100644 --- a/src/main/java/ru/touchin/templates/logansquare/LoganSquareJsonFactory.java +++ b/src/main/java/ru/touchin/templates/logansquare/LoganSquareJsonFactory.java @@ -20,13 +20,15 @@ package ru.touchin.templates.logansquare; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.bluelinelabs.logansquare.ConverterUtils; import com.bluelinelabs.logansquare.LoganSquare; -import com.google.api.client.json.jackson2.JacksonFactory; +import com.fasterxml.jackson.core.JsonGenerator; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.StringWriter; import java.lang.annotation.Annotation; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -42,7 +44,7 @@ import ru.touchin.templates.retrofit.JsonResponseBodyConverter; /** * Created by Gavriil Sitnikov on 2/06/2016. - * LoganSquareConverter class to use with {@link Retrofit} to parse and generate models based on Google Jackson library {@link JacksonFactory}. + * LoganSquareConverter class to use with {@link Retrofit} to parse and generate models based on Logan Square library. */ public class LoganSquareJsonFactory extends Converter.Factory { @@ -63,6 +65,16 @@ public class LoganSquareJsonFactory extends Converter.Factory { return new LoganSquareRequestBodyConverter<>(); } + @Nullable + @Override + public Converter stringConverter(@NonNull final Type type, @NonNull final Annotation[] annotations, @NonNull final Retrofit retrofit) { + if (type instanceof Class && ((Class) type).getSuperclass() == Enum.class) { + return new LoganSquareStringEnumConverter<>(); + } else { + return super.stringConverter(type, annotations, retrofit); + } + } + public static class LoganSquareJsonResponseBodyConverter extends JsonResponseBodyConverter { @NonNull @@ -101,11 +113,29 @@ public class LoganSquareJsonFactory extends Converter.Factory { public static class LoganSquareRequestBodyConverter extends JsonRequestBodyConverter { @Override - protected void writeValueToByteArray(@NonNull final T value, @NonNull final ByteArrayOutputStream byteArrayOutputStream) - throws IOException { + protected void writeValueToByteArray(@NonNull final T value, @NonNull final ByteArrayOutputStream byteArrayOutputStream) throws IOException { LoganSquare.serialize(value, byteArrayOutputStream); } } -} \ No newline at end of file + public static class LoganSquareStringEnumConverter implements Converter { + + @Nullable + @SuppressWarnings({"unchecked", "TryFinallyCanBeTryWithResources"}) + @Override + public String convert(@NonNull final T value) throws IOException { + final StringWriter writer = new StringWriter(); + try { + final JsonGenerator generator = LoganSquare.JSON_FACTORY.createGenerator(writer); + LoganSquare.typeConverterFor((Class) value.getClass()).serialize(value, null, false, generator); + generator.close(); + return writer.toString().replaceAll("\"", ""); + } finally { + writer.close(); + } + } + + } + +}