diff options
author | Tor Norbye <tnorbye@google.com> | 2012-08-27 14:40:16 -0700 |
---|---|---|
committer | android code review <noreply-gerritcodereview@google.com> | 2012-08-27 14:40:16 -0700 |
commit | 26b71e37d87f2ad025ffb335f0edbf73fc23d725 (patch) | |
tree | fc8b38897520c60fd6d06416f1e69e52faaf545a /eclipse/plugins | |
parent | e8428949cb218798a781ec56ad80b3f61e2c5cbc (diff) | |
parent | d1daeae66a0ebdf53076038dc4a1fe099c4141fb (diff) | |
download | sdk-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.java | 34 |
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); + } } }); } |