@Override public void onNewShieldFrameReceived(ShieldFrame frame) { if (frame.getShieldId() == UIShield.DATA_LOGGER.getId()) { switch (frame.getFunctionId()) { case START_LOGGING: if (frame.getArguments().size() > 0) fileName = frame.getArgumentAsString(0); else fileName = null; headerList = new CopyOnWriteArrayList<String>(); dataSet = new ArrayList<Map<String, String>>(); rowData = new HashMap<String, String>(); currentStatus = LOGGING; isStarted = true; if (eventHandler != null) { eventHandler.onStartLogging(); } break; case STOP_LOGGING: saveData(); break; case ADD_STRING: if (isStarted) { currentStatus = LOGGING; String key = frame.getArgumentAsString(0); String value = frame.getArgumentAsString(1); if (!headerList.contains(key)) headerList.add(key); rowData.put(key, value); if (eventHandler != null) { eventHandler.onAdd(key, value); } } break; case ADD_FLOAT: if (isStarted) { currentStatus = LOGGING; String keyFloat = frame.getArgumentAsString(0); String valueFloat = frame.getArgumentAsFloat(1) + ""; if (!headerList.contains(keyFloat)) headerList.add(keyFloat); rowData.put(keyFloat, valueFloat); if (eventHandler != null) { eventHandler.onAdd(keyFloat, valueFloat); } } break; case LOG: if (isStarted) { currentStatus = LOGGING; if (eventHandler != null) { eventHandler.onLog(new HashMap<>(rowData)); } if (!headerList.contains("Time")) headerList.add("Time"); rowData.put( "Time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US) .format(new Date()) .toString()); // rowData.remove("Time"); dataSet.add(new HashMap<>(rowData)); rowData = new HashMap<>(); } break; default: break; } } }