package com.vpedak.testsrecorder.plugin.core; import com.android.ddmlib.AndroidDebugBridge; import com.android.ddmlib.IDevice; import com.android.ddmlib.logcat.LogCatListener; import com.android.ddmlib.logcat.LogCatMessage; import com.android.ddmlib.logcat.LogCatReceiverTask; import com.vpedak.testsrecorder.core.EventWriter; import com.vpedak.testsrecorder.core.events.RecordingEvent; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; public class EventReader { private EventListener eventListener; private LogCatReceiverTask receiverTask; private AndroidDebugBridge bridge; private Thread thread; public EventReader(EventListener eventListener) { this.eventListener = eventListener; AndroidDebugBridge.init(false); } public void start(long uniqueId) { bridge = AndroidDebugBridge.createBridge(); int count = 0; while (bridge.hasInitialDeviceList() == false) { try { Thread.sleep(100); count++; } catch (InterruptedException e) { } if (count > 100) { throw new RuntimeException("Timeout connecting to the adb!"); } } IDevice[] devices = bridge.getDevices(); if (devices.length == 0) { throw new RuntimeException("Failed to find device"); } IDevice device = devices[0]; receiverTask = new LogCatReceiverTask(device); final String tag = EventWriter.ANDRIOD_TEST_RECORDER+uniqueId; receiverTask.addLogCatListener(new LogCatListener() { @Override public void log(List<LogCatMessage> list) { for (LogCatMessage message : list) { if (tag.equals(message.getTag())) { String str = message.getMessage(); try { RecordingEvent event = RecordingEvent.fromString(str); eventListener.onRecordingEvent(event); } catch (Exception e) { System.out.println("Failed to parse event - " + str); e.printStackTrace(); } } } } }); thread = new Thread(receiverTask); thread.start(); } public void stop() { if (receiverTask != null) { receiverTask.stop(); } } public static interface EventListener { void onRecordingEvent(RecordingEvent event); } }