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:
committed by
The Android Open Source Project
parent
568b71576e
commit
06803ce63d
@@ -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;
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user