AI 146634: am: CL 146631 ADT #1793333: fix Widget disposed in SdkTargetSelector.

This happens when you open the Windows > Prefs > Android panel
  while an SDK is initially loading or when you change the
  SDK in the pref panel. The target change listener was not
  properly removed since the field was not properly disposed.
  This also removed the multiple selection handling in the
  SdkTargetSelector, which we never use. In the unlikely event
  we want to use it later, it would be trivial to add it back.
  Original author: raphael
  Merged from: //branches/cupcake/...

Automated import of CL 146634
This commit is contained in:
Raphael Moll
2009-04-16 16:02:29 -07:00
committed by The Android Open Source Project
parent 568b71576e
commit 06803ce63d
4 changed files with 58 additions and 61 deletions

View File

@@ -50,6 +50,8 @@ import java.io.File;
public class AndroidPreferencePage extends FieldEditorPreferencePage implements
IWorkbenchPreferencePage {
private SdkDirectoryFieldEditor mDirectoryField;
public AndroidPreferencePage() {
super(GRID);
setPreferenceStore(AdtPlugin.getDefault().getPreferenceStore());
@@ -64,8 +66,10 @@ public class AndroidPreferencePage extends FieldEditorPreferencePage implements
@Override
public void createFieldEditors() {
addField(new SdkDirectoryFieldEditor(AdtPlugin.PREFS_SDK_DIR,
Messages.AndroidPreferencePage_SDK_Location_, getFieldEditorParent()));
mDirectoryField = new SdkDirectoryFieldEditor(AdtPlugin.PREFS_SDK_DIR,
Messages.AndroidPreferencePage_SDK_Location_, getFieldEditorParent());
addField(mDirectoryField);
}
/*
@@ -75,6 +79,16 @@ public class AndroidPreferencePage extends FieldEditorPreferencePage implements
*/
public void init(IWorkbench workbench) {
}
@Override
public void dispose() {
super.dispose();
if (mDirectoryField != null) {
mDirectoryField.dispose();
mDirectoryField = null;
}
}
/**
* Custom version of DirectoryFieldEditor which validates that the directory really
@@ -164,8 +178,7 @@ public class AndroidPreferencePage extends FieldEditorPreferencePage implements
mTargetSelector = new SdkTargetSelector(parent,
targets,
false, /*allowSelection*/
false /*multipleSelection*/);
false /*allowSelection*/);
gd = (GridData) mTargetSelector.getLayoutData();
gd.horizontalSpan = numColumns;

View File

@@ -70,7 +70,7 @@ public class AndroidPropertyPage extends PropertyPage implements IWorkbenchPrope
Label l = new Label(top, SWT.NONE);
l.setText("Project Target");
mSelector = new SdkTargetSelector(top, targets, false /*allowMultipleSelection*/);
mSelector = new SdkTargetSelector(top, targets);
l = new Label(top, SWT.SEPARATOR | SWT.HORIZONTAL);
l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -98,7 +98,7 @@ public class AndroidPropertyPage extends PropertyPage implements IWorkbenchPrope
@Override
public void widgetSelected(SelectionEvent e) {
// look for the selection and validate the page if there is a selection
IAndroidTarget target = mSelector.getFirstSelected();
IAndroidTarget target = mSelector.getSelected();
setValid(target != null);
}
});
@@ -114,7 +114,7 @@ public class AndroidPropertyPage extends PropertyPage implements IWorkbenchPrope
public boolean performOk() {
Sdk currentSdk = Sdk.getCurrent();
if (currentSdk != null) {
currentSdk.setProject(mProject, mSelector.getFirstSelected(),
currentSdk.setProject(mProject, mSelector.getSelected(),
mApkConfigWidget.getApkConfigs());
}

View File

@@ -219,7 +219,7 @@ public class NewProjectCreationPage extends WizardPage {
/** Returns the current sdk target or null if none has been selected yet. */
public IAndroidTarget getSdkTarget() {
return mSdkTargetSelector == null ? null : mSdkTargetSelector.getFirstSelected();
return mSdkTargetSelector == null ? null : mSdkTargetSelector.getSelected();
}
/**
@@ -405,7 +405,7 @@ public class NewProjectCreationPage extends WizardPage {
group.setText("Target");
// The selector is created without targets. They are added below in the change listener.
mSdkTargetSelector = new SdkTargetSelector(group, null, false /*multi-selection*/);
mSdkTargetSelector = new SdkTargetSelector(group, null);
mSdkTargetChangeListener = new ITargetChangeListener() {
public void onProjectTargetChange(IProject changedProject) {