diff options
author | frankfeng <frankfeng@google.com> | 2022-01-05 23:53:39 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-01-05 23:53:39 +0000 |
commit | 7151acd88deae8709cb212b20494a4c38ecc8263 (patch) | |
tree | daa905c2cab4f307d9342908fc85ec54ab73bab3 /examples/ex6_complex_type_conversion/src | |
parent | a18b21585728971688495dbe384c61b0332c8ce1 (diff) | |
parent | a3c4e39314251b98b0ee70da2bb63dbc52137ac7 (diff) | |
download | mobly-snippet-lib-7151acd88deae8709cb212b20494a4c38ecc8263.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into merge am: 22b92531fc am: 7902e5747e am: a3c4e39314
Original change: https://android-review.googlesource.com/c/platform/external/mobly-snippet-lib/+/1932020
Change-Id: Id8702566f1ba34c44a867e3f61f4af94b7b4006d
Diffstat (limited to 'examples/ex6_complex_type_conversion/src')
4 files changed, 135 insertions, 0 deletions
diff --git a/examples/ex6_complex_type_conversion/src/main/AndroidManifest.xml b/examples/ex6_complex_type_conversion/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c1548e7 --- /dev/null +++ b/examples/ex6_complex_type_conversion/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest + xmlns:android="http://schemas.android.com/apk/res/android" + package="com.google.android.mobly.snippet.example6"> + + <application> + <!-- Required: list of all classes with @Rpc methods. --> + <meta-data + android:name="mobly-snippets" + android:value="com.google.android.mobly.snippet.example6.ExampleSnippet" /> + <!-- Optional: a class used for converting Java objects to/from JSON. --> + <meta-data + android:name="mobly-object-converter" + android:value="com.google.android.mobly.snippet.example6.ExampleObjectConverter" /> + <meta-data + android:name="mobly-log-tag" + android:value="MoblySnippetLibExample6" /> + </application> + + <instrumentation + android:name="com.google.android.mobly.snippet.SnippetRunner" + android:targetPackage="com.google.android.mobly.snippet.example6" /> +</manifest> diff --git a/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/CustomType.java b/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/CustomType.java new file mode 100644 index 0000000..223b63e --- /dev/null +++ b/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/CustomType.java @@ -0,0 +1,21 @@ +package com.google.android.mobly.snippet.example6; + +/** + * A data class that defines a non-primitive type. + * + * This type is used to demonstrate serialization and de-serialization of complex type objects in + * Mobly Snippet Lib for Android. + */ +public class CustomType { + private String myValue; + CustomType(String value) { + myValue = value; + } + + String getMyValue() { + return myValue; + } + public void setMyValue(String newValue) { + myValue = newValue; + } +} diff --git a/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/ExampleObjectConverter.java b/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/ExampleObjectConverter.java new file mode 100644 index 0000000..eea8831 --- /dev/null +++ b/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/ExampleObjectConverter.java @@ -0,0 +1,34 @@ +package com.google.android.mobly.snippet.example6; + +import com.google.android.mobly.snippet.SnippetObjectConverter; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.reflect.Type; + + +/** + * Example showing how to supply custom object converter to Mobly Snippet Lib. + */ + +public class ExampleObjectConverter implements SnippetObjectConverter { + @Override + public JSONObject serialize(Object object) throws JSONException { + JSONObject result = new JSONObject(); + if (object instanceof CustomType) { + CustomType input = (CustomType) object; + result.put("Value", input.getMyValue()); + return result; + } + return null; + } + + @Override + public Object deserialize(JSONObject jsonObject, Type type) throws JSONException { + if (type == CustomType.class) { + return new CustomType(jsonObject.getString("Value")); + } + return null; + } +} diff --git a/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/ExampleSnippet.java b/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/ExampleSnippet.java new file mode 100644 index 0000000..3306f85 --- /dev/null +++ b/examples/ex6_complex_type_conversion/src/main/java/com/google/android/mobly/snippet/example6/ExampleSnippet.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.android.mobly.snippet.example6; + +import com.google.android.mobly.snippet.Snippet; +import com.google.android.mobly.snippet.rpc.Rpc; +import com.google.android.mobly.snippet.util.Log; + +import java.util.ArrayList; + +/** + * Example snippet showing converting complex type objects using custom logic. + * + * For complex types in Java, one can supply a custom object converter to Snippet Lib to specify how + * each complex type should be serialized/de-serialized. With this, users don't have to explicitly + * call a serializer or de-serializer in every single Rpc method, which simplifies code. + */ +public class ExampleSnippet implements Snippet { + @Rpc(description = "Pass a complex type as a snippet parameter.") + public String passComplexTypeToSnippet(CustomType input) { + Log.i("Old value is: " + input.getMyValue()); + return "The value in CustomType is: " + input.getMyValue(); + } + + @Rpc(description = "Returns a complex type from snippet.") + public CustomType returnComplexTypeFromSnippet(String value) { + return new CustomType(value); + } + + /** + * Demonstrates serialization/de-serialization of a collection of custom type objects. + */ + @Rpc(description = "Update values for multiple CustomType objects.") + public ArrayList<CustomType> updateValues(ArrayList<CustomType> objects, String newValue) { + for (CustomType obj : objects) { + obj.setMyValue(newValue); + } + return objects; + } + + @Override + public void shutdown() {} +} |