1 /* 2 * Copyright (C) 2016 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 package com.googlecode.android_scripting.jsonrpc; 18 19 import java.io.IOException; 20 import java.net.HttpURLConnection; 21 import java.net.InetAddress; 22 import java.net.InetSocketAddress; 23 import java.net.URL; 24 import java.security.PrivateKey; 25 import java.security.cert.CertificateEncodingException; 26 import java.security.cert.X509Certificate; 27 import java.util.ArrayList; 28 import java.util.Collection; 29 import java.util.List; 30 import java.util.Map; 31 import java.util.Map.Entry; 32 import java.util.Set; 33 34 import org.apache.commons.codec.binary.Base64Codec; 35 import org.json.JSONArray; 36 import org.json.JSONException; 37 import org.json.JSONObject; 38 39 import android.bluetooth.BluetoothDevice; 40 import android.bluetooth.BluetoothGattCharacteristic; 41 import android.bluetooth.BluetoothGattDescriptor; 42 import android.bluetooth.BluetoothGattService; 43 import android.bluetooth.le.AdvertiseSettings; 44 import android.content.ComponentName; 45 import android.content.Intent; 46 import android.graphics.Point; 47 import android.location.Address; 48 import android.location.Location; 49 import android.net.DhcpInfo; 50 import android.net.Network; 51 import android.net.NetworkInfo; 52 import android.net.Uri; 53 import android.net.wifi.RttManager.RttCapabilities; 54 import android.net.wifi.ScanResult; 55 import android.net.wifi.WifiActivityEnergyInfo; 56 import android.net.wifi.WifiChannel; 57 import android.net.wifi.WifiConfiguration; 58 import android.net.wifi.WifiEnterpriseConfig; 59 import android.net.wifi.WifiInfo; 60 import android.net.wifi.WifiScanner.ScanData; 61 import android.net.wifi.p2p.WifiP2pDevice; 62 import android.net.wifi.p2p.WifiP2pGroup; 63 import android.net.wifi.p2p.WifiP2pInfo; 64 import android.os.Bundle; 65 import android.os.ParcelUuid; 66 import android.telecom.Call; 67 import android.telecom.CallAudioState; 68 import android.telecom.PhoneAccount; 69 import android.telecom.PhoneAccountHandle; 70 import android.telecom.VideoProfile; 71 import android.telecom.VideoProfile.CameraCapabilities; 72 import android.telephony.CellIdentityCdma; 73 import android.telephony.CellIdentityGsm; 74 import android.telephony.CellIdentityLte; 75 import android.telephony.CellIdentityWcdma; 76 import android.telephony.CellInfoCdma; 77 import android.telephony.CellInfoGsm; 78 import android.telephony.CellInfoLte; 79 import android.telephony.CellInfoWcdma; 80 import android.telephony.CellLocation; 81 import android.telephony.CellSignalStrengthCdma; 82 import android.telephony.CellSignalStrengthGsm; 83 import android.telephony.CellSignalStrengthLte; 84 import android.telephony.CellSignalStrengthWcdma; 85 import android.telephony.ModemActivityInfo; 86 import android.telephony.NeighboringCellInfo; 87 import android.telephony.SmsMessage; 88 import android.telephony.SignalStrength; 89 import android.telephony.SubscriptionInfo; 90 import android.telephony.gsm.GsmCellLocation; 91 import android.telephony.VoLteServiceState; 92 import android.util.Base64; 93 import android.util.DisplayMetrics; 94 import android.util.SparseArray; 95 96 import com.googlecode.android_scripting.ConvertUtils; 97 import com.googlecode.android_scripting.Log; 98 import com.googlecode.android_scripting.event.Event; 99 //FIXME: Refactor classes, constants and conversions out of here 100 import com.googlecode.android_scripting.facade.telephony.InCallServiceImpl; 101 import com.googlecode.android_scripting.facade.telephony.TelephonyUtils; 102 import com.googlecode.android_scripting.facade.telephony.TelephonyConstants; 103 104 public class JsonBuilder { 105 106 @SuppressWarnings("unchecked") build(Object data)107 public static Object build(Object data) throws JSONException { 108 if (data == null) { 109 return JSONObject.NULL; 110 } 111 if (data instanceof Integer) { 112 return data; 113 } 114 if (data instanceof Float) { 115 return data; 116 } 117 if (data instanceof Double) { 118 return data; 119 } 120 if (data instanceof Long) { 121 return data; 122 } 123 if (data instanceof String) { 124 return data; 125 } 126 if (data instanceof Boolean) { 127 return data; 128 } 129 if (data instanceof JsonSerializable) { 130 return ((JsonSerializable)data).toJSON(); 131 } 132 if (data instanceof JSONObject) { 133 return data; 134 } 135 if (data instanceof JSONArray) { 136 return data; 137 } 138 if (data instanceof Set<?>) { 139 List<Object> items = new ArrayList<Object>((Set<?>) data); 140 return buildJsonList(items); 141 } 142 if (data instanceof Collection<?>) { 143 List<Object> items = new ArrayList<Object>((Collection<?>) data); 144 return buildJsonList(items); 145 } 146 if (data instanceof List<?>) { 147 return buildJsonList((List<?>) data); 148 } 149 if (data instanceof Address) { 150 return buildJsonAddress((Address) data); 151 } 152 if (data instanceof CallAudioState) { 153 return buildJsonAudioState((CallAudioState) data); 154 } 155 if (data instanceof Location) { 156 return buildJsonLocation((Location) data); 157 } 158 if (data instanceof Bundle) { 159 return buildJsonBundle((Bundle) data); 160 } 161 if (data instanceof Intent) { 162 return buildJsonIntent((Intent) data); 163 } 164 if (data instanceof Event) { 165 return buildJsonEvent((Event) data); 166 } 167 if (data instanceof Map<?, ?>) { 168 // TODO(damonkohler): I would like to make this a checked cast if 169 // possible. 170 return buildJsonMap((Map<String, ?>) data); 171 } 172 if (data instanceof ParcelUuid) { 173 return data.toString(); 174 } 175 if (data instanceof ScanResult) { 176 return buildJsonScanResult((ScanResult) data); 177 } 178 if (data instanceof ScanData) { 179 return buildJsonScanData((ScanData) data); 180 } 181 if (data instanceof android.bluetooth.le.ScanResult) { 182 return buildJsonBleScanResult((android.bluetooth.le.ScanResult) data); 183 } 184 if (data instanceof AdvertiseSettings) { 185 return buildJsonBleAdvertiseSettings((AdvertiseSettings) data); 186 } 187 if (data instanceof BluetoothGattService) { 188 return buildJsonBluetoothGattService((BluetoothGattService) data); 189 } 190 if (data instanceof BluetoothGattCharacteristic) { 191 return buildJsonBluetoothGattCharacteristic((BluetoothGattCharacteristic) data); 192 } 193 if (data instanceof BluetoothGattDescriptor) { 194 return buildJsonBluetoothGattDescriptor((BluetoothGattDescriptor) data); 195 } 196 if (data instanceof BluetoothDevice) { 197 return buildJsonBluetoothDevice((BluetoothDevice) data); 198 } 199 if (data instanceof CellLocation) { 200 return buildJsonCellLocation((CellLocation) data); 201 } 202 if (data instanceof WifiInfo) { 203 return buildJsonWifiInfo((WifiInfo) data); 204 } 205 if (data instanceof NeighboringCellInfo) { 206 return buildNeighboringCellInfo((NeighboringCellInfo) data); 207 } 208 if (data instanceof Network) { 209 return buildNetwork((Network) data); 210 } 211 if (data instanceof NetworkInfo) { 212 return buildNetworkInfo((NetworkInfo) data); 213 } 214 if (data instanceof HttpURLConnection) { 215 return buildHttpURLConnection((HttpURLConnection) data); 216 } 217 if (data instanceof InetSocketAddress) { 218 return buildInetSocketAddress((InetSocketAddress) data); 219 } 220 if (data instanceof InetAddress) { 221 return buildInetAddress((InetAddress) data); 222 } 223 if (data instanceof URL) { 224 return buildURL((URL) data); 225 } 226 if (data instanceof Point) { 227 return buildPoint((Point) data); 228 } 229 if (data instanceof SmsMessage) { 230 return buildSmsMessage((SmsMessage) data); 231 } 232 if (data instanceof PhoneAccount) { 233 return buildPhoneAccount((PhoneAccount) data); 234 } 235 if (data instanceof PhoneAccountHandle) { 236 return buildPhoneAccountHandle((PhoneAccountHandle) data); 237 } 238 if (data instanceof SubscriptionInfo) { 239 return buildSubscriptionInfoRecord((SubscriptionInfo) data); 240 } 241 if (data instanceof DhcpInfo) { 242 return buildDhcpInfo((DhcpInfo) data); 243 } 244 if (data instanceof DisplayMetrics) { 245 return buildDisplayMetrics((DisplayMetrics) data); 246 } 247 if (data instanceof RttCapabilities) { 248 return buildRttCapabilities((RttCapabilities) data); 249 } 250 if (data instanceof WifiActivityEnergyInfo) { 251 return buildWifiActivityEnergyInfo((WifiActivityEnergyInfo) data); 252 } 253 if (data instanceof WifiChannel) { 254 return buildWifiChannel((WifiChannel) data); 255 } 256 if (data instanceof WifiConfiguration) { 257 return buildWifiConfiguration((WifiConfiguration) data); 258 } 259 if (data instanceof WifiP2pDevice) { 260 return buildWifiP2pDevice((WifiP2pDevice) data); 261 } 262 if (data instanceof WifiP2pInfo) { 263 return buildWifiP2pInfo((WifiP2pInfo) data); 264 } 265 if (data instanceof WifiP2pGroup) { 266 return buildWifiP2pGroup((WifiP2pGroup) data); 267 } 268 if (data instanceof byte[]) { 269 JSONArray result = new JSONArray(); 270 for (byte b : (byte[]) data) { 271 result.put(b&0xFF); 272 } 273 return result; 274 } 275 if (data instanceof Object[]) { 276 return buildJSONArray((Object[]) data); 277 } 278 if (data instanceof CellInfoLte) { 279 return buildCellInfoLte((CellInfoLte) data); 280 } 281 if (data instanceof CellInfoWcdma) { 282 return buildCellInfoWcdma((CellInfoWcdma) data); 283 } 284 if (data instanceof CellInfoGsm) { 285 return buildCellInfoGsm((CellInfoGsm) data); 286 } 287 if (data instanceof CellInfoCdma) { 288 return buildCellInfoCdma((CellInfoCdma) data); 289 } 290 if (data instanceof Call) { 291 return buildCall((Call) data); 292 } 293 if (data instanceof Call.Details) { 294 return buildCallDetails((Call.Details) data); 295 } 296 if (data instanceof InCallServiceImpl.CallEvent<?>) { 297 return buildCallEvent((InCallServiceImpl.CallEvent<?>) data); 298 } 299 if (data instanceof VideoProfile) { 300 return buildVideoProfile((VideoProfile) data); 301 } 302 if (data instanceof CameraCapabilities) { 303 return buildCameraCapabilities((CameraCapabilities) data); 304 } 305 if (data instanceof VoLteServiceState) { 306 return buildVoLteServiceStateEvent((VoLteServiceState) data); 307 } 308 if (data instanceof ModemActivityInfo) { 309 return buildModemActivityInfo((ModemActivityInfo) data); 310 } 311 if (data instanceof SignalStrength) { 312 return buildSignalStrength((SignalStrength) data); 313 } 314 315 316 return data.toString(); 317 // throw new JSONException("Failed to build JSON result. " + 318 // data.getClass().getName()); 319 } 320 buildJsonAudioState(CallAudioState data)321 private static JSONObject buildJsonAudioState(CallAudioState data) 322 throws JSONException { 323 JSONObject state = new JSONObject(); 324 state.put("isMuted", data.isMuted()); 325 state.put("AudioRoute", InCallServiceImpl.getAudioRouteString(data.getRoute())); 326 return state; 327 } 328 buildDisplayMetrics(DisplayMetrics data)329 private static Object buildDisplayMetrics(DisplayMetrics data) 330 throws JSONException { 331 JSONObject dm = new JSONObject(); 332 dm.put("widthPixels", data.widthPixels); 333 dm.put("heightPixels", data.heightPixels); 334 dm.put("noncompatHeightPixels", data.noncompatHeightPixels); 335 dm.put("noncompatWidthPixels", data.noncompatWidthPixels); 336 return dm; 337 } 338 buildInetAddress(InetAddress data)339 private static Object buildInetAddress(InetAddress data) { 340 JSONArray address = new JSONArray(); 341 address.put(data.getHostName()); 342 address.put(data.getHostAddress()); 343 return address; 344 } 345 buildInetSocketAddress(InetSocketAddress data)346 private static Object buildInetSocketAddress(InetSocketAddress data) { 347 JSONArray address = new JSONArray(); 348 address.put(data.getHostName()); 349 address.put(data.getPort()); 350 return address; 351 } 352 buildJsonAddress(Address address)353 private static JSONObject buildJsonAddress(Address address) 354 throws JSONException { 355 JSONObject result = new JSONObject(); 356 result.put("admin_area", address.getAdminArea()); 357 result.put("country_code", address.getCountryCode()); 358 result.put("country_name", address.getCountryName()); 359 result.put("feature_name", address.getFeatureName()); 360 result.put("phone", address.getPhone()); 361 result.put("locality", address.getLocality()); 362 result.put("postal_code", address.getPostalCode()); 363 result.put("sub_admin_area", address.getSubAdminArea()); 364 result.put("thoroughfare", address.getThoroughfare()); 365 result.put("url", address.getUrl()); 366 return result; 367 } 368 buildJSONArray(Object[] data)369 private static JSONArray buildJSONArray(Object[] data) throws JSONException { 370 JSONArray result = new JSONArray(); 371 for (Object o : data) { 372 result.put(build(o)); 373 } 374 return result; 375 } 376 buildJsonBleAdvertiseSettings( AdvertiseSettings advertiseSettings)377 private static JSONObject buildJsonBleAdvertiseSettings( 378 AdvertiseSettings advertiseSettings) throws JSONException { 379 JSONObject result = new JSONObject(); 380 result.put("mode", advertiseSettings.getMode()); 381 result.put("txPowerLevel", advertiseSettings.getTxPowerLevel()); 382 result.put("isConnectable", advertiseSettings.isConnectable()); 383 return result; 384 } 385 buildJsonBleScanResult( android.bluetooth.le.ScanResult scanResult)386 private static JSONObject buildJsonBleScanResult( 387 android.bluetooth.le.ScanResult scanResult) throws JSONException { 388 JSONObject result = new JSONObject(); 389 result.put("rssi", scanResult.getRssi()); 390 result.put("timestampNanos", scanResult.getTimestampNanos()); 391 result.put("deviceName", scanResult.getScanRecord().getDeviceName()); 392 result.put("txPowerLevel", scanResult.getScanRecord().getTxPowerLevel()); 393 result.put("advertiseFlags", scanResult.getScanRecord() 394 .getAdvertiseFlags()); 395 ArrayList<String> manufacturerDataList = new ArrayList<String>(); 396 ArrayList<Integer> idList = new ArrayList<Integer>(); 397 if (scanResult.getScanRecord().getManufacturerSpecificData() != null) { 398 SparseArray<byte[]> manufacturerSpecificData = scanResult 399 .getScanRecord().getManufacturerSpecificData(); 400 for (int i = 0; i < manufacturerSpecificData.size(); i++) { 401 manufacturerDataList.add(ConvertUtils 402 .convertByteArrayToString(manufacturerSpecificData 403 .valueAt(i))); 404 idList.add(manufacturerSpecificData.keyAt(i)); 405 } 406 } 407 result.put("manufacturerSpecificDataList", manufacturerDataList); 408 result.put("manufacturereIdList", idList); 409 ArrayList<String> serviceUuidList = new ArrayList<String>(); 410 ArrayList<String> serviceDataList = new ArrayList<String>(); 411 if (scanResult.getScanRecord().getServiceData() != null) { 412 Map<ParcelUuid, byte[]> serviceDataMap = scanResult.getScanRecord() 413 .getServiceData(); 414 for (ParcelUuid serviceUuid : serviceDataMap.keySet()) { 415 serviceUuidList.add(serviceUuid.toString()); 416 serviceDataList.add(ConvertUtils 417 .convertByteArrayToString(serviceDataMap 418 .get(serviceUuid))); 419 } 420 } 421 result.put("serviceUuidList", serviceUuidList); 422 result.put("serviceDataList", serviceDataList); 423 List<ParcelUuid> serviceUuids = scanResult.getScanRecord() 424 .getServiceUuids(); 425 String serviceUuidsString = ""; 426 if (serviceUuids != null && serviceUuids.size() > 0) { 427 for (ParcelUuid uuid : serviceUuids) { 428 serviceUuidsString = serviceUuidsString + "," + uuid; 429 } 430 } 431 result.put("serviceUuids", serviceUuidsString); 432 result.put("scanRecord", 433 build(ConvertUtils.convertByteArrayToString(scanResult 434 .getScanRecord().getBytes()))); 435 result.put("deviceInfo", build(scanResult.getDevice())); 436 return result; 437 } 438 buildJsonBluetoothDevice(BluetoothDevice data)439 private static JSONObject buildJsonBluetoothDevice(BluetoothDevice data) 440 throws JSONException { 441 JSONObject deviceInfo = new JSONObject(); 442 deviceInfo.put("address", data.getAddress()); 443 deviceInfo.put("state", data.getBondState()); 444 deviceInfo.put("name", data.getName()); 445 deviceInfo.put("type", data.getType()); 446 return deviceInfo; 447 } 448 buildJsonBluetoothGattCharacteristic( BluetoothGattCharacteristic data)449 private static Object buildJsonBluetoothGattCharacteristic( 450 BluetoothGattCharacteristic data) throws JSONException { 451 JSONObject result = new JSONObject(); 452 result.put("instanceId", data.getInstanceId()); 453 result.put("permissions", data.getPermissions()); 454 result.put("properties", data.getProperties()); 455 result.put("writeType", data.getWriteType()); 456 result.put("descriptorsList", build(data.getDescriptors())); 457 result.put("uuid", data.getUuid().toString()); 458 result.put("value", build(data.getValue())); 459 460 return result; 461 } 462 buildJsonBluetoothGattDescriptor( BluetoothGattDescriptor data)463 private static Object buildJsonBluetoothGattDescriptor( 464 BluetoothGattDescriptor data) throws JSONException { 465 JSONObject result = new JSONObject(); 466 result.put("instanceId", data.getInstanceId()); 467 result.put("permissions", data.getPermissions()); 468 result.put("characteristic", data.getCharacteristic()); 469 result.put("uuid", data.getUuid().toString()); 470 result.put("value", build(data.getValue())); 471 return result; 472 } 473 buildJsonBluetoothGattService( BluetoothGattService data)474 private static Object buildJsonBluetoothGattService( 475 BluetoothGattService data) throws JSONException { 476 JSONObject result = new JSONObject(); 477 result.put("instanceId", data.getInstanceId()); 478 result.put("type", data.getType()); 479 result.put("gattCharacteristicList", build(data.getCharacteristics())); 480 result.put("includedServices", build(data.getIncludedServices())); 481 result.put("uuid", data.getUuid().toString()); 482 return result; 483 } 484 buildJsonBundle(Bundle bundle)485 private static JSONObject buildJsonBundle(Bundle bundle) 486 throws JSONException { 487 JSONObject result = new JSONObject(); 488 for (String key : bundle.keySet()) { 489 result.put(key, build(bundle.get(key))); 490 } 491 return result; 492 } 493 buildJsonCellLocation(CellLocation cellLocation)494 private static JSONObject buildJsonCellLocation(CellLocation cellLocation) 495 throws JSONException { 496 JSONObject result = new JSONObject(); 497 if (cellLocation instanceof GsmCellLocation) { 498 GsmCellLocation location = (GsmCellLocation) cellLocation; 499 result.put("lac", location.getLac()); 500 result.put("cid", location.getCid()); 501 } 502 // TODO(damonkohler): Add support for CdmaCellLocation. Not supported 503 // until API level 5. 504 return result; 505 } 506 buildDhcpInfo(DhcpInfo data)507 private static JSONObject buildDhcpInfo(DhcpInfo data) throws JSONException { 508 JSONObject result = new JSONObject(); 509 result.put("ipAddress", data.ipAddress); 510 result.put("dns1", data.dns1); 511 result.put("dns2", data.dns2); 512 result.put("gateway", data.gateway); 513 result.put("serverAddress", data.serverAddress); 514 result.put("leaseDuration", data.leaseDuration); 515 return result; 516 } 517 buildJsonEvent(Event event)518 private static JSONObject buildJsonEvent(Event event) throws JSONException { 519 JSONObject result = new JSONObject(); 520 result.put("name", event.getName()); 521 result.put("data", build(event.getData())); 522 result.put("time", event.getCreationTime()); 523 return result; 524 } 525 buildJsonIntent(Intent data)526 private static JSONObject buildJsonIntent(Intent data) throws JSONException { 527 JSONObject result = new JSONObject(); 528 result.put("data", data.getDataString()); 529 result.put("type", data.getType()); 530 result.put("extras", build(data.getExtras())); 531 result.put("categories", build(data.getCategories())); 532 result.put("action", data.getAction()); 533 ComponentName component = data.getComponent(); 534 if (component != null) { 535 result.put("packagename", component.getPackageName()); 536 result.put("classname", component.getClassName()); 537 } 538 result.put("flags", data.getFlags()); 539 return result; 540 } 541 buildJsonList(final List<T> list)542 private static <T> JSONArray buildJsonList(final List<T> list) 543 throws JSONException { 544 JSONArray result = new JSONArray(); 545 for (T item : list) { 546 result.put(build(item)); 547 } 548 return result; 549 } 550 buildJsonLocation(Location location)551 private static JSONObject buildJsonLocation(Location location) 552 throws JSONException { 553 JSONObject result = new JSONObject(); 554 result.put("altitude", location.getAltitude()); 555 result.put("latitude", location.getLatitude()); 556 result.put("longitude", location.getLongitude()); 557 result.put("time", location.getTime()); 558 result.put("accuracy", location.getAccuracy()); 559 result.put("speed", location.getSpeed()); 560 result.put("provider", location.getProvider()); 561 result.put("bearing", location.getBearing()); 562 return result; 563 } 564 buildJsonMap(Map<String, ?> map)565 private static JSONObject buildJsonMap(Map<String, ?> map) 566 throws JSONException { 567 JSONObject result = new JSONObject(); 568 for (Entry<String, ?> entry : map.entrySet()) { 569 String key = entry.getKey(); 570 if (key == null) { 571 key = ""; 572 } 573 result.put(key, build(entry.getValue())); 574 } 575 return result; 576 } 577 buildJsonScanResult(ScanResult scanResult)578 private static JSONObject buildJsonScanResult(ScanResult scanResult) 579 throws JSONException { 580 JSONObject result = new JSONObject(); 581 result.put("BSSID", scanResult.BSSID); 582 result.put("SSID", scanResult.SSID); 583 result.put("frequency", scanResult.frequency); 584 result.put("level", scanResult.level); 585 result.put("capabilities", scanResult.capabilities); 586 result.put("timestamp", scanResult.timestamp); 587 result.put("blackListTimestamp", scanResult.blackListTimestamp); 588 result.put("centerFreq0", scanResult.centerFreq0); 589 result.put("centerFreq1", scanResult.centerFreq1); 590 result.put("channelWidth", scanResult.channelWidth); 591 result.put("distanceCm", scanResult.distanceCm); 592 result.put("distanceSdCm", scanResult.distanceSdCm); 593 result.put("is80211McRTTResponder", scanResult.is80211mcResponder()); 594 result.put("isAutoJoinCandidate", scanResult.isAutoJoinCandidate); 595 result.put("numConnection", scanResult.numConnection); 596 result.put("passpointNetwork", scanResult.isPasspointNetwork()); 597 result.put("numIpConfigFailures", scanResult.numIpConfigFailures); 598 result.put("numUsage", scanResult.numUsage); 599 result.put("seen", scanResult.seen); 600 result.put("untrusted", scanResult.untrusted); 601 result.put("operatorFriendlyName", scanResult.operatorFriendlyName); 602 result.put("venueName", scanResult.venueName); 603 if (scanResult.informationElements != null) { 604 JSONArray infoEles = new JSONArray(); 605 for (ScanResult.InformationElement ie : scanResult.informationElements) { 606 JSONObject infoEle = new JSONObject(); 607 infoEle.put("id", ie.id); 608 infoEle.put("bytes", Base64Codec.encodeBase64(ie.bytes).toString()); 609 infoEles.put(infoEle); 610 } 611 result.put("InfomationElements", infoEles); 612 } else { 613 result.put("InfomationElements", null); 614 } 615 return result; 616 } 617 buildJsonScanData(ScanData scanData)618 private static JSONObject buildJsonScanData(ScanData scanData) 619 throws JSONException { 620 JSONObject result = new JSONObject(); 621 result.put("Id", scanData.getId()); 622 result.put("Flags", scanData.getFlags()); 623 JSONArray scanResults = new JSONArray(); 624 for (ScanResult sr : scanData.getResults()) { 625 scanResults.put(buildJsonScanResult(sr)); 626 } 627 result.put("ScanResults", scanResults); 628 return result; 629 } 630 buildJsonWifiInfo(WifiInfo data)631 private static JSONObject buildJsonWifiInfo(WifiInfo data) 632 throws JSONException { 633 JSONObject result = new JSONObject(); 634 result.put("hidden_ssid", data.getHiddenSSID()); 635 result.put("ip_address", data.getIpAddress()); 636 result.put("link_speed", data.getLinkSpeed()); 637 result.put("network_id", data.getNetworkId()); 638 result.put("rssi", data.getRssi()); 639 result.put("BSSID", data.getBSSID()); 640 result.put("mac_address", data.getMacAddress()); 641 // Trim the double quotes if exist 642 String ssid = data.getSSID(); 643 if (ssid.charAt(0) == '"' 644 && ssid.charAt(ssid.length() - 1) == '"') { 645 result.put("SSID", ssid.substring(1, ssid.length() - 1)); 646 } else { 647 result.put("SSID", ssid); 648 } 649 String supplicantState = ""; 650 switch (data.getSupplicantState()) { 651 case ASSOCIATED: 652 supplicantState = "associated"; 653 break; 654 case ASSOCIATING: 655 supplicantState = "associating"; 656 break; 657 case COMPLETED: 658 supplicantState = "completed"; 659 break; 660 case DISCONNECTED: 661 supplicantState = "disconnected"; 662 break; 663 case DORMANT: 664 supplicantState = "dormant"; 665 break; 666 case FOUR_WAY_HANDSHAKE: 667 supplicantState = "four_way_handshake"; 668 break; 669 case GROUP_HANDSHAKE: 670 supplicantState = "group_handshake"; 671 break; 672 case INACTIVE: 673 supplicantState = "inactive"; 674 break; 675 case INVALID: 676 supplicantState = "invalid"; 677 break; 678 case SCANNING: 679 supplicantState = "scanning"; 680 break; 681 case UNINITIALIZED: 682 supplicantState = "uninitialized"; 683 break; 684 default: 685 supplicantState = null; 686 } 687 result.put("supplicant_state", build(supplicantState)); 688 result.put("is_5ghz", data.is5GHz()); 689 result.put("is_24ghz", data.is24GHz()); 690 return result; 691 } 692 buildNeighboringCellInfo(NeighboringCellInfo data)693 private static JSONObject buildNeighboringCellInfo(NeighboringCellInfo data) 694 throws JSONException { 695 JSONObject result = new JSONObject(); 696 result.put("cid", data.getCid()); 697 result.put("rssi", data.getRssi()); 698 result.put("lac", data.getLac()); 699 result.put("psc", data.getPsc()); 700 String networkType = 701 TelephonyUtils.getNetworkTypeString(data.getNetworkType()); 702 result.put("network_type", build(networkType)); 703 return result; 704 } 705 buildCellInfoLte(CellInfoLte data)706 private static JSONObject buildCellInfoLte(CellInfoLte data) 707 throws JSONException { 708 JSONObject result = new JSONObject(); 709 result.put("rat", "lte"); 710 result.put("registered", data.isRegistered()); 711 CellIdentityLte cellidentity = 712 ((CellInfoLte) data).getCellIdentity(); 713 CellSignalStrengthLte signalstrength = 714 ((CellInfoLte) data).getCellSignalStrength(); 715 result.put("mcc", cellidentity.getMcc()); 716 result.put("mnc", cellidentity.getMnc()); 717 result.put("cid", cellidentity.getCi()); 718 result.put("pcid", cellidentity.getPci()); 719 result.put("tac", cellidentity.getTac()); 720 result.put("rsrp", signalstrength.getDbm()); 721 result.put("asulevel", signalstrength.getAsuLevel()); 722 result.put("timing_advance", signalstrength.getTimingAdvance()); 723 return result; 724 } 725 buildCellInfoGsm(CellInfoGsm data)726 private static JSONObject buildCellInfoGsm(CellInfoGsm data) 727 throws JSONException { 728 JSONObject result = new JSONObject(); 729 result.put("rat", "gsm"); 730 result.put("registered", data.isRegistered()); 731 CellIdentityGsm cellidentity = 732 ((CellInfoGsm) data).getCellIdentity(); 733 CellSignalStrengthGsm signalstrength = 734 ((CellInfoGsm) data).getCellSignalStrength(); 735 result.put("mcc", cellidentity.getMcc()); 736 result.put("mnc", cellidentity.getMnc()); 737 result.put("cid", cellidentity.getCid()); 738 result.put("lac", cellidentity.getLac()); 739 result.put("signal_strength", signalstrength.getDbm()); 740 result.put("asulevel", signalstrength.getAsuLevel()); 741 return result; 742 } 743 buildCellInfoWcdma(CellInfoWcdma data)744 private static JSONObject buildCellInfoWcdma(CellInfoWcdma data) 745 throws JSONException { 746 JSONObject result = new JSONObject(); 747 result.put("rat", "wcdma"); 748 result.put("registered", data.isRegistered()); 749 CellIdentityWcdma cellidentity = 750 ((CellInfoWcdma) data).getCellIdentity(); 751 CellSignalStrengthWcdma signalstrength = 752 ((CellInfoWcdma) data).getCellSignalStrength(); 753 result.put("mcc", cellidentity.getMcc()); 754 result.put("mnc", cellidentity.getMnc()); 755 result.put("cid", cellidentity.getCid()); 756 result.put("lac", cellidentity.getLac()); 757 result.put("psc", cellidentity.getPsc()); 758 result.put("signal_strength", signalstrength.getDbm()); 759 result.put("asulevel", signalstrength.getAsuLevel()); 760 return result; 761 } 762 buildCellInfoCdma(CellInfoCdma data)763 private static JSONObject buildCellInfoCdma(CellInfoCdma data) 764 throws JSONException { 765 JSONObject result = new JSONObject(); 766 result.put("rat", "cdma"); 767 result.put("registered", data.isRegistered()); 768 CellIdentityCdma cellidentity = 769 ((CellInfoCdma) data).getCellIdentity(); 770 CellSignalStrengthCdma signalstrength = 771 ((CellInfoCdma) data).getCellSignalStrength(); 772 result.put("network_id", cellidentity.getNetworkId()); 773 result.put("system_id", cellidentity.getSystemId()); 774 result.put("basestation_id", cellidentity.getBasestationId()); 775 result.put("longitude", cellidentity.getLongitude()); 776 result.put("latitude", cellidentity.getLatitude()); 777 result.put("cdma_dbm", signalstrength.getCdmaDbm()); 778 result.put("cdma_ecio", signalstrength.getCdmaEcio()); 779 result.put("evdo_dbm", signalstrength.getEvdoDbm()); 780 result.put("evdo_ecio", signalstrength.getEvdoEcio()); 781 result.put("evdo_snr", signalstrength.getEvdoSnr()); 782 return result; 783 } 784 buildHttpURLConnection(HttpURLConnection data)785 private static Object buildHttpURLConnection(HttpURLConnection data) 786 throws JSONException { 787 JSONObject con = new JSONObject(); 788 try { 789 con.put("ResponseCode", data.getResponseCode()); 790 con.put("ResponseMessage", data.getResponseMessage()); 791 } catch (IOException e) { 792 e.printStackTrace(); 793 return con; 794 } 795 con.put("ContentLength", data.getContentLength()); 796 con.put("ContentEncoding", data.getContentEncoding()); 797 con.put("ContentType", data.getContentType()); 798 con.put("Date", data.getDate()); 799 con.put("ReadTimeout", data.getReadTimeout()); 800 con.put("HeaderFields", buildJsonMap(data.getHeaderFields())); 801 con.put("URL", buildURL(data.getURL())); 802 return con; 803 } 804 buildNetwork(Network data)805 private static Object buildNetwork(Network data) throws JSONException { 806 JSONObject nw = new JSONObject(); 807 nw.put("netId", data.netId); 808 return nw; 809 } 810 buildNetworkInfo(NetworkInfo data)811 private static Object buildNetworkInfo(NetworkInfo data) 812 throws JSONException { 813 JSONObject info = new JSONObject(); 814 info.put("isAvailable", data.isAvailable()); 815 info.put("isConnected", data.isConnected()); 816 info.put("isFailover", data.isFailover()); 817 info.put("isRoaming", data.isRoaming()); 818 info.put("ExtraInfo", data.getExtraInfo()); 819 info.put("FailedReason", data.getReason()); 820 info.put("TypeName", data.getTypeName()); 821 info.put("SubtypeName", data.getSubtypeName()); 822 info.put("State", data.getState().name().toString()); 823 return info; 824 } 825 buildURL(URL data)826 private static Object buildURL(URL data) throws JSONException { 827 JSONObject url = new JSONObject(); 828 url.put("Authority", data.getAuthority()); 829 url.put("Host", data.getHost()); 830 url.put("Path", data.getPath()); 831 url.put("Port", data.getPort()); 832 url.put("Protocol", data.getProtocol()); 833 return url; 834 } 835 buildPhoneAccount(PhoneAccount data)836 private static JSONObject buildPhoneAccount(PhoneAccount data) 837 throws JSONException { 838 JSONObject acct = new JSONObject(); 839 acct.put("Address", data.getAddress().toSafeString()); 840 acct.put("SubscriptionAddress", data.getSubscriptionAddress() 841 .toSafeString()); 842 acct.put("Label", ((data.getLabel() != null) ? data.getLabel().toString() : "")); 843 acct.put("ShortDescription", ((data.getShortDescription() != null) ? data 844 .getShortDescription().toString() : "")); 845 return acct; 846 } 847 buildPhoneAccountHandle(PhoneAccountHandle data)848 private static Object buildPhoneAccountHandle(PhoneAccountHandle data) 849 throws JSONException { 850 JSONObject msg = new JSONObject(); 851 msg.put("id", data.getId()); 852 msg.put("ComponentName", data.getComponentName().flattenToString()); 853 return msg; 854 } 855 buildSubscriptionInfoRecord(SubscriptionInfo data)856 private static Object buildSubscriptionInfoRecord(SubscriptionInfo data) 857 throws JSONException { 858 JSONObject msg = new JSONObject(); 859 msg.put("subscriptionId", data.getSubscriptionId()); 860 msg.put("iccId", data.getIccId()); 861 msg.put("simSlotIndex", data.getSimSlotIndex()); 862 msg.put("displayName", data.getDisplayName()); 863 msg.put("nameSource", data.getNameSource()); 864 msg.put("iconTint", data.getIconTint()); 865 msg.put("number", data.getNumber()); 866 msg.put("dataRoaming", data.getDataRoaming()); 867 msg.put("mcc", data.getMcc()); 868 msg.put("mnc", data.getMnc()); 869 return msg; 870 } 871 buildPoint(Point data)872 private static Object buildPoint(Point data) throws JSONException { 873 JSONObject point = new JSONObject(); 874 point.put("x", data.x); 875 point.put("y", data.y); 876 return point; 877 } 878 buildRttCapabilities(RttCapabilities data)879 private static Object buildRttCapabilities(RttCapabilities data) 880 throws JSONException { 881 JSONObject cap = new JSONObject(); 882 cap.put("bwSupported", data.bwSupported); 883 cap.put("lciSupported", data.lciSupported); 884 cap.put("lcrSupported", data.lcrSupported); 885 cap.put("oneSidedRttSupported", data.oneSidedRttSupported); 886 cap.put("preambleSupported", data.preambleSupported); 887 cap.put("twoSided11McRttSupported", data.twoSided11McRttSupported); 888 return cap; 889 } 890 buildSmsMessage(SmsMessage data)891 private static Object buildSmsMessage(SmsMessage data) throws JSONException { 892 JSONObject msg = new JSONObject(); 893 msg.put("originatingAddress", data.getOriginatingAddress()); 894 msg.put("messageBody", data.getMessageBody()); 895 return msg; 896 } 897 buildWifiActivityEnergyInfo( WifiActivityEnergyInfo data)898 private static JSONObject buildWifiActivityEnergyInfo( 899 WifiActivityEnergyInfo data) throws JSONException { 900 JSONObject result = new JSONObject(); 901 result.put("ControllerEnergyUsed", data.getControllerEnergyUsed()); 902 result.put("ControllerIdleTimeMillis", 903 data.getControllerIdleTimeMillis()); 904 result.put("ControllerRxTimeMillis", data.getControllerRxTimeMillis()); 905 result.put("ControllerTxTimeMillis", data.getControllerTxTimeMillis()); 906 result.put("StackState", data.getStackState()); 907 result.put("TimeStamp", data.getTimeStamp()); 908 return result; 909 } 910 buildWifiChannel(WifiChannel data)911 private static Object buildWifiChannel(WifiChannel data) throws JSONException { 912 JSONObject channel = new JSONObject(); 913 channel.put("channelNum", data.channelNum); 914 channel.put("freqMHz", data.freqMHz); 915 channel.put("isDFS", data.isDFS); 916 channel.put("isValid", data.isValid()); 917 return channel; 918 } 919 buildWifiConfiguration(WifiConfiguration data)920 private static Object buildWifiConfiguration(WifiConfiguration data) 921 throws JSONException { 922 JSONObject config = new JSONObject(); 923 config.put("networkId", data.networkId); 924 // Trim the double quotes if exist 925 if (data.SSID.charAt(0) == '"' 926 && data.SSID.charAt(data.SSID.length() - 1) == '"') { 927 config.put("SSID", data.SSID.substring(1, data.SSID.length() - 1)); 928 } else { 929 config.put("SSID", data.SSID); 930 } 931 config.put("BSSID", data.BSSID); 932 config.put("priority", data.priority); 933 config.put("hiddenSSID", data.hiddenSSID); 934 config.put("FQDN", data.FQDN); 935 config.put("providerFriendlyName", data.providerFriendlyName); 936 config.put("isPasspoint", data.isPasspoint()); 937 config.put("hiddenSSID", data.hiddenSSID); 938 if (data.status == WifiConfiguration.Status.CURRENT) { 939 config.put("status", "CURRENT"); 940 } else if (data.status == WifiConfiguration.Status.DISABLED) { 941 config.put("status", "DISABLED"); 942 } else if (data.status == WifiConfiguration.Status.ENABLED) { 943 config.put("status", "ENABLED"); 944 } else { 945 config.put("status", "UNKNOWN"); 946 } 947 // config.put("enterpriseConfig", buildWifiEnterpriseConfig(data.enterpriseConfig)); 948 return config; 949 } 950 buildWifiEnterpriseConfig(WifiEnterpriseConfig data)951 private static Object buildWifiEnterpriseConfig(WifiEnterpriseConfig data) 952 throws JSONException, CertificateEncodingException { 953 JSONObject config = new JSONObject(); 954 config.put(WifiEnterpriseConfig.PLMN_KEY, data.getPlmn()); 955 config.put(WifiEnterpriseConfig.REALM_KEY, data.getRealm()); 956 config.put(WifiEnterpriseConfig.EAP_KEY, data.getEapMethod()); 957 config.put(WifiEnterpriseConfig.PHASE2_KEY, data.getPhase2Method()); 958 config.put(WifiEnterpriseConfig.ALTSUBJECT_MATCH_KEY, data.getAltSubjectMatch()); 959 X509Certificate caCert = data.getCaCertificate(); 960 String caCertString = Base64.encodeToString(caCert.getEncoded(), Base64.DEFAULT); 961 config.put(WifiEnterpriseConfig.CA_CERT_KEY, caCertString); 962 X509Certificate clientCert = data.getClientCertificate(); 963 String clientCertString = Base64.encodeToString(clientCert.getEncoded(), Base64.DEFAULT); 964 config.put(WifiEnterpriseConfig.CLIENT_CERT_KEY, clientCertString); 965 PrivateKey pk = data.getClientPrivateKey(); 966 String privateKeyString = Base64.encodeToString(pk.getEncoded(), Base64.DEFAULT); 967 config.put(WifiEnterpriseConfig.PRIVATE_KEY_ID_KEY, privateKeyString); 968 config.put(WifiEnterpriseConfig.PASSWORD_KEY, data.getPassword()); 969 return config; 970 } 971 buildWifiP2pDevice(WifiP2pDevice data)972 private static JSONObject buildWifiP2pDevice(WifiP2pDevice data) 973 throws JSONException { 974 JSONObject deviceInfo = new JSONObject(); 975 deviceInfo.put("Name", data.deviceName); 976 deviceInfo.put("Address", data.deviceAddress); 977 return deviceInfo; 978 } 979 buildWifiP2pGroup(WifiP2pGroup data)980 private static JSONObject buildWifiP2pGroup(WifiP2pGroup data) 981 throws JSONException { 982 JSONObject group = new JSONObject(); 983 Log.d("build p2p group."); 984 group.put("ClientList", build(data.getClientList())); 985 group.put("Interface", data.getInterface()); 986 group.put("Networkname", data.getNetworkName()); 987 group.put("Owner", data.getOwner()); 988 group.put("Passphrase", data.getPassphrase()); 989 group.put("NetworkId", data.getNetworkId()); 990 return group; 991 } 992 buildWifiP2pInfo(WifiP2pInfo data)993 private static JSONObject buildWifiP2pInfo(WifiP2pInfo data) 994 throws JSONException { 995 JSONObject info = new JSONObject(); 996 Log.d("build p2p info."); 997 info.put("groupFormed", data.groupFormed); 998 info.put("isGroupOwner", data.isGroupOwner); 999 info.put("groupOwnerAddress", data.groupOwnerAddress); 1000 return info; 1001 } 1002 buildCallEvent(InCallServiceImpl.CallEvent<T> callEvent)1003 private static <T> JSONObject buildCallEvent(InCallServiceImpl.CallEvent<T> callEvent) 1004 throws JSONException { 1005 JSONObject jsonEvent = new JSONObject(); 1006 jsonEvent.put("CallId", callEvent.getCallId()); 1007 jsonEvent.put("Event", build(callEvent.getEvent())); 1008 return jsonEvent; 1009 } 1010 buildUri(Uri uri)1011 private static JSONObject buildUri(Uri uri) throws JSONException { 1012 return new JSONObject().put("Uri", build((uri != null) ? uri.toString() : "")); 1013 } 1014 buildCallDetails(Call.Details details)1015 private static JSONObject buildCallDetails(Call.Details details) throws JSONException { 1016 1017 JSONObject callDetails = new JSONObject(); 1018 1019 callDetails.put("Handle", buildUri(details.getHandle())); 1020 callDetails.put("HandlePresentation", 1021 build(InCallServiceImpl.getCallPresentationInfoString( 1022 details.getHandlePresentation()))); 1023 callDetails.put("CallerDisplayName", build(details.getCallerDisplayName())); 1024 1025 // TODO AccountHandle 1026 // callDetails.put("AccountHandle", build("")); 1027 1028 callDetails.put("Capabilities", 1029 build(InCallServiceImpl.getCallCapabilitiesString(details.getCallCapabilities()))); 1030 1031 callDetails.put("Properties", 1032 build(InCallServiceImpl.getCallPropertiesString(details.getCallProperties()))); 1033 1034 // TODO Parse fields in Disconnect Cause 1035 callDetails.put("DisconnectCause", build((details.getDisconnectCause() != null) ? details 1036 .getDisconnectCause().toString() : "")); 1037 callDetails.put("ConnectTimeMillis", build(details.getConnectTimeMillis())); 1038 1039 // TODO: GatewayInfo 1040 // callDetails.put("GatewayInfo", build("")); 1041 1042 callDetails.put("VideoState", 1043 build(InCallServiceImpl.getVideoCallStateString(details.getVideoState()))); 1044 1045 // TODO: StatusHints 1046 // callDetails.put("StatusHints", build("")); 1047 1048 callDetails.put("Extras", build(details.getExtras())); 1049 1050 return callDetails; 1051 } 1052 buildCall(Call call)1053 private static JSONObject buildCall(Call call) throws JSONException { 1054 1055 JSONObject callInfo = new JSONObject(); 1056 1057 callInfo.put("Parent", build(InCallServiceImpl.getCallId(call))); 1058 1059 // TODO:Make a function out of this for consistency 1060 ArrayList<String> children = new ArrayList<String>(); 1061 for (Call child : call.getChildren()) { 1062 children.add(InCallServiceImpl.getCallId(child)); 1063 } 1064 callInfo.put("Children", build(children)); 1065 1066 // TODO:Make a function out of this for consistency 1067 ArrayList<String> conferenceables = new ArrayList<String>(); 1068 for (Call conferenceable : call.getChildren()) { 1069 children.add(InCallServiceImpl.getCallId(conferenceable)); 1070 } 1071 callInfo.put("ConferenceableCalls", build(conferenceables)); 1072 1073 callInfo.put("State", build(InCallServiceImpl.getCallStateString(call.getState()))); 1074 callInfo.put("CannedTextResponses", build(call.getCannedTextResponses())); 1075 callInfo.put("VideoCall", InCallServiceImpl.getVideoCallId(call.getVideoCall())); 1076 callInfo.put("Details", build(call.getDetails())); 1077 1078 return callInfo; 1079 } 1080 buildVideoProfile(VideoProfile videoProfile)1081 private static JSONObject buildVideoProfile(VideoProfile videoProfile) throws JSONException { 1082 JSONObject profile = new JSONObject(); 1083 1084 profile.put("VideoState", 1085 InCallServiceImpl.getVideoCallStateString(videoProfile.getVideoState())); 1086 profile.put("VideoQuality", 1087 InCallServiceImpl.getVideoCallQualityString(videoProfile.getQuality())); 1088 1089 return profile; 1090 } 1091 buildCameraCapabilities(CameraCapabilities cameraCapabilities)1092 private static JSONObject buildCameraCapabilities(CameraCapabilities cameraCapabilities) 1093 throws JSONException { 1094 JSONObject capabilities = new JSONObject(); 1095 1096 capabilities.put("Height", build(cameraCapabilities.getHeight())); 1097 capabilities.put("Width", build(cameraCapabilities.getWidth())); 1098 capabilities.put("ZoomSupported", build(cameraCapabilities.isZoomSupported())); 1099 capabilities.put("MaxZoom", build(cameraCapabilities.getMaxZoom())); 1100 1101 return capabilities; 1102 } 1103 buildVoLteServiceStateEvent( VoLteServiceState volteInfo)1104 private static JSONObject buildVoLteServiceStateEvent( 1105 VoLteServiceState volteInfo) 1106 throws JSONException { 1107 JSONObject info = new JSONObject(); 1108 info.put(TelephonyConstants.VoLteServiceStateContainer.SRVCC_STATE, 1109 TelephonyUtils.getSrvccStateString(volteInfo.getSrvccState())); 1110 return info; 1111 } 1112 buildModemActivityInfo(ModemActivityInfo modemInfo)1113 private static JSONObject buildModemActivityInfo(ModemActivityInfo modemInfo) 1114 throws JSONException { 1115 JSONObject info = new JSONObject(); 1116 1117 info.put("Timestamp", modemInfo.getTimestamp()); 1118 info.put("SleepTimeMs", modemInfo.getSleepTimeMillis()); 1119 info.put("IdleTimeMs", modemInfo.getIdleTimeMillis()); 1120 //convert from int[] to List<Integer> for proper JSON translation 1121 int[] txTimes = modemInfo.getTxTimeMillis(); 1122 List<Integer> tmp = new ArrayList<Integer>(txTimes.length); 1123 for(int val : txTimes) { 1124 tmp.add(val); 1125 } 1126 info.put("TxTimeMs", build(tmp)); 1127 info.put("RxTimeMs", modemInfo.getRxTimeMillis()); 1128 info.put("EnergyUsedMw", modemInfo.getEnergyUsed()); 1129 return info; 1130 } buildSignalStrength(SignalStrength signalStrength)1131 private static JSONObject buildSignalStrength(SignalStrength signalStrength) 1132 throws JSONException { 1133 JSONObject info = new JSONObject(); 1134 info.put(TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM, 1135 signalStrength.getGsmSignalStrength()); 1136 info.put( 1137 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_DBM, 1138 signalStrength.getGsmDbm()); 1139 info.put( 1140 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_LEVEL, 1141 signalStrength.getGsmLevel()); 1142 info.put( 1143 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_ASU_LEVEL, 1144 signalStrength.getGsmAsuLevel()); 1145 info.put( 1146 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_GSM_BIT_ERROR_RATE, 1147 signalStrength.getGsmBitErrorRate()); 1148 info.put( 1149 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_DBM, 1150 signalStrength.getCdmaDbm()); 1151 info.put( 1152 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_LEVEL, 1153 signalStrength.getCdmaLevel()); 1154 info.put( 1155 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_ASU_LEVEL, 1156 signalStrength.getCdmaAsuLevel()); 1157 info.put( 1158 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_CDMA_ECIO, 1159 signalStrength.getCdmaEcio()); 1160 info.put( 1161 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_EVDO_DBM, 1162 signalStrength.getEvdoDbm()); 1163 info.put( 1164 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_EVDO_ECIO, 1165 signalStrength.getEvdoEcio()); 1166 info.put(TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE, 1167 signalStrength.getLteSignalStrength()); 1168 info.put( 1169 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_DBM, 1170 signalStrength.getLteDbm()); 1171 info.put( 1172 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_LEVEL, 1173 signalStrength.getLteLevel()); 1174 info.put( 1175 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LTE_ASU_LEVEL, 1176 signalStrength.getLteAsuLevel()); 1177 info.put( 1178 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_LEVEL, 1179 signalStrength.getLevel()); 1180 info.put( 1181 TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_ASU_LEVEL, 1182 signalStrength.getAsuLevel()); 1183 info.put(TelephonyConstants.SignalStrengthContainer.SIGNAL_STRENGTH_DBM, 1184 signalStrength.getDbm()); 1185 return info; 1186 } 1187 JsonBuilder()1188 private JsonBuilder() { 1189 // This is a utility class. 1190 } 1191 } 1192