aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonDeserializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonDeserializer.java')
-rw-r--r--src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonDeserializer.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonDeserializer.java b/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonDeserializer.java
index 4fc6b82..2f943e0 100644
--- a/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonDeserializer.java
+++ b/src/main/java/com/google/android/mobly/snippet/bundled/utils/JsonDeserializer.java
@@ -16,7 +16,14 @@
package com.google.android.mobly.snippet.bundled.utils;
+import android.annotation.TargetApi;
+import android.bluetooth.le.AdvertiseData;
+import android.bluetooth.le.AdvertiseSettings;
import android.net.wifi.WifiConfiguration;
+import android.os.Build;
+import android.os.ParcelUuid;
+import android.util.Base64;
+import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -40,4 +47,58 @@ public class JsonDeserializer {
}
return config;
}
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public static AdvertiseSettings jsonToBleAdvertiseSettings(JSONObject jsonObject)
+ throws JSONException {
+ AdvertiseSettings.Builder builder = new AdvertiseSettings.Builder();
+ if (jsonObject.has("AdvertiseMode")) {
+ int mode = MbsEnums.BLE_ADVERTISE_MODE.getInt(jsonObject.getString("AdvertiseMode"));
+ builder.setAdvertiseMode(mode);
+ }
+ // Timeout in milliseconds.
+ if (jsonObject.has("Timeout")) {
+ builder.setTimeout(jsonObject.getInt("Timeout"));
+ }
+ if (jsonObject.has("Connectable")) {
+ builder.setConnectable(jsonObject.getBoolean("Connectable"));
+ }
+ if (jsonObject.has("TxPowerLevel")) {
+ int txPowerLevel =
+ MbsEnums.BLE_ADVERTISE_TX_POWER.getInt(jsonObject.getString("TxPowerLevel"));
+ builder.setTxPowerLevel(txPowerLevel);
+ }
+ return builder.build();
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ public static AdvertiseData jsonToBleAdvertiseData(JSONObject jsonObject) throws JSONException {
+ AdvertiseData.Builder builder = new AdvertiseData.Builder();
+ if (jsonObject.has("IncludeDeviceName")) {
+ builder.setIncludeDeviceName(jsonObject.getBoolean("IncludeDeviceName"));
+ }
+ if (jsonObject.has("IncludeTxPowerLevel")) {
+ builder.setIncludeTxPowerLevel(jsonObject.getBoolean("IncludeTxPowerLevel"));
+ }
+ if (jsonObject.has("ServiceData")) {
+ JSONArray serviceData = jsonObject.getJSONArray("ServiceData");
+ for (int i = 0; i < serviceData.length(); i++) {
+ JSONObject dataSet = serviceData.getJSONObject(i);
+ ParcelUuid parcelUuid = ParcelUuid.fromString(dataSet.getString("UUID"));
+ builder.addServiceUuid(parcelUuid);
+ if (dataSet.has("Data")) {
+ byte[] data = Base64.decode(dataSet.getString("Data"), Base64.DEFAULT);
+ builder.addServiceData(parcelUuid, data);
+ }
+ }
+ }
+ if (jsonObject.has("ManufacturerData")) {
+ JSONObject manufacturerData = jsonObject.getJSONObject("ManufacturerData");
+ int manufacturerId = manufacturerData.getInt("ManufacturerId");
+ byte[] manufacturerSpecificData =
+ Base64.decode(jsonObject.getString("ManufacturerSpecificData"), Base64.DEFAULT);
+ builder.addManufacturerData(manufacturerId, manufacturerSpecificData);
+ }
+ return builder.build();
+ }
}