Skip to content

Commit

Permalink
Merge branch 'master' of github.com:cosysoft/device
Browse files Browse the repository at this point in the history
  • Loading branch information
cosyman committed Apr 11, 2015
2 parents e1c47f0 + e2412df commit 3f3112d
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package org.cosysoft.device.android.impl;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;

import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.DdmPreferences;
import com.android.ddmlib.IDevice;
import com.android.ddmlib.Log.LogLevel;
import org.cosysoft.device.DeviceStore;
import org.cosysoft.device.android.AndroidDevice;
import org.cosysoft.device.exception.AndroidDeviceException;
Expand All @@ -13,22 +13,20 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.DdmPreferences;
import com.android.ddmlib.IDevice;
import com.android.ddmlib.IDevice.DeviceState;
import com.android.ddmlib.Log.LogLevel;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeSet;

public class AndroidDeviceStore implements DeviceStore {

protected static final Logger logger = LoggerFactory
.getLogger(AndroidDeviceStore.class);

protected final TreeSet<AndroidDevice> devices = new TreeSet<>();
private Map<IDevice, DefaultHardwareDevice> connectedDevices = new HashMap<>();
private Map<IDevice, AndroidDevice> connectedDevices = new HashMap<>();

private AndroidDebugBridge bridge;
private boolean shouldKeepAdbAlive;
private boolean shouldKeepAdbAlive = false;

static class DeviceStoreHolder {

Expand All @@ -37,7 +35,7 @@ static class DeviceStoreHolder {
static AndroidDeviceStore init() {
AndroidDeviceStore instance;
instance = new AndroidDeviceStore();
instance.initAndroidDevices(true);
instance.initAndroidDevices(false);
return instance;
}
}
Expand All @@ -54,17 +52,7 @@ public static AndroidDeviceStore getInstance() {
public void initAndroidDevices(boolean shouldKeepAdbAlive)
throws AndroidDeviceException {
DdmPreferences.setLogLevel(LogLevel.VERBOSE.getStringValue());

this.initializeAdbConnection();
TreeSet<AndroidDevice> androidDevices = this.getDevices();

if (androidDevices.isEmpty()) {
throw new DeviceNotFoundException(
"No android devices were found. Please start an Android hardware device via USB, "
+ "or check other device offline problem such as open USB Debug");
}
devices.addAll(androidDevices);

}

/**
Expand Down Expand Up @@ -112,18 +100,53 @@ protected void initializeAdbConnection() {
for (int i = 0; i < devices.length; i++) {
logger.info("devices state: {},{} ", devices[i].getName(),
devices[i].getState());
if (DeviceState.ONLINE == devices[i].getState()) {
connectedDevices.put(devices[i], new DefaultHardwareDevice(
devices[i]));
connectedDevices.put(devices[i], new DefaultHardwareDevice(
devices[i]));
}


bridge.addDeviceChangeListener(new AndroidDebugBridge.IDeviceChangeListener() {
@Override
public void deviceConnected(IDevice device) {
logger.info("deviceConnected {}", device.getSerialNumber());
AndroidDevice ad = new DefaultHardwareDevice(device);
Iterator<Map.Entry<IDevice, AndroidDevice>> entryIterator = connectedDevices.entrySet().iterator();
boolean contain = false;
while (entryIterator.hasNext()) {
Map.Entry entry = entryIterator.next();
if (entry.getValue().equals(ad)) {
contain = true;
break;
}
}
if (!contain) {
connectedDevices.put(device, ad);
}
}

}
this.devices.addAll(connectedDevices.values());
@Override
public void deviceDisconnected(IDevice device) {
logger.info("deviceDisconnected {}", device.getSerialNumber());
AndroidDevice ad = new DefaultHardwareDevice(device);
Iterator<Map.Entry<IDevice, AndroidDevice>> entryIterator = connectedDevices.entrySet().iterator();
while (entryIterator.hasNext()) {
Map.Entry entry = entryIterator.next();
if (entry.getValue().equals(ad)) {
entryIterator.remove();
}
}
}

@Override
public void deviceChanged(IDevice device, int changeMask) {
logger.info(device.getSerialNumber() + " " + changeMask);
}
});
}

@Override
public TreeSet<AndroidDevice> getDevices() {
return new TreeSet<AndroidDevice>(devices);
return new TreeSet<AndroidDevice>(connectedDevices.values());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,6 @@ protected TreeSet<AndroidDevice> getDevices() {

@AfterClass
public static void tearDown() {
deviceStore.shutdown();
deviceStore.shutdownForcely();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ public byte[] takeScreenShot(String serialId) {
return ImageUtils.toByteArray(image);
}

@Cacheable(value = "devices")
public List<DeviceInfo> getDevices() {
List<DeviceInfo> deviceInfos = new ArrayList<>();
deviceStore.getDevices().forEach(device -> {
Expand Down
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
#org.gradle.java.home=C:/Program Files/Java/jdk1.8.0_40
systemProp.file.encoding=utf-8

0 comments on commit 3f3112d

Please sign in to comment.