AI 146638: am: CL 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/... Original author: android-build Automated import of CL 146638
This commit is contained in:
committed by
The Android Open Source Project
parent
7ceec5e103
commit
e2404ec9d7
@@ -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