private void serviceCarProperties()

in tools/android-app/app/src/main/java/com/aws/iotfleetwise/FweApplication.java [304:382]


    private void serviceCarProperties()
    {
        List<String> supportedProps = new ArrayList<>();
        int[][] propInfo = Fwe.getVehiclePropertyInfo();
        int[] propIds = getVehiclePropertyIds(propInfo);
        for (int propId : propIds) {
            String propName = VehiclePropertyIds.toString(propId);
            CarPropertyConfig config = mCarPropertyManager.getCarPropertyConfig(propId);
            if (config == null) {
                Log.d("serviceCarProperties", "Property unavailable: "+propName);
                continue;
            }
            int[] areaIds = config.getAreaIds();
            Class<?> clazz = config.getPropertyType();
            for (int areaIndex = 0; areaIndex < areaIds.length; areaIndex++) {
                int signalId = getVehiclePropertySignalId(propInfo, propId, areaIndex, 0);
                if (signalId < 0) {
                    Log.d("serviceCarProperties", String.format("More area IDs (%d) than expected (%d) for %s", areaIds.length, areaIndex + 1, propName));
                    break;
                }
                CarPropertyValue propVal;
                try {
                    propVal = mCarPropertyManager.getProperty(clazz, propId, areaIds[areaIndex]);
                } catch (IllegalArgumentException ignored) {
                    Log.w("serviceCarProperties", String.format("Could not get %s 0x%X", propName, areaIds[areaIndex]));
                    continue;
                } catch (SecurityException e) {
                    Log.w("serviceCarProperties", String.format("Access denied for %s 0x%X", propName, areaIds[areaIndex]));
                    continue;
                }
                if (areaIndex == 0) {
                    supportedProps.add(propName);
                }
                StringBuilder sb = new StringBuilder();
                sb.append(String.format("%s 0x%X: ", propName, areaIds[areaIndex]));
                if (clazz.equals(Boolean.class)) {
                    double val = (boolean) propVal.getValue() ? 1.0 : 0.0;
                    sb.append(val);
                    Fwe.setVehicleProperty(signalId, val);
                } else if (clazz.equals(Integer.class) || clazz.equals(Float.class)) {
                    double val = ((Number)propVal.getValue()).doubleValue();
                    sb.append(val);
                    Fwe.setVehicleProperty(signalId, val);
                } else if (clazz.equals(Long.class)) {
                    long val = ((Number)propVal.getValue()).longValue();
                    sb.append(val);
                    Fwe.setVehicleProperty(signalId, val);
                } else if (clazz.equals(Integer[].class) || clazz.equals(Long[].class)) {
                    sb.append("[");
                    for (int resultIndex = 0; resultIndex < Array.getLength(propVal.getValue()); resultIndex++) {
                        if (resultIndex > 0) {
                            signalId = getVehiclePropertySignalId(propInfo, propId, areaIndex, resultIndex);
                            if (signalId < 0) {
                                Log.d("serviceCarProperties", String.format("More results (%d) than expected (%d) for %s 0x%X", Array.getLength(propVal.getValue()), resultIndex + 1, propName, areaIds[areaIndex]));
                                break;
                            }
                        }
                        long val = ((Number)Array.get(propVal.getValue(), resultIndex)).longValue();
                        if (resultIndex > 0) {
                            sb.append(", ");
                        }
                        sb.append(val);
                        Fwe.setVehicleProperty(signalId, val);
                    }
                    sb.append("]");
                } else {
                    Log.w("serviceCarProperties", "Unsupported type " + clazz.toString() + " for " + propName);
                    continue;
                }
                Log.i("serviceCarProperties", sb.toString());
            }
        }
        if ((mSupportedVehicleProperties == null) && (supportedProps.size() > 0)) {
            Collections.sort(supportedProps);
            synchronized (mSupportedSignalsLock) {
                mSupportedVehicleProperties = supportedProps;
            }
        }
    }