From c2d947efa173968571cbcc11376159647a9ff356 Mon Sep 17 00:00:00 2001 From: Ang Li Date: Fri, 12 Jan 2018 11:54:03 -0800 Subject: Support custom converters of non-primitive types. (#86) Now users can supply custom logic for object serialization/de-serialization through a centralized class, and snippet lib will automatically use the custom converters. Added a new example to demonstrate this feature. --- .../android/mobly/snippet/rpc/JsonBuilder.java | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java') diff --git a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java index d005530..5b0065a 100644 --- a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java +++ b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/JsonBuilder.java @@ -21,6 +21,7 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.ParcelUuid; +import com.google.android.mobly.snippet.manager.SnippetObjectConverterManager; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.URL; @@ -36,6 +37,8 @@ import org.json.JSONObject; public class JsonBuilder { + private JsonBuilder() {} + @SuppressWarnings("unchecked") public static Object build(Object data) throws JSONException { if (data == null) { @@ -69,11 +72,11 @@ public class JsonBuilder { return data; } if (data instanceof Set) { - List items = new ArrayList((Set) data); + List items = new ArrayList<>((Set) data); return buildJsonList(items); } if (data instanceof Collection) { - List items = new ArrayList((Collection) data); + List items = new ArrayList<>((Collection) data); return buildJsonList(items); } if (data instanceof List) { @@ -86,13 +89,13 @@ public class JsonBuilder { return buildJsonIntent((Intent) data); } if (data instanceof Map) { - // TODO(damonkohler): I would like to make this a checked cast if - // possible. + // TODO(damonkohler): I would like to make this a checked cast if possible. return buildJsonMap((Map) data); } if (data instanceof ParcelUuid) { return data.toString(); } + // TODO(xpconanfan): Deprecate the following default non-primitive type builders. if (data instanceof InetSocketAddress) { return buildInetSocketAddress((InetSocketAddress) data); } @@ -112,7 +115,11 @@ public class JsonBuilder { if (data instanceof Object[]) { return buildJSONArray((Object[]) data); } - + // Try with custom converter provided by user. + Object result = SnippetObjectConverterManager.getInstance().objectToJson(data); + if (result != null) { + return result; + } return data.toString(); } @@ -195,8 +202,4 @@ public class JsonBuilder { private static JSONObject buildUri(Uri uri) throws JSONException { return new JSONObject().put("Uri", build((uri != null) ? uri.toString() : "")); } - - private JsonBuilder() { - // This is a utility class. - } } -- cgit v1.2.3