aboutsummaryrefslogtreecommitdiffstats
path: root/eclipse/plugins
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-08-27 14:40:16 -0700
committerandroid code review <noreply-gerritcodereview@google.com>2012-08-27 14:40:16 -0700
commit26b71e37d87f2ad025ffb335f0edbf73fc23d725 (patch)
treefc8b38897520c60fd6d06416f1e69e52faaf545a /eclipse/plugins
parente8428949cb218798a781ec56ad80b3f61e2c5cbc (diff)
parentd1daeae66a0ebdf53076038dc4a1fe099c4141fb (diff)
downloadsdk-26b71e37d87f2ad025ffb335f0edbf73fc23d725.zip
sdk-26b71e37d87f2ad025ffb335f0edbf73fc23d725.tar.gz
sdk-26b71e37d87f2ad025ffb335f0edbf73fc23d725.tar.bz2
Merge "Clean up device listeners"
Diffstat (limited to 'eclipse/plugins')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java34
1 files changed, 31 insertions, 3 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
index 9287787..2a0a396 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java
@@ -68,8 +68,8 @@ import com.android.sdklib.AndroidVersion;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.devices.Device;
import com.android.sdklib.devices.DeviceManager;
-import com.android.sdklib.devices.State;
import com.android.sdklib.devices.DeviceManager.DevicesChangeListener;
+import com.android.sdklib.devices.State;
import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.avd.AvdManager;
import com.android.sdklib.repository.PkgProps;
@@ -89,6 +89,8 @@ import org.eclipse.jdt.ui.ISharedImages;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
@@ -148,7 +150,7 @@ import java.util.TreeMap;
* loading.<br>
*/
public class ConfigurationComposite extends Composite
- implements SelectionListener, DevicesChangeListener {
+ implements SelectionListener, DevicesChangeListener, DisposeListener {
public static final String ATTR_CONTEXT = "context"; //$NON-NLS-1$
private static final String ICON_SQUARE = "square"; //$NON-NLS-1$
private static final String ICON_LANDSCAPE = "landscape"; //$NON-NLS-1$
@@ -559,6 +561,8 @@ public class ConfigurationComposite extends Composite
addTargetMenuListener(mTargetCombo);
addThemeListener(mThemeCombo);
addOrientationMenuListener(mOrientationCombo);
+
+ addDisposeListener(this);
}
private void updateActivity() {
@@ -568,6 +572,26 @@ public class ConfigurationComposite extends Composite
}
}
+ // ---- Dispose
+
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ dispose();
+ }
+
+ @Override
+ public void dispose() {
+ if (!isDisposed()) {
+ super.dispose();
+
+ final Sdk sdk = Sdk.getCurrent();
+ if (sdk != null) {
+ DeviceManager manager = sdk.getDeviceManager();
+ manager.unregisterListener(this);
+ }
+ }
+ }
+
// ---- Init and reset/reload methods ----
/**
@@ -2675,6 +2699,8 @@ public class ConfigurationComposite extends Composite
if (sdk != null) {
mDeviceList = sdk.getDevices();
DeviceManager manager = sdk.getDeviceManager();
+ // This method can be called more than once, so avoid duplicate entries
+ manager.unregisterListener(this);
manager.registerListener(this);
} else {
mDeviceList = new ArrayList<Device>();
@@ -2698,7 +2724,9 @@ public class ConfigurationComposite extends Composite
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
- addDeviceMenuListener(mDeviceCombo);
+ if (!mDeviceCombo.isDisposed()) {
+ addDeviceMenuListener(mDeviceCombo);
+ }
}
});
}