am 796b4ee2: (-s ours) am 8d54ca7c: am 566a6095: Merge "Avoid crash in new SDK preview" into studio-1.4-dev automerge: 94cb585 automerge: e1b87b9

* commit '796b4ee2ffcf44aff46f68bd53d114e1cb3353d3':
diff --git a/android/src/META-INF/plugin.xml b/android/src/META-INF/plugin.xml
index 2efec6f..60df615 100755
--- a/android/src/META-INF/plugin.xml
+++ b/android/src/META-INF/plugin.xml
@@ -576,7 +576,7 @@
                       icon="AndroidIcons.AndroidToolWindow"
                       factoryClass="com.android.tools.idea.monitor.AndroidToolWindowFactory"/>
     <facet.toolWindow id="Build Variants"
-                      facetIdList="android"
+                      facetIdList="android,android-gradle"
                       anchor="left"
                       secondary="true"
                       icon="AndroidIcons.AndroidToolWindow"
diff --git a/android/src/com/android/tools/idea/databinding/BrUtil.java b/android/src/com/android/tools/idea/databinding/BrUtil.java
index 2dd27b0..1431480 100644
--- a/android/src/com/android/tools/idea/databinding/BrUtil.java
+++ b/android/src/com/android/tools/idea/databinding/BrUtil.java
@@ -56,7 +56,7 @@
     } else if (isBooleanGetter(psiMethod)) {
       propertyName = name.subSequence(2, name.length());
     } else {
-      LOG.error("@Bindable associated with method must follow JavaBeans convention %s", psiMethod.getName());
+      LOG.error("@Bindable associated with method must follow JavaBeans convention %s", new Throwable(), psiMethod.getName());
       return null;
     }
     char firstChar = propertyName.charAt(0);
diff --git a/android/src/com/android/tools/idea/gradle/actions/SyncProjectAction.java b/android/src/com/android/tools/idea/gradle/actions/SyncProjectAction.java
index ccae3c2..d2b2ad3 100644
--- a/android/src/com/android/tools/idea/gradle/actions/SyncProjectAction.java
+++ b/android/src/com/android/tools/idea/gradle/actions/SyncProjectAction.java
@@ -18,12 +18,14 @@
 import com.android.tools.idea.gradle.GradleSyncState;
 import com.android.tools.idea.gradle.project.GradleProjectImporter;
 import com.android.tools.idea.gradle.variant.view.BuildVariantView;
-import com.android.tools.idea.startup.AndroidStudioSpecificInitializer;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.Presentation;
 import com.intellij.openapi.project.Project;
 
+import static com.android.tools.idea.gradle.util.Projects.isBuildWithGradle;
+import static com.android.tools.idea.startup.AndroidStudioSpecificInitializer.isAndroidStudio;
+
 /**
  * Re-imports (syncs) an Android-Gradle project, without showing the "Import Project" wizard.
  */
