aboutsummaryrefslogtreecommitdiffstats
path: root/hierarchyviewer2
diff options
context:
space:
mode:
authorKonstantin Lopyrev <klopyrev@google.com>2010-08-09 17:42:51 -0700
committerKonstantin Lopyrev <klopyrev@google.com>2010-08-17 18:02:55 -0700
commite361a961cbe1ead74659b4a761453b312d026e55 (patch)
tree2ae00c4db7ba4082472d5ecd568e750de319123e /hierarchyviewer2
parentc1db1ab270b953da579e657de11d4486a49e1c1e (diff)
downloadsdk-e361a961cbe1ead74659b4a761453b312d026e55.zip
sdk-e361a961cbe1ead74659b4a761453b312d026e55.tar.gz
sdk-e361a961cbe1ead74659b4a761453b312d026e55.tar.bz2
Increasing the changes of a device connecting properly and making sure things are disposed of properly.
Change-Id: Ib1190c65c8ac9795fc0b97beacd7fd102cb95abf
Diffstat (limited to 'hierarchyviewer2')
-rw-r--r--hierarchyviewer2/app/src/com/android/hierarchyviewer/UIThread.java5
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java52
-rw-r--r--hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java7
-rw-r--r--hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java16
-rw-r--r--hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java23
-rw-r--r--hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java26
-rw-r--r--hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java17
-rw-r--r--hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java16
-rw-r--r--hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java16
9 files changed, 116 insertions, 62 deletions
diff --git a/hierarchyviewer2/app/src/com/android/hierarchyviewer/UIThread.java b/hierarchyviewer2/app/src/com/android/hierarchyviewer/UIThread.java
index f1965b2..4dd990b 100644
--- a/hierarchyviewer2/app/src/com/android/hierarchyviewer/UIThread.java
+++ b/hierarchyviewer2/app/src/com/android/hierarchyviewer/UIThread.java
@@ -88,7 +88,7 @@ public class UIThread {
TreeViewOverview treeViewOverview = new TreeViewOverview(shell3);
shell3.open();
// ComponentRegistry.getDirector().loadViewTreeData(null);
- while (!shell.isDisposed() && !shell2.isDisposed()) {
+ while (!shell.isDisposed() && !shell2.isDisposed() && !shell3.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
@@ -99,6 +99,9 @@ public class UIThread {
if (!shell2.isDisposed()) {
shell2.dispose();
}
+ if (!shell3.isDisposed()) {
+ shell3.dispose();
+ }
// NO LONGER TESTING STUFF.
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java
index b63fba8..65cb24f 100644
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java
+++ b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/HierarchyViewerDirector.java
@@ -77,27 +77,49 @@ public abstract class HierarchyViewerDirector implements IDeviceChangeListener,
DeviceBridge.setupDeviceForward(device);
if (!DeviceBridge.isViewServerRunning(device)) {
if (!DeviceBridge.startViewServer(device)) {
- DeviceBridge.removeDeviceForward(device);
- Log.e(TAG, "Unable to debug device " + device);
+ // Let's do something interesting here... Try again in 2
+ // seconds.
+ executeInBackground(new Runnable() {
+ public void run() {
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ Log.e(TAG, "Unable to debug device " + device);
+ DeviceBridge.removeDeviceForward(device);
+ return;
+ }
+ if (!DeviceBridge.startViewServer(device)) {
+ Log.e(TAG, "Unable to debug device " + device);
+ DeviceBridge.removeDeviceForward(device);
+ } else {
+ loadViewServerInfoAndWindows(device);
+ }
+ }
+ });
return;
}
}
- executeInBackground(new Runnable() {
- public void run() {
- ViewServerInfo viewServerInfo = DeviceBridge.loadViewServerInfo(device);
- Window[] windows = DeviceBridge.loadWindows(device);
- ComponentRegistry.getDeviceSelectionModel().addDevice(device, windows);
- if (viewServerInfo.protocolVersion >= 3) {
- WindowUpdater.startListenForWindowChanges(HierarchyViewerDirector.this,
- device);
- focusChanged(device);
- }
- }
- });
-
+ loadViewServerInfoAndWindows(device);
}
}
+ private void loadViewServerInfoAndWindows(final IDevice device) {
+ executeInBackground(new Runnable() {
+ public void run() {
+ ViewServerInfo viewServerInfo = DeviceBridge.loadViewServerInfo(device);
+ if (viewServerInfo == null) {
+ return;
+ }
+ Window[] windows = DeviceBridge.loadWindows(device);
+ ComponentRegistry.getDeviceSelectionModel().addDevice(device, windows);
+ if (viewServerInfo.protocolVersion >= 3) {
+ WindowUpdater.startListenForWindowChanges(HierarchyViewerDirector.this, device);
+ focusChanged(device);
+ }
+ }
+ });
+ }
+
public void deviceDisconnected(IDevice device) {
ViewServerInfo viewServerInfo = DeviceBridge.getViewServerInfo(device);
if (viewServerInfo == null) {
diff --git a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java
index 34e7c03..c9244d2 100644
--- a/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java
+++ b/hierarchyviewer2/libs/hierarchyviewerlib/src/com/android/hierarchyviewerlib/device/DeviceBridge.java
@@ -257,8 +257,8 @@ public class DeviceBridge {
}
public static ViewServerInfo loadViewServerInfo(IDevice device) {
- int server = 2;
- int protocol = 2;
+ int server = -1;
+ int protocol = -1;
DeviceConnection connection = null;
try {
connection = new DeviceConnection(device);
@@ -289,6 +289,9 @@ public class DeviceBridge {
connection.close();
}
}
+ if (server == -1 || protocol == -1) {
+ return null;
+ }
ViewServerInfo returnValue = new ViewServerInfo(server, protocol);
synchronized (viewServerInfo) {
viewServerInfo.put(device, returnValue);
diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java
index 187a3fa..4add510 100644
--- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java
+++ b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java
@@ -31,6 +31,8 @@ import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
@@ -158,6 +160,8 @@ public class DeviceSelector extends Composite implements WindowChangeListener, S
tree.setLinesVisible(true);
tree.addSelectionListener(this);
+ addDisposeListener(disposeListener);
+
loadResources();
model = ComponentRegistry.getDeviceSelectionModel();
@@ -192,12 +196,12 @@ public class DeviceSelector extends Composite implements WindowChangeListener, S
.getSystemColor(SWT.COLOR_BLUE));
}
- @Override
- public void dispose() {
- super.dispose();
- model.removeWindowChangeListener(this);
- boldFont.dispose();
- }
+ private DisposeListener disposeListener = new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ model.removeWindowChangeListener(DeviceSelector.this);
+ boldFont.dispose();
+ }
+ };
@Override
public boolean setFocus() {
diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java
index 3972830..5336ec3 100644
--- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java
+++ b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java
@@ -25,6 +25,8 @@ import com.android.hierarchyviewerlib.models.PixelPerfectModel.Point;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
@@ -75,22 +77,25 @@ public class PixelPerfect extends ScrolledComposite implements ImageChangeListen
canvas.addMouseListener(mouseListener);
canvas.addMouseMoveListener(mouseMoveListener);
+ addDisposeListener(disposeListener);
+
crosshairColor = new Color(Display.getDefault(), new RGB(0, 255, 255));
borderColor = new Color(Display.getDefault(), new RGB(255, 0, 0));
marginColor = new Color(Display.getDefault(), new RGB(0, 255, 0));
paddingColor = new Color(Display.getDefault(), new RGB(0, 0, 255));
}
- @Override
- public void dispose() {
- super.dispose();
- if (image != null) {
- image.dispose();
+ private DisposeListener disposeListener = new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ model.removeImageChangeListener(PixelPerfect.this);
+ if (image != null) {
+ image.dispose();
+ }
+ crosshairColor.dispose();
+ borderColor.dispose();
+ paddingColor.dispose();
}
- crosshairColor.dispose();
- borderColor.dispose();
- paddingColor.dispose();
- }
+ };
@Override
public boolean setFocus() {
diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java
index 62bb8c7..f0402f3 100644
--- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java
+++ b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java
@@ -23,6 +23,8 @@ import com.android.hierarchyviewerlib.models.PixelPerfectModel.ImageChangeListen
import com.android.hierarchyviewerlib.models.PixelPerfectModel.Point;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseWheelListener;
@@ -71,24 +73,26 @@ public class PixelPerfectLoupe extends Canvas implements ImageChangeListener {
addPaintListener(paintListener);
addMouseListener(mouseListener);
addMouseWheelListener(mouseWheelListener);
+ addDisposeListener(disposeListener);
crosshairColor = new Color(Display.getDefault(), new RGB(255, 94, 254));
transform = new Transform(Display.getDefault());
}
- @Override
- public void dispose() {
- super.dispose();
- if (image != null) {
- image.dispose();
- }
- crosshairColor.dispose();
- transform.dispose();
- if (grid != null) {
- grid.dispose();
+ private DisposeListener disposeListener = new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ model.removeImageChangeListener(PixelPerfectLoupe.this);
+ if (image != null) {
+ image.dispose();
+ }
+ crosshairColor.dispose();
+ transform.dispose();
+ if (grid != null) {
+ grid.dispose();
+ }
}
- }
+ };
private MouseListener mouseListener = new MouseListener() {
diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java
index 9f25a33..30a7b9e 100644
--- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java
+++ b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java
@@ -29,6 +29,8 @@ import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
@@ -142,6 +144,8 @@ public class PixelPerfectTree extends Composite implements ImageChangeListener,
loadResources();
+ addDisposeListener(disposeListener);
+
model = ComponentRegistry.getPixelPerfectModel();
ContentProvider contentProvider = new ContentProvider();
treeViewer.setContentProvider(contentProvider);
@@ -158,12 +162,13 @@ public class PixelPerfectTree extends Composite implements ImageChangeListener,
folderImage = loader.loadImage("folder.png", Display.getDefault());
}
- @Override
- public void dispose() {
- super.dispose();
- fileImage.dispose();
- folderImage.dispose();
- }
+ private DisposeListener disposeListener = new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ model.removeImageChangeListener(PixelPerfectTree.this);
+ fileImage.dispose();
+ folderImage.dispose();
+ }
+ };
@Override
public boolean setFocus() {
diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java
index a29bdb3..2bf4012 100644
--- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java
+++ b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java
@@ -24,6 +24,8 @@ import com.android.hierarchyviewerlib.scene.DrawableViewNode.Point;
import com.android.hierarchyviewerlib.scene.DrawableViewNode.Rectangle;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
@@ -67,17 +69,19 @@ public class TreeView extends Canvas implements TreeChangeListener {
addMouseMoveListener(mouseMoveListener);
addMouseWheelListener(mouseWheelListener);
addListener(SWT.Resize, resizeListener);
+ addDisposeListener(disposeListener);
transform = new Transform(Display.getDefault());
inverse = new Transform(Display.getDefault());
}
- @Override
- public void dispose() {
- super.dispose();
- transform.dispose();
- inverse.dispose();
- }
+ private DisposeListener disposeListener = new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ model.removeTreeChangeListener(TreeView.this);
+ transform.dispose();
+ inverse.dispose();
+ }
+ };
private Listener resizeListener = new Listener() {
public void handleEvent(Event e) {
diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java
index cfa9070..d299717 100644
--- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java
+++ b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java
@@ -24,6 +24,8 @@ import com.android.hierarchyviewerlib.scene.DrawableViewNode.Point;
import com.android.hierarchyviewerlib.scene.DrawableViewNode.Rectangle;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
@@ -64,17 +66,19 @@ public class TreeViewOverview extends Canvas implements TreeChangeListener {
addMouseListener(mouseListener);
addMouseMoveListener(mouseMoveListener);
addListener(SWT.Resize, resizeListener);
+ addDisposeListener(disposeListener);
transform = new Transform(Display.getDefault());
inverse = new Transform(Display.getDefault());
}
- @Override
- public void dispose() {
- super.dispose();
- transform.dispose();
- inverse.dispose();
- }
+ private DisposeListener disposeListener = new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ model.removeTreeChangeListener(TreeViewOverview.this);
+ transform.dispose();
+ inverse.dispose();
+ }
+ };
private MouseListener mouseListener = new MouseListener() {