Fix NPE when opening new layout file.
When adding the parsing of the device XML files, I mostly tested with a layout file already opened when Eclipse launched. Well it turns out there's a slightly different code path when opening a file *after* Eclipse has launched. The load of the device UI in the config selected caused a rendering before the XML model was loaded which ended up in an NPE in the recomputeLayout method. Additionnally, I hadn't finalized the code for the GLE2, so this brings it in line with the GLE1. Change-Id: Ic86de6e91ca13793aceecb5706bc963edddb9241
This commit is contained in:
@@ -679,6 +679,8 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
|
||||
// enable the create button if the current and edited config are not equals
|
||||
mConfigComposite.setEnabledCreate(
|
||||
mEditedConfig.equals(mConfigComposite.getCurrentConfig()) == false);
|
||||
|
||||
reloadConfigurationUi(false /*notifyListener*/);
|
||||
}
|
||||
|
||||
public Clipboard getClipboard() {
|
||||
@@ -967,7 +969,7 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
|
||||
}
|
||||
}
|
||||
|
||||
public void reloadConfigurationUi() {
|
||||
public void reloadConfigurationUi(boolean notifyListener) {
|
||||
// enable the clipping button if it's supported.
|
||||
Sdk currentSdk = Sdk.getCurrent();
|
||||
if (currentSdk != null) {
|
||||
@@ -975,7 +977,7 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
|
||||
AndroidTargetData data = currentSdk.getTargetData(target);
|
||||
if (data != null) {
|
||||
LayoutBridge bridge = data.getLayoutBridge();
|
||||
mConfigComposite.reloadDevices();
|
||||
mConfigComposite.reloadDevices(notifyListener);
|
||||
mConfigComposite.setClippingSupport(bridge.apiLevel >= 4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -548,7 +548,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
|
||||
mConfigComposite.setEnabledCreate(
|
||||
mEditedConfig.equals(mConfigComposite.getCurrentConfig()) == false);
|
||||
|
||||
reloadConfigurationUi();
|
||||
reloadConfigurationUi(false /*notifyListener*/);
|
||||
}
|
||||
|
||||
public Rectangle getBounds() {
|
||||
@@ -730,7 +730,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
|
||||
PaletteFactory.createPaletteRoot(mPaletteRoot, mLayoutEditor.getTargetData());
|
||||
}
|
||||
|
||||
public void reloadConfigurationUi() {
|
||||
public void reloadConfigurationUi(boolean notifyListener) {
|
||||
// enable the clipping button if it's supported.
|
||||
Sdk currentSdk = Sdk.getCurrent();
|
||||
if (currentSdk != null) {
|
||||
@@ -738,7 +738,7 @@ public class GraphicalLayoutEditor extends GraphicalEditorWithPalette
|
||||
AndroidTargetData data = currentSdk.getTargetData(target);
|
||||
if (data != null) {
|
||||
LayoutBridge bridge = data.getLayoutBridge();
|
||||
mConfigComposite.reloadDevices();
|
||||
mConfigComposite.reloadDevices(notifyListener);
|
||||
mConfigComposite.setClippingSupport(bridge.apiLevel >= 4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,6 @@ import org.eclipse.ui.IEditorPart;
|
||||
|
||||
abstract Clipboard getClipboard();
|
||||
|
||||
abstract void reloadConfigurationUi();
|
||||
abstract void reloadConfigurationUi(boolean notifyListener);
|
||||
|
||||
}
|
||||
|
||||
@@ -410,7 +410,7 @@ public class LayoutEditor extends AndroidEditor implements IShowEditorInput, IPa
|
||||
if (mGraphicalEditor != null) {
|
||||
mGraphicalEditor.reloadEditor();
|
||||
mGraphicalEditor.reloadPalette();
|
||||
mGraphicalEditor.reloadConfigurationUi();
|
||||
mGraphicalEditor.reloadConfigurationUi(true /*notify listener */);
|
||||
mGraphicalEditor.recomputeLayout();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ public class ConfigurationComposite extends Composite {
|
||||
mDeviceList.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
onDeviceChange();
|
||||
onDeviceChange(true /* recomputeLayout*/);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -451,11 +451,12 @@ public class ConfigurationComposite extends Composite {
|
||||
|
||||
/**
|
||||
* Reloads the list of {@link DeviceConfiguration} from the {@link Sdk}.
|
||||
* @param notifyListener
|
||||
*/
|
||||
public void reloadDevices() {
|
||||
public void reloadDevices(boolean notifyListener) {
|
||||
mDevices = Sdk.getCurrent().getLayoutDevices();
|
||||
initUiWithDevices();
|
||||
onDeviceChange();
|
||||
onDeviceChange(notifyListener);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -508,7 +509,7 @@ public class ConfigurationComposite extends Composite {
|
||||
}
|
||||
}
|
||||
|
||||
private void onDeviceChange() {
|
||||
private void onDeviceChange(boolean recomputeLayout) {
|
||||
|
||||
int deviceIndex = mDeviceList.getSelectionIndex();
|
||||
DeviceConfiguration device = mDevices.get(deviceIndex);
|
||||
@@ -525,7 +526,9 @@ public class ConfigurationComposite extends Composite {
|
||||
mDeviceConfigs.setEnabled(false);
|
||||
}
|
||||
|
||||
onDeviceConfigChange();
|
||||
if (recomputeLayout) {
|
||||
onDeviceConfigChange();
|
||||
}
|
||||
}
|
||||
|
||||
private void onDeviceConfigChange() {
|
||||
|
||||
Reference in New Issue
Block a user