@@ -35,7 +37,7 @@
   @Override
   public void actionPerformed(final AnActionEvent e) {
     Project project = e.getProject();
-    if (project != null) {
+    if (project != null && isBuildWithGradle(project)) {
       BuildVariantView.getInstance(project).projectImportStarted();
       Presentation presentation = e.getPresentation();
       presentation.setEnabled(false);
@@ -50,12 +52,16 @@
 
   @Override
   public void update(AnActionEvent e) {
-    if (!AndroidStudioSpecificInitializer.isAndroidStudio()) {
+    if (!isAndroidStudio()) {
+      e.getPresentation().setEnabledAndVisible(false);
+      return;
+    }
+    Project project = e.getProject();
+    if (project != null && !isBuildWithGradle(project)) {
       e.getPresentation().setEnabledAndVisible(false);
       return;
     }
     boolean enabled = false;
-    Project project = e.getProject();
     if (project != null) {
       enabled = !GradleSyncState.getInstance(project).isSyncInProgress();
     }
diff --git a/android/src/com/android/tools/idea/npw/TemplateParameterStep2.java b/android/src/com/android/tools/idea/npw/TemplateParameterStep2.java
index fdb7925..b8b189d 100644
--- a/android/src/com/android/tools/idea/npw/TemplateParameterStep2.java
+++ b/android/src/com/android/tools/idea/npw/TemplateParameterStep2.java
@@ -762,9 +762,9 @@
         }
       }
       catch (CircularParameterDependencyException exception) {
-        LOG.error("Circular dependency between parameters in template %1$s, participating parameters: %2$s", myCurrentTemplate.getTitle(),
+        LOG.error("Circular dependency between parameters in template %1$s, participating parameters: %2$s", exception,
+                  myCurrentTemplate.getTitle(),
                   Joiner.on(", ").join(exception.getParameterIds()));
-        LOG.error(exception);
       }
     }
     finally {
diff --git a/android/src/com/android/tools/swing/layoutlib/AndroidPreviewPanel.java b/android/src/com/android/tools/swing/layoutlib/AndroidPreviewPanel.java
index 7a12d14..005fa2e 100644
--- a/android/src/com/android/tools/swing/layoutlib/AndroidPreviewPanel.java
+++ b/android/src/com/android/tools/swing/layoutlib/AndroidPreviewPanel.java
@@ -116,6 +116,7 @@
   private double myScale = 1.0;
   private Dimension myLastRenderedSize;
   private Dimension myCachedPreferredSize;
+  private int myCurrentWidth;
 
   public AndroidPreviewPanel(@NotNull Configuration configuration) {
     myConfiguration = configuration;
@@ -134,9 +135,15 @@
     Dimension currentSize = getSize();
     synchronized (myGraphicsLayoutRendererLock) {
       if (myGraphicsLayoutRenderer != null && !currentSize.equals(previousSize)) {
-        // Because we use GraphicsLayoutRender in vertical scroll mode, the height passed it's only a minimum. If the actual rendering results
-        // in a bigger size, the GraphicsLayoutRenderer.getPreferredSize() call will return the correct size.
-        myGraphicsLayoutRenderer.setSize(width, 1);
+        // Because we use GraphicsLayoutRender in vertical scroll mode, the height passed it's only a minimum.
+        // If the actual rendering results in a bigger size, the GraphicsLayoutRenderer.getPreferredSize()
+        // call will return the correct size.
+
+        // Older versions of layoutlib do not handle correctly when 1 is passed and don't always recalculate
+        // the height if the width hasn't decreased.
+        // We workaround that by keep track of the last known width and passing height 1 when it decreases.
+        myGraphicsLayoutRenderer.setSize(width, (myCurrentWidth < width) ? 1 : height);
+        myCurrentWidth = width;
       }
     }
   }
diff --git a/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java b/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java
index 878e3af..226c834 100644
--- a/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java
+++ b/android/src/org/jetbrains/android/facet/IdeaSourceProvider.java
@@ -43,7 +43,7 @@
  * Like {@link SourceProvider}, but for IntelliJ, which means it provides
  * {@link VirtualFile} references rather than {@link File} references.
  *
- * @see org.jetbrains.android.facet.AndroidSourceType
+ * @see AndroidSourceType
  */
 public abstract class IdeaSourceProvider {
   private IdeaSourceProvider() {
@@ -347,9 +347,10 @@
       return Collections.singletonList(facet.getMainIdeaSourceProvider());
     }
     AndroidModel androidModel = facet.getAndroidModel();
-    assert androidModel != null;
-
-    return createAll(androidModel.getActiveSourceProviders());
+    if (androidModel != null) {
+      return createAll(androidModel.getActiveSourceProviders());
+    }
+    return Collections.emptyList();
   }
 
   @NotNull
@@ -358,8 +359,10 @@
       return Collections.emptyList();
     }
     AndroidModel androidModel = facet.getAndroidModel();
-    assert androidModel != null;
-    return createAll(androidModel.getTestSourceProviders());
+    if (androidModel != null) {
+      return createAll(androidModel.getTestSourceProviders());
+    }
+    return Collections.emptyList();
   }
 
   private Collection<VirtualFile> getAllSourceFolders() {
diff --git a/android/src/org/jetbrains/android/uipreview/ChooseResourceDialog.java b/android/src/org/jetbrains/android/uipreview/ChooseResourceDialog.java
index 7999b30..62a3ee7 100644
--- a/android/src/org/jetbrains/android/uipreview/ChooseResourceDialog.java
+++ b/android/src/org/jetbrains/android/uipreview/ChooseResourceDialog.java
@@ -285,6 +285,7 @@
       myStateListPickerPanel = new ResourceDialogTabComponent(new JPanel(new BorderLayout()), resType, resFolderType);
       myStateListPickerPanel.setBorder(null);
       myStateListPickerPanel.addCenter(myStateListPicker);
+      myStateListPickerPanel.setChangeFileNameVisible(false);
 
       myContentPanel.addTab("StateList", myStateListPickerPanel);
       numberOfTabs++;
@@ -1210,5 +1211,9 @@
     public void openLocationSettings() {
       mySouthPanel.setOn(true);
     }
+
+    public void setChangeFileNameVisible(boolean isVisible) {
+      myLocationSettings.setChangeFileNameVisible(isVisible);
+    }
   }
 }