diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java index b9ea3469de69..08a18efde45a 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java @@ -320,9 +320,14 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel { float xdpi = deviceConfiguration.getDevice().getXDpi(); float ydpi = deviceConfiguration.getDevice().getYDpi(); - mySession = RenderUtil - .createRenderSession(getProject(), layoutXmlText, myFile, manager.getSelectedTarget(), facet, config, xdpi, ydpi, - manager.getSelectedTheme()); + while (true) { + mySession = RenderUtil + .createRenderSession(getProject(), layoutXmlText, myFile, manager.getSelectedTarget(), facet, config, xdpi, ydpi, + manager.getSelectedTheme(), 10000); + if (mySession.getResult().getStatus() != Result.Status.ERROR_TIMEOUT) { + break; + } + } ApplicationManager.getApplication().invokeLater(new Runnable() { @Override diff --git a/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java b/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java index c6d4927931da..8c25d058a983 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/RenderService.java @@ -69,7 +69,7 @@ class RenderService { @Nullable @SuppressWarnings("IOResourceOpenedButNotSafelyClosed") - public RenderSession createRenderSession(@NotNull String layoutXmlText, @NotNull String appLabel) + public RenderSession createRenderSession(@NotNull String layoutXmlText, @NotNull String appLabel, long timeout) throws FileNotFoundException, XmlPullParserException { final ILayoutPullParser parser = new XmlParser(); @@ -102,6 +102,7 @@ class RenderService { params.setExtendedViewInfoMode(false); params.setAppLabel(appLabel); + params.setTimeout(timeout); final ScreenSizeQualifier screenSizeQualifier = myConfig.getScreenSizeQualifier(); params.setConfigScreenSize(screenSizeQualifier != null ? screenSizeQualifier.getValue() : ScreenSize.NORMAL); diff --git a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java index dc67b71849e8..c3efd25dc0d1 100644 --- a/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java +++ b/plugins/android/src/org/jetbrains/android/uipreview/RenderUtil.java @@ -1,8 +1,6 @@ package org.jetbrains.android.uipreview; -import com.android.ide.common.rendering.api.RenderResources; -import com.android.ide.common.rendering.api.RenderSession; -import com.android.ide.common.rendering.api.Result; +import com.android.ide.common.rendering.api.*; import com.android.ide.common.resources.ResourceDeltaKind; import com.android.ide.common.resources.ResourceFolder; import com.android.ide.common.resources.ResourceRepository; @@ -73,7 +71,8 @@ public class RenderUtil { @NotNull FolderConfiguration config, float xdpi, float ydpi, - @NotNull ThemeData theme) + @NotNull ThemeData theme, + long timeout) throws RenderingException, IOException, AndroidSdkNotConfiguredException { final Sdk sdk = ModuleRootManager.getInstance(facet.getModule()).getSdk(); if (sdk == null || !(sdk.getSdkType() instanceof AndroidSdkType)) { @@ -121,7 +120,7 @@ public class RenderUtil { final RenderService renderService = factory.createService(pair.getFirst(), pair.getSecond(), config, xdpi, ydpi, callback, minSdkVersion); try { - return renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet)); + return renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet), timeout); } catch (XmlPullParserException e) { throw new RenderingException(e); @@ -198,7 +197,7 @@ public class RenderUtil { final RenderSession session; try { - session = renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet)); + session = renderService.createRenderSession(layoutXmlText, getAppLabelToShow(facet), RenderParams.DEFAULT_TIMEOUT); } catch (XmlPullParserException e) { throw new RenderingException(e);