OSDN Git Service

Fix NPE when opening new layout file.
authorXavier Ducrohet <xav@android.com>
Tue, 29 Sep 2009 00:53:47 +0000 (17:53 -0700)
committerXavier Ducrohet <xav@android.com>
Tue, 29 Sep 2009 00:59:25 +0000 (17:59 -0700)
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

eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalEditorPart.java
eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/GraphicalLayoutEditor.java
eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/IGraphicalLayoutEditor.java
eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/LayoutEditor.java
eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/configuration/ConfigurationComposite.java

index 4953f7e..ef0db5a 100755 (executable)
@@ -679,6 +679,8 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
         // enable the create button if the current and edited config are not equals\r
         mConfigComposite.setEnabledCreate(\r
                 mEditedConfig.equals(mConfigComposite.getCurrentConfig()) == false);\r
+\r
+        reloadConfigurationUi(false /*notifyListener*/);\r
     }\r
 \r
     public Clipboard getClipboard() {\r
@@ -967,7 +969,7 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
         }\r
     }\r
 \r
-    public void reloadConfigurationUi() {\r
+    public void reloadConfigurationUi(boolean notifyListener) {\r
         // enable the clipping button if it's supported.\r
         Sdk currentSdk = Sdk.getCurrent();\r
         if (currentSdk != null) {\r
@@ -975,7 +977,7 @@ public class GraphicalEditorPart extends EditorPart implements IGraphicalLayoutE
             AndroidTargetData data = currentSdk.getTargetData(target);\r
             if (data != null) {\r
                 LayoutBridge bridge = data.getLayoutBridge();\r
-                mConfigComposite.reloadDevices();\r
+                mConfigComposite.reloadDevices(notifyListener);\r
                 mConfigComposite.setClippingSupport(bridge.apiLevel >= 4);\r
             }\r
         }\r
index 6d210a8..f3fd97a 100644 (file)
@@ -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);
             }
         }
index ca11fc7..99670d8 100644 (file)
@@ -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();
         }
     }
index 1cd301c..969050a 100644 (file)
@@ -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() {