aboutsummaryrefslogtreecommitdiffstats
path: root/ddms/libs
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2009-05-14 18:19:52 -0700
committerXavier Ducrohet <xav@android.com>2009-05-15 14:01:12 -0700
commit5542fe492293223a81e604a49aa6fa55b1719847 (patch)
tree5a8377e382e930e99c7ebe0b729ae2c2833cbf22 /ddms/libs
parentc28e97a0db9c383cd656cb51f3b720dfb53b8d21 (diff)
downloadsdk-5542fe492293223a81e604a49aa6fa55b1719847.zip
sdk-5542fe492293223a81e604a49aa6fa55b1719847.tar.gz
sdk-5542fe492293223a81e604a49aa6fa55b1719847.tar.bz2
Make the ddmlib API use IDevice instead of Device
Device is now private. All the API is using IDevice. Updated ddms, ADT, hierarchyviewer and other tools that relied on ddmlib.
Diffstat (limited to 'ddms/libs')
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java66
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/AndroidDebugBridge.java60
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/ChunkHandler.java2
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/Client.java30
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/DebugPortManager.java12
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/Device.java77
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/DeviceMonitor.java69
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java28
-rwxr-xr-xddms/libs/ddmlib/src/com/android/ddmlib/IDevice.java30
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/MonitorThread.java30
-rw-r--r--ddms/libs/ddmlib/src/com/android/ddmlib/log/EventLogParser.java130
-rw-r--r--ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/RemoteAndroidTestRunnerTest.java3
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/DevicePanel.java112
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/EmulatorControlPanel.java160
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/ScreenShotDialog.java8
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/SelectionDependentPanel.java8
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/explorer/DeviceExplorer.java6
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/log/event/EventLogPanel.java120
-rw-r--r--ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogPanel.java64
19 files changed, 519 insertions, 496 deletions
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java b/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java
index 42022fe..5f0f271 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java
@@ -29,7 +29,7 @@ import java.nio.channels.SocketChannel;
/**
* Helper class to handle requests and connections to adb.
* <p/>{@link DebugBridgeServer} is the public API to connection to adb, while {@link AdbHelper}
- * does the low level stuff.
+ * does the low level stuff.
* <p/>This currently uses spin-wait non-blocking I/O. A Selector would be more efficient,
* but seems like overkill for what we're doing here.
*/
@@ -272,14 +272,14 @@ final class AdbHelper {
try {
adbChan = SocketChannel.open(adbSockAddr);
adbChan.configureBlocking(false);
-
+
// if the device is not -1, then we first tell adb we're looking to talk
// to a specific device
setDevice(adbChan, device);
-
+
if (write(adbChan, request) == false)
throw new IOException("failed asking for frame buffer");
-
+
AdbResponse resp = readAdbResponse(adbChan, false /* readDiagString */);
if (!resp.ioSuccess || !resp.okay) {
Log.w("ddms", "Got timeout or unhappy response from ADB fb req: "
@@ -287,7 +287,7 @@ final class AdbHelper {
adbChan.close();
return null;
}
-
+
reply = new byte[16];
if (read(adbChan, reply) == false) {
Log.w("ddms", "got partial reply from ADB fb:");
@@ -297,19 +297,19 @@ final class AdbHelper {
}
ByteBuffer buf = ByteBuffer.wrap(reply);
buf.order(ByteOrder.LITTLE_ENDIAN);
-
+
imageParams.bpp = buf.getInt();
imageParams.size = buf.getInt();
imageParams.width = buf.getInt();
imageParams.height = buf.getInt();
-
+
Log.d("ddms", "image params: bpp=" + imageParams.bpp + ", size="
+ imageParams.size + ", width=" + imageParams.width
+ ", height=" + imageParams.height);
-
+
if (write(adbChan, nudge) == false)
throw new IOException("failed nudging");
-
+
reply = new byte[imageParams.size];
if (read(adbChan, reply) == false) {
Log.w("ddms", "got truncated reply from ADB fb data");
@@ -416,34 +416,34 @@ final class AdbHelper {
public static void runLogService(InetSocketAddress adbSockAddr, Device device, String logName,
LogReceiver rcvr) throws IOException {
SocketChannel adbChan = null;
-
+
try {
adbChan = SocketChannel.open(adbSockAddr);
adbChan.configureBlocking(false);
-
+
// if the device is not -1, then we first tell adb we're looking to talk
// to a specific device
setDevice(adbChan, device);
-
+
byte[] request = formAdbRequest("log:" + logName);
if (write(adbChan, request) == false) {
throw new IOException("failed to submit the log command");
}
-
+
AdbResponse resp = readAdbResponse(adbChan, false /* readDiagString */);
if (!resp.ioSuccess || !resp.okay) {
throw new IOException("Device rejected log command: " + resp.message);
}
-
+
byte[] data = new byte[16384];
ByteBuffer buf = ByteBuffer.wrap(data);
while (true) {
int count;
-
+
if (rcvr != null && rcvr.isCancelled()) {
break;
}
-
+
count = adbChan.read(buf);
if (count < 0) {
break;
@@ -465,7 +465,7 @@ final class AdbHelper {
}
}
}
-
+
/**
* Creates a port forwarding between a local and a remote port.
* @param adbSockAddr the socket address to connect to adb
@@ -473,7 +473,7 @@ final class AdbHelper {
* @param localPort the local port to forward
* @param remotePort the remote port.
* @return <code>true</code> if success.
- * @throws IOException
+ * @throws IOException
*/
public static boolean createForward(InetSocketAddress adbSockAddr, Device device, int localPort,
int remotePort) throws IOException {
@@ -482,15 +482,15 @@ final class AdbHelper {
try {
adbChan = SocketChannel.open(adbSockAddr);
adbChan.configureBlocking(false);
-
+
byte[] request = formAdbRequest(String.format(
"host-serial:%1$s:forward:tcp:%2$d;tcp:%3$d", //$NON-NLS-1$
- device.serialNumber, localPort, remotePort));
-
+ device.getSerialNumber(), localPort, remotePort));
+
if (write(adbChan, request) == false) {
throw new IOException("failed to submit the forward command.");
}
-
+
AdbResponse resp = readAdbResponse(adbChan, false /* readDiagString */);
if (!resp.ioSuccess || !resp.okay) {
throw new IOException("Device rejected command: " + resp.message);
@@ -500,7 +500,7 @@ final class AdbHelper {
adbChan.close();
}
}
-
+
return true;
}
@@ -520,15 +520,15 @@ final class AdbHelper {
try {
adbChan = SocketChannel.open(adbSockAddr);
adbChan.configureBlocking(false);
-
+
byte[] request = formAdbRequest(String.format(
"host-serial:%1$s:killforward:tcp:%2$d;tcp:%3$d", //$NON-NLS-1$
- device.serialNumber, localPort, remotePort));
-
+ device.getSerialNumber(), localPort, remotePort));
+
if (!write(adbChan, request)) {
throw new IOException("failed to submit the remove forward command.");
}
-
+
AdbResponse resp = readAdbResponse(adbChan, false /* readDiagString */);
if (!resp.ioSuccess || !resp.okay) {
throw new IOException("Device rejected command: " + resp.message);
@@ -563,7 +563,7 @@ final class AdbHelper {
}
return result;
}
-
+
/**
* Reads from the socket until the array is filled, or no more data is coming (because
* the socket closed or the timeout expired).
@@ -572,7 +572,7 @@ final class AdbHelper {
* mode for timeouts to work
* @param data the buffer to store the read data into.
* @return "true" if all data was read.
- * @throws IOException
+ * @throws IOException
*/
static boolean read(SocketChannel chan, byte[] data) {
try {
@@ -581,7 +581,7 @@ final class AdbHelper {
Log.d("ddms", "readAll: IOException: " + e.getMessage());
return false;
}
-
+
return true;
}
@@ -597,7 +597,7 @@ final class AdbHelper {
* @param data the buffer to store the read data into.
* @param length the length to read or -1 to fill the data buffer completely
* @param timeout The timeout value. A timeout of zero means "wait forever".
- * @throws IOException
+ * @throws IOException
*/
static void read(SocketChannel chan, byte[] data, int length, int timeout) throws IOException {
ByteBuffer buf = ByteBuffer.wrap(data, 0, length != -1 ? length : data.length);
@@ -653,7 +653,7 @@ final class AdbHelper {
* @param data the buffer to send.
* @param length the length to write or -1 to send the whole buffer.
* @param timeout The timeout value. A timeout of zero means "wait forever".
- * @throws IOException
+ * @throws IOException
*/
static void write(SocketChannel chan, byte[] data, int length, int timeout)
throws IOException {
@@ -697,7 +697,7 @@ final class AdbHelper {
// if the device is not -1, then we first tell adb we're looking to talk
// to a specific device
if (device != null) {
- String msg = "host:transport:" + device.serialNumber; //$NON-NLS-1$
+ String msg = "host:transport:" + device.getSerialNumber(); //$NON-NLS-1$
byte[] device_query = formAdbRequest(msg);
if (write(adbChan, device_query) == false)
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/AndroidDebugBridge.java b/ddms/libs/ddmlib/src/com/android/ddmlib/AndroidDebugBridge.java
index c587b4e..9d6294a 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/AndroidDebugBridge.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/AndroidDebugBridge.java
@@ -107,7 +107,7 @@ public final class AndroidDebugBridge {
/**
* Classes which implement this interface provide methods that deal
- * with {@link Device} addition, deletion, and changes.
+ * with {@link IDevice} addition, deletion, and changes.
*/
public interface IDeviceChangeListener {
/**
@@ -116,7 +116,7 @@ public final class AndroidDebugBridge {
* This is sent from a non UI thread.
* @param device the new device.
*/
- public void deviceConnected(Device device);
+ public void deviceConnected(IDevice device);
/**
* Sent when the a device is connected to the {@link AndroidDebugBridge}.
@@ -124,7 +124,7 @@ public final class AndroidDebugBridge {
* This is sent from a non UI thread.
* @param device the new device.
*/
- public void deviceDisconnected(Device device);
+ public void deviceDisconnected(IDevice device);
/**
* Sent when a device data changed, or when clients are started/terminated on the device.
@@ -132,10 +132,10 @@ public final class AndroidDebugBridge {
* This is sent from a non UI thread.
* @param device the device that was updated.
* @param changeMask the mask describing what changed. It can contain any of the following
- * values: {@link Device#CHANGE_BUILD_INFO}, {@link Device#CHANGE_STATE},
- * {@link Device#CHANGE_CLIENT_LIST}
+ * values: {@link IDevice#CHANGE_BUILD_INFO}, {@link IDevice#CHANGE_STATE},
+ * {@link IDevice#CHANGE_CLIENT_LIST}
*/
- public void deviceChanged(Device device, int changeMask);
+ public void deviceChanged(IDevice device, int changeMask);
}
/**
@@ -215,7 +215,7 @@ public final class AndroidDebugBridge {
/**
* Returns whether the ddmlib is setup to support monitoring and interacting with
- * {@link Client}s running on the {@link Device}s.
+ * {@link Client}s running on the {@link IDevice}s.
*/
static boolean getClientSupport() {
return sClientSupport;
@@ -391,7 +391,7 @@ public final class AndroidDebugBridge {
}
/**
- * Adds the listener to the collection of listeners who will be notified when a {@link Device}
+ * Adds the listener to the collection of listeners who will be notified when a {@link IDevice}
* is connected, disconnected, or when its properties or its {@link Client} list changed,
* by sending it one of the messages defined in the {@link IDeviceChangeListener} interface.
* @param listener The listener which should be notified.
@@ -406,7 +406,7 @@ public final class AndroidDebugBridge {
/**
* Removes the listener from the collection of listeners who will be notified when a
- * {@link Device} is connected, disconnected, or when its properties or its {@link Client}
+ * {@link IDevice} is connected, disconnected, or when its properties or its {@link Client}
* list changed.
* @param listener The listener which should no longer be notified.
*/
@@ -446,23 +446,23 @@ public final class AndroidDebugBridge {
* Returns the devices.
* @see #hasInitialDeviceList()
*/
- public Device[] getDevices() {
+ public IDevice[] getDevices() {
synchronized (sLock) {
if (mDeviceMonitor != null) {
return mDeviceMonitor.getDevices();
}
}
- return new Device[0];
+ return new IDevice[0];
}
/**
* Returns whether the bridge has acquired the initial list from adb after being created.
* <p/>Calling {@link #getDevices()} right after {@link #createBridge(String, boolean)} will
* generally result in an empty list. This is due to the internal asynchronous communication
- * mechanism with <code>adb</code> that does not guarantee that the {@link Device} list has been
+ * mechanism with <code>adb</code> that does not guarantee that the {@link IDevice} list has been
* built before the call to {@link #getDevices()}.
- * <p/>The recommended way to get the list of {@link Device} objects is to create a
+ * <p/>The recommended way to get the list of {@link IDevice} objects is to create a
* {@link IDeviceChangeListener} object.
*/
public boolean hasInitialDeviceList() {
@@ -719,19 +719,19 @@ public final class AndroidDebugBridge {
}
/**
- * Notify the listener of a new {@link Device}.
+ * Notify the listener of a new {@link IDevice}.
* <p/>
* The notification of the listeners is done in a synchronized block. It is important to
- * expect the listeners to potentially access various methods of {@link Device} as well as
+ * expect the listeners to potentially access various methods of {@link IDevice} as well as
* {@link #getDevices()} which use internal locks.
* <p/>
* For this reason, any call to this method from a method of {@link DeviceMonitor},
- * {@link Device} which is also inside a synchronized block, should first synchronize on
+ * {@link IDevice} which is also inside a synchronized block, should first synchronize on
* the {@link AndroidDebugBridge} lock. Access to this lock is done through {@link #getLock()}.
- * @param device the new <code>Device</code>.
+ * @param device the new <code>IDevice</code>.
* @see #getLock()
*/
- void deviceConnected(Device device) {
+ void deviceConnected(IDevice device) {
// because the listeners could remove themselves from the list while processing
// their event callback, we make a copy of the list and iterate on it instead of
// the main list.
@@ -755,19 +755,19 @@ public final class AndroidDebugBridge {
}
/**
- * Notify the listener of a disconnected {@link Device}.
+ * Notify the listener of a disconnected {@link IDevice}.
* <p/>
* The notification of the listeners is done in a synchronized block. It is important to
- * expect the listeners to potentially access various methods of {@link Device} as well as
+ * expect the listeners to potentially access various methods of {@link IDevice} as well as
* {@link #getDevices()} which use internal locks.
* <p/>
* For this reason, any call to this method from a method of {@link DeviceMonitor},
- * {@link Device} which is also inside a synchronized block, should first synchronize on
+ * {@link IDevice} which is also inside a synchronized block, should first synchronize on
* the {@link AndroidDebugBridge} lock. Access to this lock is done through {@link #getLock()}.
- * @param device the disconnected <code>Device</code>.
+ * @param device the disconnected <code>IDevice</code>.
* @see #getLock()
*/
- void deviceDisconnected(Device device) {
+ void deviceDisconnected(IDevice device) {
// because the listeners could remove themselves from the list while processing
// their event callback, we make a copy of the list and iterate on it instead of
// the main list.
@@ -791,19 +791,19 @@ public final class AndroidDebugBridge {
}
/**
- * Notify the listener of a modified {@link Device}.
+ * Notify the listener of a modified {@link IDevice}.
* <p/>
* The notification of the listeners is done in a synchronized block. It is important to
- * expect the listeners to potentially access various methods of {@link Device} as well as
+ * expect the listeners to potentially access various methods of {@link IDevice} as well as
* {@link #getDevices()} which use internal locks.
* <p/>
* For this reason, any call to this method from a method of {@link DeviceMonitor},
- * {@link Device} which is also inside a synchronized block, should first synchronize on
+ * {@link IDevice} which is also inside a synchronized block, should first synchronize on
* the {@link AndroidDebugBridge} lock. Access to this lock is done through {@link #getLock()}.
- * @param device the modified <code>Device</code>.
+ * @param device the modified <code>IDevice</code>.
* @see #getLock()
*/
- void deviceChanged(Device device, int changeMask) {
+ void deviceChanged(IDevice device, int changeMask) {
// because the listeners could remove themselves from the list while processing
// their event callback, we make a copy of the list and iterate on it instead of
// the main list.
@@ -830,11 +830,11 @@ public final class AndroidDebugBridge {
* Notify the listener of a modified {@link Client}.
* <p/>
* The notification of the listeners is done in a synchronized block. It is important to
- * expect the listeners to potentially access various methods of {@link Device} as well as
+ * expect the listeners to potentially access various methods of {@link IDevice} as well as
* {@link #getDevices()} which use internal locks.
* <p/>
* For this reason, any call to this method from a method of {@link DeviceMonitor},
- * {@link Device} which is also inside a synchronized block, should first synchronize on
+ * {@link IDevice} which is also inside a synchronized block, should first synchronize on
* the {@link AndroidDebugBridge} lock. Access to this lock is done through {@link #getLock()}.
* @param device the modified <code>Client</code>.
* @param changeMask the mask indicating what changed in the <code>Client</code>
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/ChunkHandler.java b/ddms/libs/ddmlib/src/com/android/ddmlib/ChunkHandler.java
index 441b024..74fa318 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/ChunkHandler.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/ChunkHandler.java
@@ -199,7 +199,7 @@ abstract class ChunkHandler {
protected static Client checkDebuggerPortForAppName(Client client, String appName) {
IDebugPortProvider provider = DebugPortManager.getProvider();
if (provider != null) {
- Device device = client.getDevice();
+ Device device = client.getDeviceImpl();
int newPort = provider.getPort(device, appName);
if (newPort != IDebugPortProvider.NO_STATIC_PORT &&
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/Client.java b/ddms/libs/ddmlib/src/com/android/ddmlib/Client.java
index 866d578..64fbef6 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/Client.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/Client.java
@@ -133,7 +133,7 @@ public class Client {
mConnState = ST_INIT;
mClientData = new ClientData(pid);
-
+
mThreadUpdateEnabled = DdmPreferences.getInitialThreadUpdate();
mHeapUpdateEnabled = DdmPreferences.getInitialHeapUpdate();
}
@@ -147,9 +147,15 @@ public class Client {
}
/**
- * Returns the {@link Device} on which this Client is running.
+ * Returns the {@link IDevice} on which this Client is running.
*/
- public Device getDevice() {
+ public IDevice getDevice() {
+ return mDevice;
+ }
+
+ /** Returns the {@link Device} on which this Client is running.
+ */
+ Device getDeviceImpl() {
return mDevice;
}
@@ -238,7 +244,7 @@ public class Client {
update(CHANGE_THREAD_MODE);
}
-
+
/**
* Returns whether the thread update is enabled.
*/
@@ -268,7 +274,7 @@ public class Client {
public void requestThreadStackTrace(int threadId) {
HandleThread.requestThreadStackCallRefresh(this, threadId);
}
-
+
/**
* Enables or disables the heap update.
* <p/>If <code>true</code>, any GC will cause the client to send its heap information.
@@ -320,7 +326,7 @@ public class Client {
return false;
}
-
+
/**
* Enables or disables the Allocation tracker for this client.
* <p/>If enabled, the VM will start tracking allocation informations. A call to
@@ -336,7 +342,7 @@ public class Client {
Log.e("ddmlib", e);
}
}
-
+
/**
* Sends a request to the VM to send the enable status of the allocation tracking.
* This is asynchronous.
@@ -350,9 +356,9 @@ public class Client {
HandleHeap.sendREAQ(this);
} catch (IOException e) {
Log.e("ddmlib", e);
- }
+ }
}
-
+
/**
* Sends a request to the VM to send the information about all the allocations that have
* happened since the call to {@link #enableAllocationTracker(boolean)} with <var>enable</var>
@@ -457,7 +463,7 @@ public class Client {
}
mConnState = ST_AWAIT_SHAKE;
-
+
return true;
}
@@ -638,7 +644,7 @@ public class Client {
*/
Log.e("ddms", "Receiving data in state = " + mConnState);
}
-
+
return null;
}
@@ -753,7 +759,7 @@ public class Client {
mDevice.removeClient(this, notify);
}
-
+
/**
* Returns whether this {@link Client} has a valid connection to the application VM.
*/
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/DebugPortManager.java b/ddms/libs/ddmlib/src/com/android/ddmlib/DebugPortManager.java
index 9392127..defdc0e 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/DebugPortManager.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/DebugPortManager.java
@@ -19,12 +19,12 @@ package com.android.ddmlib;
import com.android.ddmlib.Device;
/**
- * Centralized point to provide a {@link IDebugPortProvider} to ddmlib.
- *
+ * Centralized point to provide a {@link IDebugPortProvider} to ddmlib.
+ *
* <p/>When {@link Client} objects are created, they start listening for debuggers on a specific
- * port. The default behavior is to start with {@link DdmPreferences#getDebugPortBase()} and
+ * port. The default behavior is to start with {@link DdmPreferences#getDebugPortBase()} and
* increment this value for each new <code>Client</code>.
- *
+ *
* <p/>This {@link DebugPortManager} allows applications using ddmlib to provide a custom
* port provider on a per-<code>Client</code> basis, depending on the device/emulator they are
* running on, and/or their names.
@@ -48,7 +48,7 @@ public class DebugPortManager {
* @return The non-random debugger port or {@link #NO_STATIC_PORT} if the {@link Client}
* should use the automatic debugger port provider.
*/
- public int getPort(Device device, String appName);
+ public int getPort(IDevice device, String appName);
}
private static IDebugPortProvider sProvider = null;
@@ -63,7 +63,7 @@ public class DebugPortManager {
}
/**
- * Returns the
+ * Returns the
* @return
*/
static IDebugPortProvider getProvider() {
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/Device.java b/ddms/libs/ddmlib/src/com/android/ddmlib/Device.java
index 37b33cf..d9d1275 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/Device.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/Device.java
@@ -16,7 +16,6 @@
package com.android.ddmlib;
-import com.android.ddmlib.Client;
import com.android.ddmlib.log.LogReceiver;
import java.io.IOException;
@@ -30,50 +29,20 @@ import java.util.Map;
/**
* A Device. It can be a physical device or an emulator.
- *
- * TODO: make this class package-protected, and shift all callers to use IDevice
*/
-public final class Device implements IDevice {
- /**
- * The state of a device.
- */
- public static enum DeviceState {
- BOOTLOADER("bootloader"), //$NON-NLS-1$
- OFFLINE("offline"), //$NON-NLS-1$
- ONLINE("device"); //$NON-NLS-1$
-
- private String mState;
-
- DeviceState(String state) {
- mState = state;
- }
-
- /**
- * Returns a {@link DeviceState} from the string returned by <code>adb devices</code>.
- * @param state the device state.
- * @return a {@link DeviceState} object or <code>null</code> if the state is unknown.
- */
- public static DeviceState getState(String state) {
- for (DeviceState deviceState : values()) {
- if (deviceState.mState.equals(state)) {
- return deviceState;
- }
- }
- return null;
- }
- }
+final class Device implements IDevice {
/** Emulator Serial Number regexp. */
final static String RE_EMULATOR_SN = "emulator-(\\d+)"; //$NON-NLS-1$
/** Serial number of the device */
- String serialNumber = null;
+ private String mSerialNumber = null;
/** Name of the AVD */
- String mAvdName = null;
+ private String mAvdName = null;
/** State of the device. */
- DeviceState state = null;
+ private DeviceState mState = null;
/** Device properties. */
private final Map<String, String> mProperties = new HashMap<String, String>();
@@ -91,22 +60,42 @@ public final class Device implements IDevice {
* @see com.android.ddmlib.IDevice#getSerialNumber()
*/
public String getSerialNumber() {
- return serialNumber;
+ return mSerialNumber;
}
+ /** {@inheritDoc} */
public String getAvdName() {
return mAvdName;
}
+ /**
+ * Sets the name of the AVD
+ */
+ void setAvdName(String avdName) {
+ if (isEmulator() == false) {
+ throw new IllegalArgumentException(
+ "Cannot set the AVD name of the device is not an emulator");
+ }
+
+ mAvdName = avdName;
+ }
/*
* (non-Javadoc)
* @see com.android.ddmlib.IDevice#getState()
*/
public DeviceState getState() {
- return state;
+ return mState;
}
+ /**
+ * Changes the state of the device.
+ */
+ void setState(DeviceState state) {
+ mState = state;
+ }
+
+
/*
* (non-Javadoc)
* @see com.android.ddmlib.IDevice#getProperties()
@@ -134,7 +123,7 @@ public final class Device implements IDevice {
@Override
public String toString() {
- return serialNumber;
+ return mSerialNumber;
}
/*
@@ -142,7 +131,7 @@ public final class Device implements IDevice {
* @see com.android.ddmlib.IDevice#isOnline()
*/
public boolean isOnline() {
- return state == DeviceState.ONLINE;
+ return mState == DeviceState.ONLINE;
}
/*
@@ -150,7 +139,7 @@ public final class Device implements IDevice {
* @see com.android.ddmlib.IDevice#isEmulator()
*/
public boolean isEmulator() {
- return serialNumber.matches(RE_EMULATOR_SN);
+ return mSerialNumber.matches(RE_EMULATOR_SN);
}
/*
@@ -158,7 +147,7 @@ public final class Device implements IDevice {
* @see com.android.ddmlib.IDevice#isOffline()
*/
public boolean isOffline() {
- return state == DeviceState.OFFLINE;
+ return mState == DeviceState.OFFLINE;
}
/*
@@ -166,7 +155,7 @@ public final class Device implements IDevice {
* @see com.android.ddmlib.IDevice#isBootLoader()
*/
public boolean isBootLoader() {
- return state == DeviceState.BOOTLOADER;
+ return mState == DeviceState.BOOTLOADER;
}
/*
@@ -305,8 +294,10 @@ public final class Device implements IDevice {
}
- Device(DeviceMonitor monitor) {
+ Device(DeviceMonitor monitor, String serialNumber, DeviceState deviceState) {
mMonitor = monitor;
+ mSerialNumber = serialNumber;
+ mState = deviceState;
}
DeviceMonitor getMonitor() {
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/DeviceMonitor.java b/ddms/libs/ddmlib/src/com/android/ddmlib/DeviceMonitor.java
index 87e023a..3382067 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/DeviceMonitor.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/DeviceMonitor.java
@@ -18,7 +18,7 @@ package com.android.ddmlib;
import com.android.ddmlib.AdbHelper.AdbResponse;
import com.android.ddmlib.DebugPortManager.IDebugPortProvider;
-import com.android.ddmlib.Device.DeviceState;
+import com.android.ddmlib.IDevice.DeviceState;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@@ -112,11 +112,11 @@ final class DeviceMonitor {
boolean isMonitoring() {
return mMonitoring;
}
-
+
int getConnectionAttemptCount() {
return mConnectionAttempt;
}
-
+
int getRestartAttemptCount() {
return mRestartAttemptCount;
}
@@ -129,7 +129,7 @@ final class DeviceMonitor {
return mDevices.toArray(new Device[mDevices.size()]);
}
}
-
+
boolean hasInitialDeviceList() {
return mInitialDeviceListDone;
}
@@ -184,11 +184,11 @@ final class DeviceMonitor {
if (mMonitoring) {
// read the length of the incoming message
int length = readLength(mMainAdbConnection, mLengthBuffer);
-
+
if (length >= 0) {
// read the incoming message
processIncomingDeviceData(length);
-
+
// flag the fact that we have build the list at least once.
mInitialDeviceListDone = true;
}
@@ -278,20 +278,19 @@ final class DeviceMonitor {
*/
private void processIncomingDeviceData(int length) throws IOException {
ArrayList<Device> list = new ArrayList<Device>();
-
+
if (length > 0) {
byte[] buffer = new byte[length];
String result = read(mMainAdbConnection, buffer);
-
+
String[] devices = result.split("\n"); // $NON-NLS-1$
for (String d : devices) {
String[] param = d.split("\t"); // $NON-NLS-1$
if (param.length == 2) {
// new adb uses only serial numbers to identify devices
- Device device = new Device(this);
- device.serialNumber = param[0];
- device.state = DeviceState.getState(param[1]);
+ Device device = new Device(this, param[0] /*serialnumber*/,
+ DeviceState.getState(param[1]));
//add the device to the list
list.add(device);
@@ -319,24 +318,24 @@ final class DeviceMonitor {
// * if we do not find it, we remove it from the current list.
// Once this is done, the new list contains device we aren't monitoring yet, so we
// add them to the list, and start monitoring them.
-
+
for (int d = 0 ; d < mDevices.size() ;) {
Device device = mDevices.get(d);
-
+
// look for a similar device in the new list.
int count = newList.size();
boolean foundMatch = false;
for (int dd = 0 ; dd < count ; dd++) {
Device newDevice = newList.get(dd);
// see if it matches in id and serial number.
- if (newDevice.serialNumber.equals(device.serialNumber)) {
+ if (newDevice.getSerialNumber().equals(device.getSerialNumber())) {
foundMatch = true;
-
+
// update the state if needed.
- if (device.state != newDevice.state) {
- device.state = newDevice.state;
+ if (device.getState() != newDevice.getState()) {
+ device.setState(newDevice.getState());
device.update(Device.CHANGE_STATE);
-
+
// if the device just got ready/online, we need to start
// monitoring it.
if (device.isOnline()) {
@@ -344,7 +343,7 @@ final class DeviceMonitor {
if (startMonitoringDevice(device) == false) {
Log.e("DeviceMonitor",
"Failed to start monitoring "
- + device.serialNumber);
+ + device.getSerialNumber());
}
}
@@ -353,13 +352,13 @@ final class DeviceMonitor {
}
}
}
-
+
// remove the new device from the list since it's been used
newList.remove(dd);
break;
}
}
-
+
if (foundMatch == false) {
// the device is gone, we need to remove it, and keep current index
// to process the next one.
@@ -370,21 +369,21 @@ final class DeviceMonitor {
d++;
}
}
-
+
// at this point we should still have some new devices in newList, so we
// process them.
for (Device newDevice : newList) {
// add them to the list
mDevices.add(newDevice);
mServer.deviceConnected(newDevice);
-
+
// start monitoring them.
if (AndroidDebugBridge.getClientSupport() == true) {
if (newDevice.isOnline()) {
startMonitoringDevice(newDevice);
}
}
-
+
// look for their build info.
if (newDevice.isOnline()) {
queryNewDeviceForInfo(newDevice);
@@ -398,7 +397,7 @@ final class DeviceMonitor {
private void removeDevice(Device device) {
device.clearClientList();
mDevices.remove(device);
-
+
SocketChannel channel = device.getClientMonitoringSocket();
if (channel != null) {
try {
@@ -419,12 +418,12 @@ final class DeviceMonitor {
// first get the list of properties.
device.executeShellCommand(GetPropReceiver.GETPROP_COMMAND,
new GetPropReceiver(device));
-
+
// now get the emulator Virtual Device name (if applicable).
if (device.isEmulator()) {
EmulatorConsole console = EmulatorConsole.getConsole(device);
if (console != null) {
- device.mAvdName = console.getAvdName();
+ device.setAvdName(console.getAvdName());
}
}
} catch (IOException e) {
@@ -510,7 +509,7 @@ final class DeviceMonitor {
MonitorThread monitorThread = MonitorThread.getInstance();
for (Client client : clients) {
- Device device = client.getDevice();
+ Device device = client.getDeviceImpl();
int pid = client.getClientData().getPid();
monitorThread.dropClient(client, false /* notify */);
@@ -623,10 +622,10 @@ final class DeviceMonitor {
if (length > 0) {
byte[] buffer = new byte[length];
String result = read(monitorSocket, buffer);
-
+
// split each line in its own list and create an array of integer pid
String[] pids = result.split("\n"); //$NON-NLS-1$
-
+
for (String pid : pids) {
try {
pidList.add(Integer.valueOf(pid));
@@ -662,7 +661,7 @@ final class DeviceMonitor {
for (int c = 0 ; c < clients.size() ;) {
Client client = clients.get(c);
int pid = client.getClientData().getPid();
-
+
// look for a matching pid
Integer match = null;
for (Integer matchingPid : pidList) {
@@ -671,7 +670,7 @@ final class DeviceMonitor {
break;
}
}
-
+
if (match != null) {
pidList.remove(match);
c++; // move on to the next client.
@@ -705,7 +704,7 @@ final class DeviceMonitor {
* @return
*/
private void openClient(Device device, int pid, int port, MonitorThread monitorThread) {
-
+
SocketChannel clientSocket;
try {
clientSocket = AdbHelper.createPassThroughConnection(
@@ -721,7 +720,7 @@ final class DeviceMonitor {
"Failed to connect to client '" + pid + "': " + ioe.getMessage());
return ;
}
-
+
createClient(device, pid, clientSocket, port, monitorThread);
}
@@ -814,7 +813,7 @@ final class DeviceMonitor {
}
}
}
-
+
/**
* Reads the length of the next message from a socket.
* @param socket The {@link SocketChannel} to read from.
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java b/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java
index f3986ed..75347c6 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java
@@ -41,7 +41,7 @@ import java.util.regex.Pattern;
* code removes <code>\r</code> and waits for <code>\n</code>.
* <p/>However this means you <i>may</i> receive <code>\r\n</code> when reading from the console.
* <p/>
- * <b>This API will change in the near future.</b>
+ * <b>This API will change in the near future.</b>
*/
public final class EmulatorConsole {
@@ -65,7 +65,7 @@ public final class EmulatorConsole {
private final static String COMMAND_NETWORK_STATUS = "network status\r\n"; //$NON-NLS-1$
private final static String COMMAND_NETWORK_SPEED = "network speed %1$s\r\n"; //$NON-NLS-1$
private final static String COMMAND_NETWORK_LATENCY = "network delay %1$s\r\n"; //$NON-NLS-1$
- private final static String COMMAND_GPS =
+ private final static String COMMAND_GPS =
"geo nmea $GPGGA,%1$02d%2$02d%3$02d.%4$03d," + //$NON-NLS-1$
"%5$03d%6$09.6f,%7$c,%8$03d%9$09.6f,%10$c," + //$NON-NLS-1$
"1,10,0.0,0.0,0,0.0,0,0.0,0000\r\n"; //$NON-NLS-1$
@@ -202,9 +202,9 @@ public final class EmulatorConsole {
* @param d The device that the console links to.
* @return an <code>EmulatorConsole</code> object or <code>null</code> if the connection failed.
*/
- public static synchronized EmulatorConsole getConsole(Device d) {
+ public static synchronized EmulatorConsole getConsole(IDevice d) {
// we need to make sure that the device is an emulator
- Matcher m = sEmulatorRegexp.matcher(d.serialNumber);
+ Matcher m = sEmulatorRegexp.matcher(d.getSerialNumber());
if (m.matches()) {
// get the port number. This is the console port.
int port;
@@ -308,7 +308,7 @@ public final class EmulatorConsole {
RemoveConsole(mPort);
}
}
-
+
public synchronized String getAvdName() {
if (sendCommand(COMMAND_AVD_NAME)) {
String[] result = readLines();
@@ -323,7 +323,7 @@ public final class EmulatorConsole {
}
}
}
-
+
return null;
}
@@ -517,18 +517,18 @@ public final class EmulatorConsole {
String command = String.format(COMMAND_NETWORK_LATENCY, NETWORK_LATENCIES[selectionIndex]);
return processCommand(command);
}
-
+
public synchronized String sendLocation(double longitude, double latitude, double elevation) {
-
+
Calendar c = Calendar.getInstance();
-
+
double absLong = Math.abs(longitude);
int longDegree = (int)Math.floor(absLong);
char longDirection = 'E';
if (longitude < 0) {
longDirection = 'W';
}
-
+
double longMinute = (absLong - Math.floor(absLong)) * 60;
double absLat = Math.abs(latitude);
@@ -537,15 +537,15 @@ public final class EmulatorConsole {
if (latitude < 0) {
latDirection = 'S';
}
-
+
double latMinute = (absLat - Math.floor(absLat)) * 60;
-
+
String command = String.format(COMMAND_GPS,
c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE),
c.get(Calendar.SECOND), c.get(Calendar.MILLISECOND),
latDegree, latMinute, latDirection,
longDegree, longMinute, longDirection);
-
+
return processCommand(command);
}
@@ -617,7 +617,7 @@ public final class EmulatorConsole {
ByteBuffer buf = ByteBuffer.wrap(mBuffer, 0, mBuffer.length);
int numWaits = 0;
boolean stop = false;
-
+
while (buf.position() != buf.limit() && stop == false) {
int count;
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/IDevice.java b/ddms/libs/ddmlib/src/com/android/ddmlib/IDevice.java
index a54af8a..3a2bd55 100755
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/IDevice.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/IDevice.java
@@ -16,7 +16,6 @@
package com.android.ddmlib;
-import com.android.ddmlib.Device.DeviceState;
import com.android.ddmlib.log.LogReceiver;
import java.io.IOException;
@@ -41,6 +40,35 @@ public interface IDevice {
public static final int CHANGE_BUILD_INFO = 0x0004;
/**
+ * The state of a device.
+ */
+ public static enum DeviceState {
+ BOOTLOADER("bootloader"), //$NON-NLS-1$
+ OFFLINE("offline"), //$NON-NLS-1$
+ ONLINE("device"); //$NON-NLS-1$
+
+ private String mState;
+
+ DeviceState(String state) {
+ mState = state;
+ }
+
+ /**
+ * Returns a {@link DeviceState} from the string returned by <code>adb devices</code>.
+ * @param state the device state.
+ * @return a {@link DeviceState} object or <code>null</code> if the state is unknown.
+ */
+ public static DeviceState getState(String state) {
+ for (DeviceState deviceState : values()) {
+ if (deviceState.mState.equals(state)) {
+ return deviceState;
+ }
+ }
+ return null;
+ }
+ }
+
+ /**
* Returns the serial number of the device.
*/
public String getSerialNumber();
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/MonitorThread.java b/ddms/libs/ddmlib/src/com/android/ddmlib/MonitorThread.java
index 79eb5bb..3089c2e 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/MonitorThread.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/MonitorThread.java
@@ -103,7 +103,7 @@ final class MonitorThread extends Thread {
/**
- * Sets or changes the port number for "debug selected".
+ * Sets or changes the port number for "debug selected".
*/
synchronized void setDebugSelectedPort(int port) throws IllegalStateException {
if (mInstance == null) {
@@ -206,7 +206,7 @@ final class MonitorThread extends Thread {
}
while (!mQuit) {
-
+
try {
/*
* sync with new registrations: we wait until addClient is done before going through
@@ -215,7 +215,7 @@ final class MonitorThread extends Thread {
*/
synchronized (mClientList) {
}
-
+
// (re-)open the "debug selected" port, if it's not opened yet or
// if the port changed.
try {
@@ -234,7 +234,7 @@ final class MonitorThread extends Thread {
Log.e("ddms", ioe);
mNewDebugSelectedPort = mDebugSelectedPort; // no retry
}
-
+
int count;
try {
count = mSelector.select();
@@ -244,20 +244,20 @@ final class MonitorThread extends Thread {
} catch (CancelledKeyException cke) {
continue;
}
-
+
if (count == 0) {
// somebody called wakeup() ?
// Log.i("ddms", "selector looping");
continue;
}
-
+
Set<SelectionKey> keys = mSelector.selectedKeys();
Iterator<SelectionKey> iter = keys.iterator();
-
+
while (iter.hasNext()) {
SelectionKey key = iter.next();
iter.remove();
-
+
try {
if (key.attachment() instanceof Client) {
processClientActivity(key);
@@ -300,7 +300,7 @@ final class MonitorThread extends Thread {
*/
private void processClientActivity(SelectionKey key) {
Client client = (Client)key.attachment();
-
+
try {
if (key.isReadable() == false || key.isValid() == false) {
Log.d("ddms", "Invalid key from " + client + ". Dropping client.");
@@ -423,7 +423,7 @@ final class MonitorThread extends Thread {
* @param notify
*/
synchronized void dropClient(Client client, boolean notify) {
- if (mInstance == null) {
+ if (mInstance == null) {
return;
}
@@ -551,13 +551,13 @@ final class MonitorThread extends Thread {
// we should drop the client, but also attempt to reopen it.
// This is done by the DeviceMonitor.
- client.getDevice().getMonitor().addClientToDropAndReopen(client,
+ client.getDeviceImpl().getMonitor().addClientToDropAndReopen(client,
IDebugPortProvider.NO_STATIC_PORT);
} else {
Log.i("ddms", " (recycling client connection as well)");
// we should drop the client, but also attempt to reopen it.
// This is done by the DeviceMonitor.
- client.getDevice().getMonitor().addClientToDropAndReopen(client,
+ client.getDeviceImpl().getMonitor().addClientToDropAndReopen(client,
IDebugPortProvider.NO_STATIC_PORT);
}
}
@@ -644,7 +644,7 @@ final class MonitorThread extends Thread {
}
}
}
-
+
/*
* Broadcast an event to all message handlers.
*/
@@ -719,7 +719,7 @@ final class MonitorThread extends Thread {
}
mDebugSelectedChan.register(mSelector, SelectionKey.OP_ACCEPT, this);
-
+
return true;
} catch (java.net.BindException e) {
displayDebugSelectedBindError(mNewDebugSelectedPort);
@@ -727,7 +727,7 @@ final class MonitorThread extends Thread {
// do not attempt to reopen it.
mDebugSelectedChan = null;
mNewDebugSelectedPort = -1;
-
+
return false;
}
}
diff --git a/ddms/libs/ddmlib/src/com/android/ddmlib/log/EventLogParser.java b/ddms/libs/ddmlib/src/com/android/ddmlib/log/EventLogParser.java
index 85e99c1..0b2ce69 100644
--- a/ddms/libs/ddmlib/src/com/android/ddmlib/log/EventLogParser.java
+++ b/ddms/libs/ddmlib/src/com/android/ddmlib/log/EventLogParser.java
@@ -16,7 +16,7 @@
package com.android.ddmlib.log;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
import com.android.ddmlib.Log;
import com.android.ddmlib.MultiLineReceiver;
import com.android.ddmlib.log.EventContainer.EventValueType;
@@ -55,7 +55,7 @@ public final class EventLogParser {
private final static int EVENT_TYPE_LONG = 1;
private final static int EVENT_TYPE_STRING = 2;
private final static int EVENT_TYPE_LIST = 3;
-
+
private final static Pattern PATTERN_SIMPLE_TAG = Pattern.compile(
"^(\\d+)\\s+([A-Za-z0-9_]+)\\s*$"); //$NON-NLS-1$
private final static Pattern PATTERN_TAG_WITH_DESC = Pattern.compile(
@@ -67,9 +67,9 @@ public final class EventLogParser {
"(\\d\\d)-(\\d\\d)\\s(\\d\\d):(\\d\\d):(\\d\\d).(\\d{3})\\s+I/([a-zA-Z0-9_]+)\\s*\\(\\s*(\\d+)\\):\\s+(.*)"); //$NON-NLS-1$
private final TreeMap<Integer, String> mTagMap = new TreeMap<Integer, String>();
-
+
private final TreeMap<Integer, EventValueDescription[]> mValueDescriptionMap =
- new TreeMap<Integer, EventValueDescription[]>();
+ new TreeMap<Integer, EventValueDescription[]>();
public EventLogParser() {
}
@@ -82,7 +82,7 @@ public final class EventLogParser {
* @param device The device.
* @return <code>true</code> if success, <code>false</code> if failure or cancellation.
*/
- public boolean init(Device device) {
+ public boolean init(IDevice device) {
// read the event tag map file on the device.
try {
device.executeShellCommand("cat " + EVENT_TAG_MAP_FILE, //$NON-NLS-1$
@@ -103,7 +103,7 @@ public final class EventLogParser {
return true;
}
-
+
/**
* Inits the parser with the content of a tag file.
* @param tagFileContent the lines of a tag file.
@@ -115,7 +115,7 @@ public final class EventLogParser {
}
return true;
}
-
+
/**
* Inits the parser with a specified event-log-tags file.
* @param filePath
@@ -124,7 +124,7 @@ public final class EventLogParser {
public boolean init(String filePath) {
try {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
-
+
String line = null;
do {
line = reader.readLine();
@@ -132,13 +132,13 @@ public final class EventLogParser {
processTagLine(line);
}
} while (line != null);
-
+
return true;
} catch (IOException e) {
return false;
}
}
-
+
/**
* Processes a line from the event-log-tags file.
* @param line the line to process
@@ -154,7 +154,7 @@ public final class EventLogParser {
if (name != null && mTagMap.get(value) == null) {
mTagMap.put(value, name);
}
-
+
// special case for the GC tag. We ignore what is in the file,
// and take what the custom GcEventContainer class tells us.
// This is due to the event encoding several values on 2 longs.
@@ -163,12 +163,12 @@ public final class EventLogParser {
mValueDescriptionMap.put(value,
GcEventContainer.getValueDescriptions());
} else {
-
+
String description = m.group(3);
if (description != null && description.length() > 0) {
EventValueDescription[] desc =
processDescription(description);
-
+
if (desc != null) {
mValueDescriptionMap.put(value, desc);
}
@@ -189,12 +189,12 @@ public final class EventLogParser {
}
}
}
-
+
private EventValueDescription[] processDescription(String description) {
String[] descriptions = description.split("\\s*,\\s*"); //$NON-NLS-1$
-
+
ArrayList<EventValueDescription> list = new ArrayList<EventValueDescription>();
-
+
for (String desc : descriptions) {
Matcher m = PATTERN_DESCRIPTION.matcher(desc);
if (m.matches()) {
@@ -208,15 +208,15 @@ public final class EventLogParser {
// just ignore this description if the value is not recognized.
// TODO: log the error.
}
-
+
typeString = m.group(3);
if (typeString != null && typeString.length() > 0) {
//skip the |
typeString = typeString.substring(1);
-
+
typeValue = Integer.parseInt(typeString);
ValueType valueType = ValueType.getValueType(typeValue);
-
+
list.add(new EventValueDescription(name, eventValueType, valueType));
} else {
list.add(new EventValueDescription(name, eventValueType));
@@ -233,15 +233,15 @@ public final class EventLogParser {
String.format("Can't parse %1$s", description)); //$NON-NLS-1$
}
}
-
+
if (list.size() == 0) {
return null;
}
-
+
return list.toArray(new EventValueDescription[list.size()]);
-
+
}
-
+
public EventContainer parse(LogEntry entry) {
if (entry.len < 4) {
return null;
@@ -251,7 +251,7 @@ public final class EventLogParser {
int tagValue = ArrayHelper.swap32bitFromArray(entry.data, inOffset);
inOffset += 4;
-
+
String tag = mTagMap.get(tagValue);
if (tag == null) {
Log.e("EventLogParser", String.format("unknown tag number: %1$d", tagValue));
@@ -275,10 +275,10 @@ public final class EventLogParser {
} else {
event = new EventContainer(entry, tagValue, data);
}
-
+
return event;
}
-
+
public EventContainer parse(String textLogLine) {
// line will look like
// 04-29 23:16:16.691 I/dvm_gc_info( 427): <data>
@@ -289,7 +289,7 @@ public final class EventLogParser {
if (textLogLine.length() == 0) {
return null;
}
-
+
// parse the header first
Matcher m = TEXT_LOG_LINE.matcher(textLogLine);
if (m.matches()) {
@@ -300,7 +300,7 @@ public final class EventLogParser {
int minutes = Integer.parseInt(m.group(4));
int seconds = Integer.parseInt(m.group(5));
int milliseconds = Integer.parseInt(m.group(6));
-
+
// convert into seconds since epoch and nano-seconds.
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), month-1, day, hours, minutes, seconds);
@@ -308,7 +308,7 @@ public final class EventLogParser {
int nsec = milliseconds * 1000000;
String tag = m.group(7);
-
+
// get the numerical tag value
int tagValue = -1;
Set<Entry<Integer, String>> tagSet = mTagMap.entrySet();
@@ -318,18 +318,18 @@ public final class EventLogParser {
break;
}
}
-
+
if (tagValue == -1) {
return null;
}
-
+
int pid = Integer.parseInt(m.group(8));
-
+
Object data = parseTextData(m.group(9), tagValue);
if (data == null) {
return null;
}
-
+
// now we can allocate and return the EventContainer
EventContainer event = null;
if (tagValue == GcEventContainer.GC_EVENT_TAG) {
@@ -337,20 +337,20 @@ public final class EventLogParser {
} else {
event = new EventContainer(tagValue, pid, -1 /* tid */, sec, nsec, data);
}
-
+
return event;
} catch (NumberFormatException e) {
return null;
}
}
-
+
return null;
}
-
+
public Map<Integer, String> getTagMap() {
return mTagMap;
}
-
+
public Map<Integer, EventValueDescription[]> getEventInfoMap() {
return mValueDescriptionMap;
}
@@ -370,7 +370,7 @@ public final class EventLogParser {
if (eventData.length - dataOffset < 1)
return -1;
-
+
int offset = dataOffset;
int type = eventData[offset++];
@@ -385,7 +385,7 @@ public final class EventLogParser {
return -1;
ival = ArrayHelper.swap32bitFromArray(eventData, offset);
offset += 4;
-
+
list.add(new Integer(ival));
}
break;
@@ -396,7 +396,7 @@ public final class EventLogParser {
return -1;
lval = ArrayHelper.swap64bitFromArray(eventData, offset);
offset += 8;
-
+
list.add(new Long(lval));
}
break;
@@ -410,7 +410,7 @@ public final class EventLogParser {
if (eventData.length - offset < strLen)
return -1;
-
+
// get the string
try {
String str = new String(eventData, offset, strLen, "UTF-8"); //$NON-NLS-1$
@@ -434,7 +434,7 @@ public final class EventLogParser {
if (result == -1) {
return result;
}
-
+
offset += result;
}
@@ -446,59 +446,59 @@ public final class EventLogParser {
String.format("Unknown binary event type %1$d", type)); //$NON-NLS-1$
return -1;
}
-
+
return offset - dataOffset;
}
-
+
private Object parseTextData(String data, int tagValue) {
// first, get the description of what we're supposed to parse
EventValueDescription[] desc = mValueDescriptionMap.get(tagValue);
-
+
if (desc == null) {
// TODO parse and create string values.
return null;
}
-
+
if (desc.length == 1) {
return getObjectFromString(data, desc[0].getEventValueType());
} else if (data.startsWith("[") && data.endsWith("]")) {
data = data.substring(1, data.length() - 1);
-
+
// get each individual values as String
String[] values = data.split(",");
-
+
if (tagValue == GcEventContainer.GC_EVENT_TAG) {
// special case for the GC event!
Object[] objects = new Object[2];
-
+
objects[0] = getObjectFromString(values[0], EventValueType.LONG);
objects[1] = getObjectFromString(values[1], EventValueType.LONG);
-
+
return objects;
} else {
// must be the same number as the number of descriptors.
if (values.length != desc.length) {
return null;
}
-
+
Object[] objects = new Object[values.length];
-
+
for (int i = 0 ; i < desc.length ; i++) {
Object obj = getObjectFromString(values[i], desc[i].getEventValueType());
if (obj == null) {
return null;
}
- objects[i] = obj;
+ objects[i] = obj;
}
-
+
return objects;
}
}
-
+
return null;
}
-
+
private Object getObjectFromString(String value, EventValueType type) {
try {
switch (type) {
@@ -512,14 +512,14 @@ public final class EventLogParser {
} catch (NumberFormatException e) {
// do nothing, we'll return null.
}
-
+
return null;
}
/**
- * Recreates the event-log-tags at the specified file path.
+ * Recreates the event-log-tags at the specified file path.
* @param filePath the file path to write the file.
- * @throws IOException
+ * @throws IOException
*/
public void saveTags(String filePath) throws IOException {
File destFile = new File(filePath);
@@ -527,16 +527,16 @@ public final class EventLogParser {
FileOutputStream fos = null;
try {
-
+
fos = new FileOutputStream(destFile);
-
+
for (Integer key : mTagMap.keySet()) {
// get the tag name
String tagName = mTagMap.get(key);
-
+
// get the value descriptions
EventValueDescription[] descriptors = mValueDescriptionMap.get(key);
-
+
String line = null;
if (descriptors != null) {
StringBuilder sb = new StringBuilder();
@@ -557,12 +557,12 @@ public final class EventLogParser {
sb.append("|)"); //$NON-NLS-1$
}
sb.append("\n"); //$NON-NLS-1$
-
+
line = sb.toString();
} else {
line = String.format("%1$d %2$s\n", key, tagName); //$NON-NLS-1$
}
-
+
byte[] buffer = line.getBytes();
fos.write(buffer);
}
diff --git a/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/RemoteAndroidTestRunnerTest.java b/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/RemoteAndroidTestRunnerTest.java
index 864e219..04b42cc 100644
--- a/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/RemoteAndroidTestRunnerTest.java
+++ b/ddms/libs/ddmlib/tests/src/com/android/ddmlib/testrunner/RemoteAndroidTestRunnerTest.java
@@ -22,7 +22,6 @@ import com.android.ddmlib.IDevice;
import com.android.ddmlib.IShellOutputReceiver;
import com.android.ddmlib.RawImage;
import com.android.ddmlib.SyncService;
-import com.android.ddmlib.Device.DeviceState;
import com.android.ddmlib.log.LogReceiver;
import java.io.IOException;
@@ -100,7 +99,7 @@ public class RemoteAndroidTestRunnerTest extends TestCase {
final String extraArgValue = "blahValue";
mRunner.addInstrumentationArg(extraArgName, extraArgValue);
mRunner.run(new EmptyListener());
- assertStringsEquals(String.format("am instrument -w -r -e %s %s %s/%s", extraArgName,
+ assertStringsEquals(String.format("am instrument -w -r -e %s %s %s/%s", extraArgName,
extraArgValue, TEST_PACKAGE, TEST_RUNNER), mMockDevice.getLastShellCommand());
}
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/DevicePanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/DevicePanel.java
index 81b757e..d9d6fa1 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/DevicePanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/DevicePanel.java
@@ -20,11 +20,11 @@ import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.Client;
import com.android.ddmlib.ClientData;
import com.android.ddmlib.DdmPreferences;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
import com.android.ddmlib.AndroidDebugBridge.IClientChangeListener;
import com.android.ddmlib.AndroidDebugBridge.IDebugBridgeChangeListener;
import com.android.ddmlib.AndroidDebugBridge.IDeviceChangeListener;
-import com.android.ddmlib.Device.DeviceState;
+import com.android.ddmlib.IDevice.DeviceState;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.ILabelProviderListener;
@@ -69,16 +69,16 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
private final static int CLIENT_COL_THREAD = 2;
private final static int CLIENT_COL_HEAP = 3;
private final static int CLIENT_COL_PORT = 4;
-
+
public final static int ICON_WIDTH = 16;
public final static String ICON_THREAD = "thread.png"; //$NON-NLS-1$
public final static String ICON_HEAP = "heap.png"; //$NON-NLS-1$
public final static String ICON_HALT = "halt.png"; //$NON-NLS-1$
public final static String ICON_GC = "gc.png"; //$NON-NLS-1$
- private Device mCurrentDevice;
+ private IDevice mCurrentDevice;
private Client mCurrentClient;
-
+
private Tree mTree;
private TreeViewer mTreeViewer;
@@ -92,8 +92,8 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
private Image mDebugErrorImage;
private final ArrayList<IUiSelectionListener> mListeners = new ArrayList<IUiSelectionListener>();
-
- private final ArrayList<Device> mDevicesToExpand = new ArrayList<Device>();
+
+ private final ArrayList<IDevice> mDevicesToExpand = new ArrayList<IDevice>();
private IImageLoader mLoader;
@@ -102,13 +102,13 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
/**
* A Content provider for the {@link TreeViewer}.
* <p/>
- * The input is a {@link AndroidDebugBridge}. First level elements are {@link Device} objects,
+ * The input is a {@link AndroidDebugBridge}. First level elements are {@link IDevice} objects,
* and second level elements are {@link Client} object.
*/
private class ContentProvider implements ITreeContentProvider {
public Object[] getChildren(Object parentElement) {
- if (parentElement instanceof Device) {
- return ((Device)parentElement).getClients();
+ if (parentElement instanceof IDevice) {
+ return ((IDevice)parentElement).getClients();
}
return new Object[0];
}
@@ -121,8 +121,8 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
}
public boolean hasChildren(Object element) {
- if (element instanceof Device) {
- return ((Device)element).hasClients();
+ if (element instanceof IDevice) {
+ return ((IDevice)element).hasClients();
}
// Clients never have children.
@@ -147,13 +147,13 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
/**
* A Label Provider for the {@link TreeViewer} in {@link DevicePanel}. It provides
- * labels and images for {@link Device} and {@link Client} objects.
+ * labels and images for {@link IDevice} and {@link Client} objects.
*/
private class LabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
- if (columnIndex == DEVICE_COL_SERIAL && element instanceof Device) {
- Device device = (Device)element;
+ if (columnIndex == DEVICE_COL_SERIAL && element instanceof IDevice) {
+ IDevice device = (IDevice)element;
if (device.isEmulator()) {
return mEmulatorImage;
}
@@ -192,17 +192,17 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
}
public String getColumnText(Object element, int columnIndex) {
- if (element instanceof Device) {
- Device device = (Device)element;
+ if (element instanceof IDevice) {
+ IDevice device = (IDevice)element;
switch (columnIndex) {
case DEVICE_COL_SERIAL:
return device.getSerialNumber();
case DEVICE_COL_STATE:
return getStateString(device);
case DEVICE_COL_BUILD: {
- String version = device.getProperty(Device.PROP_BUILD_VERSION);
+ String version = device.getProperty(IDevice.PROP_BUILD_VERSION);
if (version != null) {
- String debuggable = device.getProperty(Device.PROP_DEBUGGABLE);
+ String debuggable = device.getProperty(IDevice.PROP_DEBUGGABLE);
if (device.isEmulator()) {
String avdName = device.getAvdName();
if (avdName == null) {
@@ -279,15 +279,15 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
/**
* Classes which implement this interface provide methods that deals
- * with {@link Device} and {@link Client} selection changes coming from the ui.
+ * with {@link IDevice} and {@link Client} selection changes coming from the ui.
*/
public interface IUiSelectionListener {
/**
- * Sent when a new {@link Device} and {@link Client} are selected.
+ * Sent when a new {@link IDevice} and {@link Client} are selected.
* @param selectedDevice the selected device. If null, no devices are selected.
* @param selectedClient The selected client. If null, no clients are selected.
*/
- public void selectionChanged(Device selectedDevice, Client selectedClient);
+ public void selectionChanged(IDevice selectedDevice, Client selectedClient);
}
/**
@@ -359,7 +359,7 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
return mTree;
}
-
+
/**
* Sets the focus to the proper control inside the panel.
*/
@@ -371,7 +371,7 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
@Override
protected void postCreation() {
// ask for notification of changes in AndroidDebugBridge (a new one is created when
- // adb is restarted from a different location), Device and Client objects.
+ // adb is restarted from a different location), IDevice and Client objects.
AndroidDebugBridge.addDebugBridgeChangeListener(this);
AndroidDebugBridge.addDeviceChangeListener(this);
AndroidDebugBridge.addClientChangeListener(this);
@@ -391,10 +391,10 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
}
/**
- * Returns the selected {@link Device}. If a {@link Client} is selected, it returns the
- * Device object containing the client.
+ * Returns the selected {@link IDevice}. If a {@link Client} is selected, it returns the
+ * IDevice object containing the client.
*/
- public Device getSelectedDevice() {
+ public IDevice getSelectedDevice() {
return mCurrentDevice;
}
@@ -404,7 +404,7 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
public void killSelectedClient() {
if (mCurrentClient != null) {
Client client = mCurrentClient;
-
+
// reset the selection to the device.
TreePath treePath = new TreePath(new Object[] { mCurrentDevice });
TreeSelection treeSelection = new TreeSelection(treePath);
@@ -413,7 +413,7 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
client.kill();
}
}
-
+
/**
* Forces a GC on the selected {@link Client}.
*/
@@ -422,13 +422,13 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
mCurrentClient.executeGarbageCollector();
}
}
-
+
public void setEnabledHeapOnSelectedClient(boolean enable) {
if (mCurrentClient != null) {
mCurrentClient.setHeapUpdateEnabled(enable);
}
}
-
+
public void setEnabledThreadOnSelectedClient(boolean enable) {
if (mCurrentClient != null) {
mCurrentClient.setThreadUpdateEnabled(enable);
@@ -476,9 +476,9 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
* This is sent from a non UI thread.
* @param device the new device.
*
- * @see IDeviceChangeListener#deviceConnected(Device)
+ * @see IDeviceChangeListener#deviceConnected(IDevice)
*/
- public void deviceConnected(Device device) {
+ public void deviceConnected(IDevice device) {
exec(new Runnable() {
public void run() {
if (mTree.isDisposed() == false) {
@@ -511,11 +511,11 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
* This is sent from a non UI thread.
* @param device the new device.
*
- * @see IDeviceChangeListener#deviceDisconnected(Device)
+ * @see IDeviceChangeListener#deviceDisconnected(IDevice)
*/
- public void deviceDisconnected(Device device) {
+ public void deviceDisconnected(IDevice device) {
deviceConnected(device);
-
+
// just in case, we remove it from the list of devices to expand.
synchronized (mDevicesToExpand) {
mDevicesToExpand.remove(device);
@@ -529,9 +529,9 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
* @param device the device that was updated.
* @param changeMask the mask indicating what changed.
*
- * @see IDeviceChangeListener#deviceChanged(Device)
+ * @see IDeviceChangeListener#deviceChanged(IDevice)
*/
- public void deviceChanged(final Device device, int changeMask) {
+ public void deviceChanged(final IDevice device, int changeMask) {
boolean expand = false;
synchronized (mDevicesToExpand) {
int index = mDevicesToExpand.indexOf(device);
@@ -540,7 +540,7 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
expand = true;
}
}
-
+
final boolean finalExpand = expand;
exec(new Runnable() {
@@ -549,22 +549,22 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
// look if the current device is selected. This is done in case the current
// client of this particular device was killed. In this case, we'll need to
// manually reselect the device.
-
- Device selectedDevice = getSelectedDevice();
+
+ IDevice selectedDevice = getSelectedDevice();
// refresh the device
mTreeViewer.refresh(device);
-
+
// if the selected device was the changed device and the new selection is
// empty, we reselect the device.
if (selectedDevice == device && mTreeViewer.getSelection().isEmpty()) {
mTreeViewer.setSelection(new TreeSelection(new TreePath(
new Object[] { device })));
}
-
+
// notify the listener of a possible selection change.
notifyListeners();
-
+
if (finalExpand) {
mTreeViewer.setExpandedState(device, true);
}
@@ -606,7 +606,7 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
// make sure the device is expanded. Normally the setSelection below
// will auto expand, but the children of device may not already exist
// at this time. Forcing an expand will make the TreeViewer create them.
- Device device = client.getDevice();
+ IDevice device = client.getDevice();
if (mTreeViewer.getExpandedState(device) == false) {
mTreeViewer.setExpandedState(device, true);
}
@@ -615,11 +615,11 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
TreePath treePath = new TreePath(new Object[] { device, client});
TreeSelection treeSelection = new TreeSelection(treePath);
mTreeViewer.setSelection(treeSelection);
-
+
if (mAdvancedPortSupport) {
client.setAsSelectedClient();
}
-
+
// notify the listener of a possible selection change.
notifyListeners(device, client);
}
@@ -676,7 +676,7 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
* Returns a display string representing the state of the device.
* @param d the device
*/
- private static String getStateString(Device d) {
+ private static String getStateString(IDevice d) {
DeviceState deviceState = d.getState();
if (deviceState == DeviceState.ONLINE) {
return "Online";
@@ -704,32 +704,32 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
AndroidDebugBridge.removeClientChangeListener(this);
}
}
-
+
private void notifyListeners() {
// get the selection
TreeItem[] items = mTree.getSelection();
Client client = null;
- Device device = null;
+ IDevice device = null;
if (items.length == 1) {
Object object = items[0].getData();
if (object instanceof Client) {
client = (Client)object;
device = client.getDevice();
- } else if (object instanceof Device) {
- device = (Device)object;
+ } else if (object instanceof IDevice) {
+ device = (IDevice)object;
}
}
notifyListeners(device, client);
}
-
- private void notifyListeners(Device selectedDevice, Client selectedClient) {
+
+ private void notifyListeners(IDevice selectedDevice, Client selectedClient) {
if (selectedDevice != mCurrentDevice || selectedClient != mCurrentClient) {
mCurrentDevice = selectedDevice;
mCurrentClient = selectedClient;
-
+
for (IUiSelectionListener listener : mListeners) {
// notify the listener with a try/catch-all to make sure this thread won't die
// because of an uncaught exception before all the listeners were notified.
@@ -740,5 +740,5 @@ public final class DevicePanel extends Panel implements IDebugBridgeChangeListen
}
}
}
-
+
}
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/EmulatorControlPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/EmulatorControlPanel.java
index 5583760..4410d3a 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/EmulatorControlPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/EmulatorControlPanel.java
@@ -16,7 +16,7 @@
package com.android.ddmuilib;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
import com.android.ddmlib.EmulatorConsole;
import com.android.ddmlib.EmulatorConsole.GsmMode;
import com.android.ddmlib.EmulatorConsole.GsmStatus;
@@ -75,7 +75,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
// default location: Patio outside Charlie's
private final static double DEFAULT_LONGITUDE = -122.084095;
private final static double DEFAULT_LATITUDE = 37.422006;
-
+
private final static String SPEED_FORMAT = "Speed: %1$dX";
@@ -106,7 +106,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
"EDGE",
"UMTS",
};
-
+
private final static int[] PLAY_SPEEDS = new int[] { 1, 2, 5, 10, 20, 50 };
private final static String RE_PHONE_NUMBER = "^[+#0-9]+$"; //$NON-NLS-1$
@@ -149,7 +149,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
private Button mCancelButton;
private TabFolder mLocationFolders;
-
+
private Button mDecimalButton;
private Button mSexagesimalButton;
private CoordinateControls mLongitudeControls;
@@ -177,7 +177,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
private int mPlayDirection = 1;
private int mSpeed;
private int mSpeedIndex;
-
+
private final SelectionAdapter mDirectionButtonAdapter = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -188,7 +188,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
b.setSelection(true);
return;
}
-
+
// now handle selection change.
if (b == mGpxForwardButton || b == mKmlForwardButton) {
mGpxBackwardButton.setSelection(false);
@@ -196,7 +196,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
mKmlBackwardButton.setSelection(false);
mKmlForwardButton.setSelection(true);
mPlayDirection = 1;
-
+
} else {
mGpxBackwardButton.setSelection(true);
mGpxForwardButton.setSelection(false);
@@ -206,27 +206,27 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
}
}
};
-
+
private final SelectionAdapter mSpeedButtonAdapter = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
mSpeedIndex = (mSpeedIndex+1) % PLAY_SPEEDS.length;
mSpeed = PLAY_SPEEDS[mSpeedIndex];
-
+
mGpxSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed));
mGpxPlayControls.pack();
mKmlSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed));
mKmlPlayControls.pack();
-
+
if (mPlayingThread != null) {
mPlayingThread.interrupt();
}
- }
+ }
};
private Composite mKmlPlayControls;
private Composite mGpxPlayControls;
-
+
public EmulatorControlPanel(IImageLoader imageLoader) {
mImageLoader = imageLoader;
}
@@ -274,11 +274,11 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
scollingParent.setMinSize(top.computeSize(r.width, SWT.DEFAULT));
}
});
-
+
createRadioControls(top);
createCallControls(top);
-
+
createLocationControls(top);
doEnable(false);
@@ -379,7 +379,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
Label l = new Label(g1, SWT.NONE);
l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}
-
+
/**
* Create Voice/SMS call/hang up controls
* @param top
@@ -517,7 +517,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
}
});
}
-
+
/**
* Create Location controls.
* @param top
@@ -526,15 +526,15 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
Label l = new Label(top, SWT.NONE);
l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
l.setText("Location Controls");
-
+
mLocationFolders = new TabFolder(top, SWT.NONE);
mLocationFolders.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
+
Composite manualLocationComp = new Composite(mLocationFolders, SWT.NONE);
TabItem item = new TabItem(mLocationFolders, SWT.NONE);
item.setText("Manual");
item.setControl(manualLocationComp);
-
+
createManualLocationControl(manualLocationComp);
mPlayImage = mImageLoader.loadImage("play.png", mParent.getDisplay()); // $NON-NLS-1$
@@ -544,7 +544,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
item = new TabItem(mLocationFolders, SWT.NONE);
item.setText("GPX");
item.setControl(gpxLocationComp);
-
+
createGpxLocationControl(gpxLocationComp);
Composite kmlLocationComp = new Composite(mLocationFolders, SWT.NONE);
@@ -552,7 +552,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
item = new TabItem(mLocationFolders, SWT.NONE);
item.setText("KML");
item.setControl(kmlLocationComp);
-
+
createKmlLocationControl(kmlLocationComp);
}
@@ -572,63 +572,63 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
// composite to hold and switching between the 2 modes.
final Composite content = new Composite(manualLocationComp, SWT.NONE);
content.setLayout(sl = new StackLayout());
-
+
// decimal display
final Composite decimalContent = new Composite(content, SWT.NONE);
decimalContent.setLayout(gl = new GridLayout(2, false));
gl.marginHeight = gl.marginWidth = 0;
-
+
mLongitudeControls = new CoordinateControls();
mLatitudeControls = new CoordinateControls();
-
+
label = new Label(decimalContent, SWT.NONE);
label.setText("Longitude");
-
+
mLongitudeControls.createDecimalText(decimalContent);
-
+
label = new Label(decimalContent, SWT.NONE);
label.setText("Latitude");
-
+
mLatitudeControls.createDecimalText(decimalContent);
// sexagesimal content
final Composite sexagesimalContent = new Composite(content, SWT.NONE);
sexagesimalContent.setLayout(gl = new GridLayout(7, false));
gl.marginHeight = gl.marginWidth = 0;
-
+
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("Longitude");
-
+
mLongitudeControls.createSexagesimalDegreeText(sexagesimalContent);
-
+
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("\u00B0"); // degree character
-
+
mLongitudeControls.createSexagesimalMinuteText(sexagesimalContent);
-
+
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("'");
mLongitudeControls.createSexagesimalSecondText(sexagesimalContent);
-
+
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("\"");
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("Latitude");
-
+
mLatitudeControls.createSexagesimalDegreeText(sexagesimalContent);
-
+
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("\u00B0");
-
+
mLatitudeControls.createSexagesimalMinuteText(sexagesimalContent);
-
+
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("'");
mLatitudeControls.createSexagesimalSecondText(sexagesimalContent);
-
+
label = new Label(sexagesimalContent, SWT.NONE);
label.setText("\"");
@@ -647,7 +647,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
content.layout();
}
});
-
+
Button sendButton = new Button(manualLocationComp, SWT.PUSH);
sendButton.setText("Send");
sendButton.addSelectionListener(new SelectionAdapter() {
@@ -659,7 +659,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
}
}
});
-
+
mLongitudeControls.setValue(DEFAULT_LONGITUDE);
mLatitudeControls.setValue(DEFAULT_LATITUDE);
}
@@ -681,7 +681,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
gd.heightHint = 100;
mGpxWayPointTable.setHeaderVisible(true);
mGpxWayPointTable.setLinesVisible(true);
-
+
TableHelper.createTableColumn(mGpxWayPointTable, "Name", SWT.LEFT,
"Some Name",
PREFS_WAYPOINT_COL_NAME, store);
@@ -701,7 +701,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
final TableViewer gpxWayPointViewer = new TableViewer(mGpxWayPointTable);
gpxWayPointViewer.setContentProvider(new WayPointContentProvider());
gpxWayPointViewer.setLabelProvider(new WayPointLabelProvider());
-
+
gpxWayPointViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = event.getSelection();
@@ -710,7 +710,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
Object selectedObject = structuredSelection.getFirstElement();
if (selectedObject instanceof WayPoint) {
WayPoint wayPoint = (WayPoint)selectedObject;
-
+
if (mEmulatorConsole != null && mPlayingTrack == false) {
processCommandResult(mEmulatorConsole.sendLocation(
wayPoint.getLongitude(), wayPoint.getLatitude(),
@@ -748,7 +748,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
final TableViewer gpxTrackViewer = new TableViewer(mGpxTrackTable);
gpxTrackViewer.setContentProvider(new TrackContentProvider());
gpxTrackViewer.setLabelProvider(new TrackLabelProvider());
-
+
gpxTrackViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = event.getSelection();
@@ -757,19 +757,19 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
Object selectedObject = structuredSelection.getFirstElement();
if (selectedObject instanceof Track) {
Track track = (Track)selectedObject;
-
+
if (mEmulatorConsole != null && mPlayingTrack == false) {
TrackPoint[] points = track.getPoints();
processCommandResult(mEmulatorConsole.sendLocation(
points[0].getLongitude(), points[0].getLatitude(),
points[0].getElevation()));
}
-
+
mPlayGpxButton.setEnabled(true);
mGpxBackwardButton.setEnabled(true);
mGpxForwardButton.setEnabled(true);
mGpxSpeedButton.setEnabled(true);
-
+
return;
}
}
@@ -780,7 +780,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
mGpxSpeedButton.setEnabled(false);
}
});
-
+
mGpxUploadButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
@@ -799,7 +799,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
}
}
});
-
+
mGpxPlayControls = new Composite(gpxLocationComp, SWT.NONE);
GridLayout gl;
mGpxPlayControls.setLayout(gl = new GridLayout(5, false));
@@ -828,14 +828,14 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
mPlayingThread.interrupt();
}
}
- }
+ }
});
-
+
Label separator = new Label(mGpxPlayControls, SWT.SEPARATOR | SWT.VERTICAL);
separator.setLayoutData(gd = new GridData(
GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL));
gd.heightHint = 0;
-
+
mGpxBackwardButton = new Button(mGpxPlayControls, SWT.TOGGLE | SWT.FLAT);
mGpxBackwardButton.setImage(mImageLoader.loadImage("backward.png", mParent.getDisplay())); // $NON-NLS-1$
mGpxBackwardButton.setSelection(false);
@@ -852,7 +852,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
mGpxSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed));
mGpxSpeedButton.addSelectionListener(mSpeedButtonAdapter);
-
+
mPlayGpxButton.setEnabled(false);
mGpxBackwardButton.setEnabled(false);
mGpxForwardButton.setEnabled(false);
@@ -877,7 +877,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
gd.heightHint = 200;
mKmlWayPointTable.setHeaderVisible(true);
mKmlWayPointTable.setLinesVisible(true);
-
+
TableHelper.createTableColumn(mKmlWayPointTable, "Name", SWT.LEFT,
"Some Name",
PREFS_WAYPOINT_COL_NAME, store);
@@ -911,7 +911,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
KmlParser parser = new KmlParser(fileName);
if (parser.parse()) {
kmlWayPointViewer.setInput(parser.getWayPoints());
-
+
mPlayKmlButton.setEnabled(true);
mKmlBackwardButton.setEnabled(true);
mKmlForwardButton.setEnabled(true);
@@ -920,7 +920,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
}
}
});
-
+
kmlWayPointViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = event.getSelection();
@@ -929,7 +929,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
Object selectedObject = structuredSelection.getFirstElement();
if (selectedObject instanceof WayPoint) {
WayPoint wayPoint = (WayPoint)selectedObject;
-
+
if (mEmulatorConsole != null && mPlayingTrack == false) {
processCommandResult(mEmulatorConsole.sendLocation(
wayPoint.getLongitude(), wayPoint.getLatitude(),
@@ -939,9 +939,9 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
}
}
});
-
-
-
+
+
+
mKmlPlayControls = new Composite(kmlLocationComp, SWT.NONE);
GridLayout gl;
mKmlPlayControls.setLayout(gl = new GridLayout(5, false));
@@ -965,14 +965,14 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
mPlayingThread.interrupt();
}
}
- }
+ }
});
-
+
Label separator = new Label(mKmlPlayControls, SWT.SEPARATOR | SWT.VERTICAL);
separator.setLayoutData(gd = new GridData(
GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL));
gd.heightHint = 0;
-
+
mKmlBackwardButton = new Button(mKmlPlayControls, SWT.TOGGLE | SWT.FLAT);
mKmlBackwardButton.setImage(mImageLoader.loadImage("backward.png", mParent.getDisplay())); // $NON-NLS-1$
mKmlBackwardButton.setSelection(false);
@@ -989,7 +989,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
mKmlSpeedButton.setText(String.format(SPEED_FORMAT, mSpeed));
mKmlSpeedButton.addSelectionListener(mSpeedButtonAdapter);
-
+
mPlayKmlButton.setEnabled(false);
mKmlBackwardButton.setEnabled(false);
mKmlForwardButton.setEnabled(false);
@@ -1039,7 +1039,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
* Callback on device selection change.
* @param device the new selected device
*/
- public void handleNewDevice(Device device) {
+ public void handleNewDevice(IDevice device) {
if (mParent.isDisposed()) {
return;
}
@@ -1061,7 +1061,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
// get the gsm status
gsm = mEmulatorConsole.getGsmStatus();
netstatus = mEmulatorConsole.getNetworkStatus();
-
+
if (gsm == null || netstatus == null) {
mEmulatorConsole = null;
}
@@ -1073,7 +1073,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
if (d.isDisposed() == false) {
final GsmStatus f_gsm = gsm;
final NetworkStatus f_netstatus = netstatus;
-
+
d.asyncExec(new Runnable() {
public void run() {
if (f_gsm.voice != GsmMode.UNKNOWN) {
@@ -1109,7 +1109,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
synchronized (this) {
enable = mEmulatorConsole != null;
}
-
+
enable(enable);
}
}
@@ -1240,10 +1240,10 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
} catch (SWTException e) {
// we're quitting, just ignore
}
-
+
return false;
}
-
+
return true;
}
@@ -1264,13 +1264,13 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
try {
TrackPoint[] trackPoints = track.getPoints();
int count = trackPoints.length;
-
+
// get the start index.
int start = 0;
if (mPlayDirection == -1) {
start = count - 1;
}
-
+
for (int p = start; p >= 0 && p < count; p += mPlayDirection) {
if (mPlayingTrack == false) {
return;
@@ -1299,7 +1299,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
if (delta < 0) {
delta = -delta;
}
-
+
long startTime = System.currentTimeMillis();
try {
@@ -1308,7 +1308,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
if (mPlayingTrack == false) {
return;
}
-
+
// we got interrupted, lets make sure we can play
do {
long waited = System.currentTimeMillis() - startTime;
@@ -1351,7 +1351,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
mPlayingThread.start();
}
}
-
+
private void playKml(final WayPoint[] trackPoints) {
// no need to synchronize this check, the worst that can happen, is we start the thread
// for nothing.
@@ -1365,13 +1365,13 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
public void run() {
try {
int count = trackPoints.length;
-
+
// get the start index.
int start = 0;
if (mPlayDirection == -1) {
start = count - 1;
}
-
+
for (int p = start; p >= 0 && p < count; p += mPlayDirection) {
if (mPlayingTrack == false) {
return;
@@ -1399,7 +1399,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
if (delta < 0) {
delta = -delta;
}
-
+
long startTime = System.currentTimeMillis();
try {
@@ -1408,7 +1408,7 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
if (mPlayingTrack == false) {
return;
}
-
+
// we got interrupted, lets make sure we can play
do {
long waited = System.currentTimeMillis() - startTime;
@@ -1449,6 +1449,6 @@ public class EmulatorControlPanel extends SelectionDependentPanel {
};
mPlayingThread.start();
- }
+ }
}
}
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/ScreenShotDialog.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/ScreenShotDialog.java
index dad54dc..b9bb10c 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/ScreenShotDialog.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/ScreenShotDialog.java
@@ -16,7 +16,7 @@
package com.android.ddmuilib;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
import com.android.ddmlib.Log;
import com.android.ddmlib.RawImage;
@@ -47,7 +47,7 @@ public class ScreenShotDialog extends Dialog {
private Label mBusyLabel;
private Label mImageLabel;
private Button mSave;
- private Device mDevice;
+ private IDevice mDevice;
/**
@@ -66,9 +66,9 @@ public class ScreenShotDialog extends Dialog {
/**
* Prepare and display the dialog.
- * @param device The {@link Device} from which to get the screenshot.
+ * @param device The {@link IDevice} from which to get the screenshot.
*/
- public void open(Device device) {
+ public void open(IDevice device) {
mDevice = device;
Shell parent = getParent();
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/SelectionDependentPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/SelectionDependentPanel.java
index 4b5fe56..e6d2211 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/SelectionDependentPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/SelectionDependentPanel.java
@@ -17,20 +17,20 @@
package com.android.ddmuilib;
import com.android.ddmlib.Client;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
/**
* A Panel that requires {@link Device}/{@link Client} selection notifications.
*/
public abstract class SelectionDependentPanel extends Panel {
- private Device mCurrentDevice = null;
+ private IDevice mCurrentDevice = null;
private Client mCurrentClient = null;
/**
* Returns the current {@link Device}.
* @return the current device or null if none are selected.
*/
- protected final Device getCurrentDevice() {
+ protected final IDevice getCurrentDevice() {
return mCurrentDevice;
}
@@ -46,7 +46,7 @@ public abstract class SelectionDependentPanel extends Panel {
* Sent when a new device is selected.
* @param selectedDevice the selected device.
*/
- public final void deviceSelected(Device selectedDevice) {
+ public final void deviceSelected(IDevice selectedDevice) {
if (selectedDevice != mCurrentDevice) {
mCurrentDevice = selectedDevice;
deviceSelected();
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/explorer/DeviceExplorer.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/explorer/DeviceExplorer.java
index 34f575f..4652b31 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/explorer/DeviceExplorer.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/explorer/DeviceExplorer.java
@@ -16,7 +16,7 @@
package com.android.ddmuilib.explorer;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
import com.android.ddmlib.FileListingService;
import com.android.ddmlib.IShellOutputReceiver;
import com.android.ddmlib.SyncService;
@@ -99,7 +99,7 @@ public class DeviceExplorer extends Panel {
private Image mPackageImage;
private Image mOtherImage;
- private Device mCurrentDevice;
+ private IDevice mCurrentDevice;
private String mDefaultSave;
@@ -631,7 +631,7 @@ public class DeviceExplorer extends Panel {
/**
* Sets the new device to explorer
*/
- public void switchDevice(final Device device) {
+ public void switchDevice(final IDevice device) {
if (device != mCurrentDevice) {
mCurrentDevice = device;
// now we change the input. but we need to do that in the
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/log/event/EventLogPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/log/event/EventLogPanel.java
index 2621c6a..11138d1 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/log/event/EventLogPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/log/event/EventLogPanel.java
@@ -17,7 +17,7 @@
package com.android.ddmuilib.log.event;
import com.android.ddmlib.Client;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
import com.android.ddmlib.Log;
import com.android.ddmlib.Log.LogLevel;
import com.android.ddmlib.log.EventContainer;
@@ -80,7 +80,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
private IImageLoader mImageLoader;
- private Device mCurrentLoggedDevice;
+ private IDevice mCurrentLoggedDevice;
private String mCurrentLogFile;
private LogReceiver mCurrentLogReceiver;
private EventLogParser mCurrentEventLogParser;
@@ -94,7 +94,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
private final ArrayList<EventContainer> mNewEvents = new ArrayList<EventContainer>();
/** indicates a pending ui thread display */
private boolean mPendingDisplay = false;
-
+
/** list of all the custom event displays */
private final ArrayList<EventDisplay> mEventDisplays = new ArrayList<EventDisplay>();
@@ -107,7 +107,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
private ICommonAction mSaveAction;
private ICommonAction mLoadAction;
private ICommonAction mImportAction;
-
+
/** file containing the current log raw data. */
private File mTempFile = null;
@@ -209,10 +209,10 @@ public class EventLogPanel extends TablePanel implements ILogListener,
// get the new EventDisplay list
mEventDisplays.clear();
mEventDisplays.addAll(dialog.getEventDisplays());
-
+
// since the list of EventDisplay changed, we store it.
saveEventDisplays();
-
+
rebuildUi();
}
}
@@ -220,7 +220,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
Log.e("EventLog", e); //$NON-NLS-1$
}
}
-
+
/**
* Clears the log.
* <p/>
@@ -240,7 +240,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
Log.e("EventLog", e); //$NON-NLS-1$
}
}
-
+
/**
* Saves the content of the event log into a file. The log is saved in the same
* binary format than on the device.
@@ -254,16 +254,16 @@ public class EventLogPanel extends TablePanel implements ILogListener,
FileInputStream fis = new FileInputStream(mTempFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
-
+
int count;
-
+
while ((count = fis.read(buffer)) != -1) {
fos.write(buffer, 0, count);
}
-
+
fos.close();
fis.close();
-
+
// now we save the tag file
filePath = filePath + TAG_FILE_EXT;
mCurrentEventLogParser.saveTags(filePath);
@@ -293,16 +293,16 @@ public class EventLogPanel extends TablePanel implements ILogListener,
}
}
-
+
public void importBugReport(String filePath) {
try {
BugReportImporter importer = new BugReportImporter(filePath);
-
+
String[] tags = importer.getTags();
String[] log = importer.getLog();
-
+
startEventLogFromContent(tags, log);
-
+
} catch (FileNotFoundException e) {
Log.logAndDisplay(LogLevel.ERROR, "Import",
"Unable to import bug report: " + e.getMessage());
@@ -324,7 +324,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
public void deviceSelected() {
startEventLog(getCurrentDevice());
}
-
+
/*
* (non-Javadoc)
* @see com.android.ddmlib.AndroidDebugBridge.IClientChangeListener#clientChanged(com.android.ddmlib.Client, int)
@@ -359,7 +359,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
// init some store stuff
store.setDefault(PREFS_DISPLAY_WIDTH, DEFAULT_DISPLAY_WIDTH);
store.setDefault(PREFS_DISPLAY_HEIGHT, DEFAULT_DISPLAY_HEIGHT);
-
+
mBottomParentPanel = new ScrolledComposite(parent, SWT.V_SCROLL);
mBottomParentPanel.setLayoutData(new GridData(GridData.FILL_BOTH));
mBottomParentPanel.setExpandHorizontal(true);
@@ -383,7 +383,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
// create the ui
createDisplayUi();
-
+
return mBottomParentPanel;
}
@@ -402,12 +402,12 @@ public class EventLogPanel extends TablePanel implements ILogListener,
public void setFocus() {
mBottomParentPanel.setFocus();
}
-
+
/**
* Starts a new logcat and set mCurrentLogCat as the current receiver.
* @param device the device to connect logcat to.
*/
- private void startEventLog(final Device device) {
+ private void startEventLog(final IDevice device) {
if (device == mCurrentLoggedDevice) {
return;
}
@@ -448,10 +448,10 @@ public class EventLogPanel extends TablePanel implements ILogListener,
mCurrentEventLogParser = new EventLogParser();
mCurrentEventLogParser.init(device);
}
-
+
// update the event display with the new parser.
updateEventDisplays();
-
+
// prepare the temp file that will contain the raw data
mTempFile = File.createTempFile("android-event-", ".log");
@@ -464,7 +464,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
}.start();
}
}
-
+
private void startEventLogFromFiles(final String fileName) {
// if we have a logcat already running
if (mCurrentLogReceiver != null) {
@@ -475,7 +475,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
// create a new output receiver
mCurrentLogReceiver = new LogReceiver(this);
-
+
mSaveAction.setEnabled(false);
// start the logcat in a different thread
@@ -493,10 +493,10 @@ public class EventLogPanel extends TablePanel implements ILogListener,
return;
}
}
-
+
// update the event display with the new parser.
updateEventDisplays();
-
+
runLocalEventLogService(fileName, mCurrentLogReceiver);
} catch (Exception e) {
Log.e("EventLog", e);
@@ -516,7 +516,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
// create a new output receiver
mCurrentLogReceiver = new LogReceiver(this);
-
+
mSaveAction.setEnabled(false);
// start the logcat in a different thread
@@ -531,10 +531,10 @@ public class EventLogPanel extends TablePanel implements ILogListener,
return;
}
}
-
+
// update the event display with the new parser.
updateEventDisplays();
-
+
runLocalEventLogService(log, mCurrentLogReceiver);
} catch (Exception e) {
Log.e("EventLog", e);
@@ -563,7 +563,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
resetUI(inUiThread);
}
-
+
if (mTempFile != null) {
mTempFile.delete();
mTempFile = null;
@@ -593,7 +593,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
}
}
}
-
+
private void resetUiFromUiThread() {
synchronized(mLock) {
for (EventDisplay eventDisplay : mEventDisplays) {
@@ -618,11 +618,11 @@ public class EventLogPanel extends TablePanel implements ILogListener,
rowLayout.fill = true;
rowLayout.type = SWT.HORIZONTAL;
mBottomPanel.setLayout(rowLayout);
-
+
IPreferenceStore store = DdmUiPreferences.getStore();
int displayWidth = store.getInt(PREFS_DISPLAY_WIDTH);
int displayHeight = store.getInt(PREFS_DISPLAY_HEIGHT);
-
+
for (EventDisplay eventDisplay : mEventDisplays) {
Control c = eventDisplay.createComposite(mBottomPanel, mCurrentEventLogParser, this);
if (c != null) {
@@ -631,7 +631,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
rd.width = displayWidth;
c.setLayoutData(rd);
}
-
+
Table table = eventDisplay.getTable();
if (table != null) {
addTableToFocusListener(table);
@@ -642,7 +642,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
mBottomParentPanel.setMinSize(mBottomPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
mBottomParentPanel.layout();
}
-
+
/**
* Rebuild the display ui.
*/
@@ -652,26 +652,26 @@ public class EventLogPanel extends TablePanel implements ILogListener,
// we need to rebuild the ui. First we get rid of it.
mBottomPanel.dispose();
mBottomPanel = null;
-
+
prepareDisplayUi();
createDisplayUi();
-
+
// and fill it
-
+
boolean start_event = false;
synchronized (mNewEvents) {
mNewEvents.addAll(0, mEvents);
-
+
if (mPendingDisplay == false) {
mPendingDisplay = true;
start_event = true;
}
}
-
+
if (start_event) {
scheduleUIEventHandler();
}
-
+
Rectangle r = mBottomParentPanel.getClientArea();
mBottomParentPanel.setMinSize(mBottomPanel.computeSize(r.width,
SWT.DEFAULT));
@@ -682,7 +682,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
/**
* Processes a new {@link LogEntry} by parsing it with {@link EventLogParser} and displaying it.
* @param entry The new log entry
- * @see LogReceiver.ILogListener#newEntry(LogEntry)
+ * @see LogReceiver.ILogListener#newEntry(LogEntry)
*/
@WorkerThread
public void newEntry(LogEntry entry) {
@@ -695,24 +695,24 @@ public class EventLogPanel extends TablePanel implements ILogListener,
}
}
}
-
+
@WorkerThread
private void handleNewEvent(EventContainer event) {
// add the event to the generic list
mEvents.add(event);
-
+
// add to the list of events that needs to be displayed, and trigger a
// new display if needed.
boolean start_event = false;
synchronized (mNewEvents) {
mNewEvents.add(event);
-
+
if (mPendingDisplay == false) {
mPendingDisplay = true;
start_event = true;
}
}
-
+
if (start_event == false) {
// we're done
return;
@@ -737,7 +737,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
}
});
} catch (SWTException e) {
- // if the ui is disposed, do nothing
+ // if the ui is disposed, do nothing
}
}
@@ -766,7 +766,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
for (EventDisplay eventDisplay : mEventDisplays) {
eventDisplay.startMultiEventDisplay();
}
-
+
// display the new events
EventContainer event = null;
boolean need_to_reloop = false;
@@ -803,7 +803,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
for (EventDisplay eventDisplay : mEventDisplays) {
eventDisplay.endMultiEventDisplay();
}
-
+
// if needed, ask the UI thread to re-run this method.
if (need_to_reloop) {
scheduleUIEventHandler();
@@ -816,10 +816,10 @@ public class EventLogPanel extends TablePanel implements ILogListener,
private void loadEventDisplays() {
IPreferenceStore store = DdmUiPreferences.getStore();
String storage = store.getString(PREFS_EVENT_DISPLAY);
-
+
if (storage.length() > 0) {
String[] values = storage.split(Pattern.quote(EVENT_DISPLAY_STORAGE_SEPARATOR));
-
+
for (String value : values) {
EventDisplay eventDisplay = EventDisplay.load(value);
if (eventDisplay != null) {
@@ -834,10 +834,10 @@ public class EventLogPanel extends TablePanel implements ILogListener,
*/
private void saveEventDisplays() {
IPreferenceStore store = DdmUiPreferences.getStore();
-
+
boolean first = true;
StringBuilder sb = new StringBuilder();
-
+
for (EventDisplay eventDisplay : mEventDisplays) {
String storage = eventDisplay.getStorageString();
if (storage != null) {
@@ -846,7 +846,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
} else {
first = false;
}
-
+
sb.append(storage);
}
}
@@ -870,7 +870,7 @@ public class EventLogPanel extends TablePanel implements ILogListener,
for (EventDisplay eventDisplay : mEventDisplays) {
eventDisplay.setNewLogParser(mCurrentEventLogParser);
}
-
+
mOptionsAction.setEnabled(true);
mClearAction.setEnabled(true);
if (mCurrentLogFile == null) {
@@ -897,21 +897,21 @@ public class EventLogPanel extends TablePanel implements ILogListener,
* Runs an event log service out of a local file.
* @param fileName the full file name of the local file containing the event log.
* @param logReceiver the receiver that will handle the log
- * @throws IOException
+ * @throws IOException
*/
@WorkerThread
private void runLocalEventLogService(String fileName, LogReceiver logReceiver)
throws IOException {
byte[] buffer = new byte[256];
-
+
FileInputStream fis = new FileInputStream(fileName);
-
+
int count;
while ((count = fis.read(buffer)) != -1) {
logReceiver.parseNewData(buffer, 0, count);
}
}
-
+
@WorkerThread
private void runLocalEventLogService(String[] log, LogReceiver currentLogReceiver) {
synchronized (mLock) {
diff --git a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogPanel.java b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogPanel.java
index bd8b75c..154e2fa 100644
--- a/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogPanel.java
+++ b/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat/LogPanel.java
@@ -16,7 +16,7 @@
package com.android.ddmuilib.logcat;
-import com.android.ddmlib.Device;
+import com.android.ddmlib.IDevice;
import com.android.ddmlib.Log;
import com.android.ddmlib.MultiLineReceiver;
import com.android.ddmlib.Log.LogLevel;
@@ -163,13 +163,13 @@ public class LogPanel extends SelectionDependentPanel {
private int mFilterMode = FILTER_NONE;
/** Device currently running logcat */
- private Device mCurrentLoggedDevice = null;
+ private IDevice mCurrentLoggedDevice = null;
private ICommonAction mDeleteFilterAction;
private ICommonAction mEditFilterAction;
private ICommonAction[] mLogLevelActions;
-
+
/** message data, separated from content for multi line messages */
protected static class LogMessageInfo {
public LogLevel logLevel;
@@ -183,7 +183,7 @@ public class LogPanel extends SelectionDependentPanel {
* log message, to reuse the info regarding level, pid, etc...
*/
private LogMessageInfo mLastMessageInfo = null;
-
+
private boolean mPendingAsyncRefresh = false;
/** loader for the images. the implementation will varie between standalone
@@ -481,7 +481,7 @@ public class LogPanel extends SelectionDependentPanel {
* Starts a new logcat and set mCurrentLogCat as the current receiver.
* @param device the device to connect logcat to.
*/
- public void startLogCat(final Device device) {
+ public void startLogCat(final IDevice device) {
if (device == mCurrentLoggedDevice) {
return;
}
@@ -491,7 +491,7 @@ public class LogPanel extends SelectionDependentPanel {
stopLogCat(false);
mCurrentLoggedDevice = null;
}
-
+
resetUI(false);
if (device != null) {
@@ -696,7 +696,7 @@ public class LogPanel extends SelectionDependentPanel {
synchronized (mBuffer) {
FileDialog dlg = new FileDialog(mParent.getShell(), SWT.SAVE);
String fileName;
-
+
dlg.setText("Save log...");
dlg.setFileName("log.txt");
String defaultPath = mDefaultLogSave;
@@ -710,7 +710,7 @@ public class LogPanel extends SelectionDependentPanel {
dlg.setFilterExtensions(new String[] {
"*.txt"
});
-
+
fileName = dlg.open();
if (fileName != null) {
mDefaultLogSave = dlg.getFilterPath();
@@ -928,7 +928,7 @@ public class LogPanel extends SelectionDependentPanel {
t.setLinesVisible(false);
if (mGlobalListener != null) {
- addTableToFocusListener(t);
+ addTableToFocusListener(t);
}
// create a controllistener that will handle the resizing of all the
@@ -1064,7 +1064,7 @@ public class LogPanel extends SelectionDependentPanel {
}
/**
- * Process new Log lines coming from {@link LogCatOuputReceiver}.
+ * Process new Log lines coming from {@link LogCatOuputReceiver}.
* @param lines the new lines
*/
protected void processLogLines(String[] lines) {
@@ -1074,10 +1074,10 @@ public class LogPanel extends SelectionDependentPanel {
if (lines.length > STRING_BUFFER_LENGTH) {
Log.e("LogCat", "Receiving more lines than STRING_BUFFER_LENGTH");
}
-
+
// parse the lines and create LogMessage that are stored in a temporary list
final ArrayList<LogMessage> newMessages = new ArrayList<LogMessage>();
-
+
synchronized (mBuffer) {
for (String line : lines) {
// ignore empty lines.
@@ -1087,7 +1087,7 @@ public class LogPanel extends SelectionDependentPanel {
if (matcher.matches()) {
// this is a header line, parse the header and keep it around.
mLastMessageInfo = new LogMessageInfo();
-
+
mLastMessageInfo.time = matcher.group(1);
mLastMessageInfo.pidString = matcher.group(2);
mLastMessageInfo.pid = Integer.valueOf(mLastMessageInfo.pidString);
@@ -1097,7 +1097,7 @@ public class LogPanel extends SelectionDependentPanel {
// This is not a header line.
// Create a new LogMessage and process it.
LogMessage mc = new LogMessage();
-
+
if (mLastMessageInfo == null) {
// The first line of output wasn't preceded
// by a header line; make something up so
@@ -1109,34 +1109,34 @@ public class LogPanel extends SelectionDependentPanel {
mLastMessageInfo.logLevel = LogLevel.INFO;
mLastMessageInfo.tag = "<unknown>"; //$NON-NLS1$
}
-
+
// If someone printed a log message with
// embedded '\n' characters, there will
// one header line followed by multiple text lines.
// Use the last header that we saw.
mc.data = mLastMessageInfo;
-
+
// tabs seem to display as only 1 tab so we replace the leading tabs
// by 4 spaces.
mc.msg = line.replaceAll("\t", " "); //$NON-NLS-1$ //$NON-NLS-2$
-
+
// process the new LogMessage.
processNewMessage(mc);
-
+
// store the new LogMessage
newMessages.add(mc);
}
}
}
-
+
// if we don't have a pending Runnable that will do the refresh, we ask the Display
// to run one in the UI thread.
if (mPendingAsyncRefresh == false) {
mPendingAsyncRefresh = true;
-
+
try {
Display display = mFolders.getDisplay();
-
+
// run in sync because this will update the buffer start/end indices
display.asyncExec(new Runnable() {
public void run() {
@@ -1165,7 +1165,7 @@ public class LogPanel extends SelectionDependentPanel {
f.flush();
}
}
-
+
if (mDefaultFilter != null) {
mDefaultFilter.flush();
}
@@ -1209,7 +1209,7 @@ public class LogPanel extends SelectionDependentPanel {
// increment the next usable slot index
mBufferEnd = (mBufferEnd + 1) % STRING_BUFFER_LENGTH;
}
-
+
LogMessage oldMessage = null;
// record the message that was there before
@@ -1381,7 +1381,7 @@ public class LogPanel extends SelectionDependentPanel {
initDefaultFilter();
return;
}
-
+
filter.clear();
if (mBufferStart != -1) {
@@ -1482,13 +1482,13 @@ public class LogPanel extends SelectionDependentPanel {
if (mDefaultFilter != null) {
mDefaultFilter.resetTempFiltering();
}
-
+
// now we need to figure out the new temp filtering
// split each word
String[] segments = text.split(" "); //$NON-NLS-1$
-
+
ArrayList<String> keywords = new ArrayList<String>(segments.length);
-
+
// loop and look for temp id/tag
int tempPid = -1;
String tempTag = null;
@@ -1511,12 +1511,12 @@ public class LogPanel extends SelectionDependentPanel {
keywords.add(s);
}
}
-
+
// set the temp filtering in the filters
if (tempPid != -1 || tempTag != null || keywords.size() > 0) {
String[] keywordsArray = keywords.toArray(
new String[keywords.size()]);
-
+
for (LogFilter f : mFilters) {
if (tempPid != -1) {
f.setTempPidFiltering(tempPid);
@@ -1526,7 +1526,7 @@ public class LogPanel extends SelectionDependentPanel {
}
f.setTempKeywordFiltering(keywordsArray);
}
-
+
if (mDefaultFilter != null) {
if (tempPid != -1) {
mDefaultFilter.setTempPidFiltering(tempPid);
@@ -1535,10 +1535,10 @@ public class LogPanel extends SelectionDependentPanel {
mDefaultFilter.setTempTagFiltering(tempTag);
}
mDefaultFilter.setTempKeywordFiltering(keywordsArray);
-
+
}
}
-
+
initFilter(mCurrentFilter);
}
}