diff options
author | Diego Perez <diegoperez@google.com> | 2022-07-28 09:49:05 +0000 |
---|---|---|
committer | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-08-01 12:53:24 +0000 |
commit | 0d7e94b2c117d92dce93431603ce148a48aadb5e (patch) | |
tree | 28fdc811a18481661f8183aa259e3b1ea19faa87 /designer | |
parent | 41687356b0a6b62d482287866fe53ca455be94d6 (diff) | |
download | idea-0d7e94b2c117d92dce93431603ce148a48aadb5e.tar.gz |
Avoid creating multiple SyncLayoutlibSceneManager
The model usually already comes with one created so avoid duplicating
the creation of models.
Test: bazel test //tools/adt/idea/designer/...
Bug: N/A
Change-Id: I059f4b4d30a7101f0c6575b115e6e758e9f9addf
Diffstat (limited to 'designer')
7 files changed, 53 insertions, 37 deletions
diff --git a/designer/testFramework/com/android/tools/idea/uibuilder/NlModelBuilderUtil.java b/designer/testFramework/com/android/tools/idea/uibuilder/NlModelBuilderUtil.java index 6f410124a41..f1d4f2e556a 100644 --- a/designer/testFramework/com/android/tools/idea/uibuilder/NlModelBuilderUtil.java +++ b/designer/testFramework/com/android/tools/idea/uibuilder/NlModelBuilderUtil.java @@ -32,10 +32,12 @@ import com.android.tools.idea.uibuilder.scene.NlModelHierarchyUpdater; import com.android.tools.idea.uibuilder.scene.SyncLayoutlibSceneManager; import com.android.tools.idea.uibuilder.surface.NlDesignSurface; import com.android.tools.idea.uibuilder.surface.NlInteractionHandler; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.intellij.psi.xml.XmlFile; import com.intellij.testFramework.fixtures.CodeInsightTestFixture; import java.util.List; +import java.util.stream.Collectors; import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.annotations.NotNull; @@ -86,4 +88,16 @@ public class NlModelBuilderUtil { infos.add(root.createViewInfo(null, file.getRootTag())); return infos; } + + @NotNull + public static List<SyncLayoutlibSceneManager> getSyncLayoutlibSceneManagersForModel(@NotNull SyncNlModel model) { + return model.getSurface().getSceneManagers().stream() + .map(SyncLayoutlibSceneManager.class::cast) + .collect(Collectors.toList()); + } + + @NotNull + public static SyncLayoutlibSceneManager getSyncLayoutlibSceneManagerForModel(@NotNull SyncNlModel model) { + return getSyncLayoutlibSceneManagersForModel(model).get(0); + } } diff --git a/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceCategoryDragHandlerTest.java b/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceCategoryDragHandlerTest.java index 06b7cc28646..3c51e62bab4 100644 --- a/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceCategoryDragHandlerTest.java +++ b/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceCategoryDragHandlerTest.java @@ -16,8 +16,7 @@ package com.android.tools.idea.uibuilder.handlers.preference; import com.android.tools.idea.common.scene.SceneContext; -import com.android.tools.idea.common.surface.DesignSurface; -import com.android.tools.idea.uibuilder.scene.LayoutlibSceneManager; +import com.android.tools.idea.uibuilder.NlModelBuilderUtil; import com.android.tools.idea.uibuilder.scene.SyncLayoutlibSceneManager; import com.android.tools.idea.common.SyncNlModel; import com.android.tools.idea.uibuilder.api.DragHandler; @@ -109,7 +108,9 @@ public final class PreferenceCategoryDragHandlerTest extends PreferenceScreenTes @NotNull private PreferenceGroupDragHandler newPreferenceCategoryDragHandler(@NotNull SyncNlModel model, @NotNull NlComponent category) { ScreenFixture screenFixture = new ScreenFixture(model).withScale(1); - Scene scene = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model).getScene(); + SyncLayoutlibSceneManager manager = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); + manager.setIgnoreRenderRequests(true); + Scene scene = manager.getScene(); scene.buildDisplayList(new DisplayList(), 0); SceneComponent component = scene.getSceneComponent(category); diff --git a/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceScreenDragHandlerLayoutTest.java b/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceScreenDragHandlerLayoutTest.java index c7f6fe2315e..6b6ce1b915d 100644 --- a/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceScreenDragHandlerLayoutTest.java +++ b/designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceScreenDragHandlerLayoutTest.java @@ -15,9 +15,13 @@ */ package com.android.tools.idea.uibuilder.handlers.preference; +import static com.android.tools.idea.uibuilder.NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel; + import com.android.SdkConstants.PreferenceTags; import com.android.tools.idea.common.scene.SceneContext; import com.android.tools.idea.common.surface.DesignSurface; +import com.android.tools.idea.uibuilder.NlModelBuilderUtil; +import com.android.tools.idea.uibuilder.scene.LayoutlibSceneManager; import com.android.tools.idea.uibuilder.scene.SyncLayoutlibSceneManager; import com.android.tools.idea.common.SyncNlModel; import com.android.tools.idea.uibuilder.api.DragHandler; @@ -27,7 +31,6 @@ import com.android.tools.idea.uibuilder.api.ViewGroupHandler; import com.android.tools.idea.common.fixtures.ComponentDescriptor; import com.android.tools.idea.uibuilder.fixtures.ScreenFixture; import com.android.tools.idea.common.model.NlComponent; -import com.android.tools.idea.uibuilder.scene.LayoutlibSceneManager; import com.android.tools.idea.common.scene.Scene; import com.android.tools.idea.common.scene.draw.DisplayList; import com.android.tools.idea.common.util.XmlTagUtil; @@ -41,7 +44,8 @@ public final class PreferenceScreenDragHandlerLayoutTest extends PreferenceScree public void testCommit() { SyncNlModel model = buildModel(); ScreenFixture screenFixture = new ScreenFixture(model).withScale(1); - LayoutlibSceneManager builder = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model); + SyncLayoutlibSceneManager builder = getSyncLayoutlibSceneManagerForModel(model); + builder.setIgnoreRenderRequests(true); Scene scene = builder.getScene(); scene.buildDisplayList(new DisplayList(), 0); diff --git a/designer/testSrc/com/android/tools/idea/uibuilder/menu/ActionBarTest.java b/designer/testSrc/com/android/tools/idea/uibuilder/menu/ActionBarTest.java index 339063b1369..c49cb1cb01e 100644 --- a/designer/testSrc/com/android/tools/idea/uibuilder/menu/ActionBarTest.java +++ b/designer/testSrc/com/android/tools/idea/uibuilder/menu/ActionBarTest.java @@ -16,9 +16,8 @@ package com.android.tools.idea.uibuilder.menu; import com.android.ide.common.rendering.api.ViewType; -import com.android.tools.idea.common.surface.DesignSurface; import com.android.tools.idea.uibuilder.LayoutTestCase; -import com.android.tools.idea.uibuilder.scene.LayoutlibSceneManager; +import com.android.tools.idea.uibuilder.NlModelBuilderUtil; import com.android.tools.idea.uibuilder.scene.SyncLayoutlibSceneManager; import com.android.tools.idea.common.SyncNlModel; import com.android.tools.idea.uibuilder.model.NlComponentHelperKt; @@ -30,7 +29,9 @@ public final class ActionBarTest extends LayoutTestCase { public void testAddToItemsOrOverflowItemsItemWidthAndHeightAreNegativeOne() { SyncNlModel model = model("model.xml", component("menu").unboundedChildren(component("item").viewType(ViewType.ACTION_BAR_MENU))).build(); - SceneComponent menu = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model).getScene().getRoot(); + SyncLayoutlibSceneManager manager = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); + manager.setIgnoreRenderRequests(true); + SceneComponent menu = manager.getScene().getRoot(); SceneComponent item = menu.getChildren().get(0); item.setPosition(0, 0); item.setSize(-1, -1); @@ -47,7 +48,9 @@ public final class ActionBarTest extends LayoutTestCase { component("group").unboundedChildren( component("item").viewType(ViewType.ACTION_BAR_MENU)))).build(); - SceneComponent menu = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model).getScene().getRoot(); + SyncLayoutlibSceneManager manager = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); + manager.setIgnoreRenderRequests(true); + SceneComponent menu = manager.getScene().getRoot(); SceneComponent group = menu.getChildren().get(0); NlComponentHelperKt.setViewInfo(group.getNlComponent(), null); SceneComponent item = group.getChildren().get(0); @@ -61,7 +64,9 @@ public final class ActionBarTest extends LayoutTestCase { public void testAddToItemsOrOverflowItemsItemViewTypeIsActionBarMenu() { SyncNlModel model = model("model.xml", component("menu").unboundedChildren(component("item").viewType(ViewType.ACTION_BAR_MENU))).build(); - SceneComponent menu = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model).getScene().getRoot(); + SyncLayoutlibSceneManager manager = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); + manager.setIgnoreRenderRequests(true); + SceneComponent menu = manager.getScene().getRoot(); SceneComponent item = menu.getChildren().get(0); ActionBar actionBar = new ActionBar(menu); @@ -73,7 +78,9 @@ public final class ActionBarTest extends LayoutTestCase { public void testAddToItemsOrOverflowItemsItemViewTypeIsActionBarOverflowMenu() { SyncNlModel model = model("model.xml", component("menu").unboundedChildren(component("item").viewType(ViewType.ACTION_BAR_OVERFLOW_MENU))).build(); - SceneComponent menu = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model).getScene().getRoot(); + SyncLayoutlibSceneManager manager = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); + manager.setIgnoreRenderRequests(true); + SceneComponent menu = manager.getScene().getRoot(); SceneComponent item = menu.getChildren().get(0); ActionBar actionBar = new ActionBar(menu); diff --git a/designer/testSrc/com/android/tools/idea/uibuilder/menu/GroupDragHandlerLayoutTest.java b/designer/testSrc/com/android/tools/idea/uibuilder/menu/GroupDragHandlerLayoutTest.java index 7c36d979c21..5cfcde93b07 100644 --- a/designer/testSrc/com/android/tools/idea/uibuilder/menu/GroupDragHandlerLayoutTest.java +++ b/designer/testSrc/com/android/tools/idea/uibuilder/menu/GroupDragHandlerLayoutTest.java @@ -28,14 +28,12 @@ import com.android.tools.idea.common.scene.Scene; import com.android.tools.idea.common.scene.SceneComponent; import com.android.tools.idea.common.scene.SceneContext; import com.android.tools.idea.common.scene.draw.DisplayList; -import com.android.tools.idea.common.surface.DesignSurface; import com.android.tools.idea.common.util.XmlTagUtil; import com.android.tools.idea.uibuilder.LayoutTestCase; import com.android.tools.idea.common.LayoutTestUtilities; +import com.android.tools.idea.uibuilder.NlModelBuilderUtil; import com.android.tools.idea.uibuilder.scene.SyncLayoutlibSceneManager; import com.android.tools.idea.uibuilder.api.*; -import com.android.tools.idea.uibuilder.scene.LayoutlibSceneManager; -import com.android.tools.idea.uibuilder.surface.NlDesignSurface; import com.intellij.psi.xml.XmlTag; import org.jetbrains.annotations.NotNull; import org.mockito.ArgumentMatchers; @@ -145,13 +143,14 @@ public final class GroupDragHandlerLayoutTest extends LayoutTestCase { private static DragHandler newGroupDragHandler(@NotNull NlComponent menu, @NotNull NlComponent item) { SyncNlModel model = (SyncNlModel)menu.getModel(); - LayoutlibSceneManager builder = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model); - Scene scene = builder.getScene(); + SyncLayoutlibSceneManager manager = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); + manager.setIgnoreRenderRequests(true); + Scene scene = manager.getScene(); scene.buildDisplayList(new DisplayList(), 0); SceneComponent sceneComponent = scene.getSceneComponent(item); if (sceneComponent == null) { - sceneComponent = builder.createTemporaryComponent(item); + sceneComponent = manager.createTemporaryComponent(item); } List<NlComponent> itemAsList = Collections.singletonList(sceneComponent.getNlComponent()); return new GroupDragHandler(mockViewEditor(model), new ViewGroupHandler(), scene.getSceneComponent(menu), itemAsList, DragType.MOVE); diff --git a/designer/testSrc/com/android/tools/idea/uibuilder/scene/SceneCreationTest.java b/designer/testSrc/com/android/tools/idea/uibuilder/scene/SceneCreationTest.java index 2a4a5aa2d70..d74c4133e62 100644 --- a/designer/testSrc/com/android/tools/idea/uibuilder/scene/SceneCreationTest.java +++ b/designer/testSrc/com/android/tools/idea/uibuilder/scene/SceneCreationTest.java @@ -28,6 +28,7 @@ import com.android.tools.idea.common.scene.SceneComponent; import com.android.tools.idea.common.scene.SceneManager; import com.android.tools.idea.common.surface.DesignSurface; import com.android.tools.idea.configurations.Configuration; +import com.android.tools.idea.uibuilder.NlModelBuilderUtil; import com.android.tools.idea.uibuilder.model.NlComponentRegistrar; import com.android.tools.idea.uibuilder.surface.NlDesignSurface; import com.intellij.openapi.util.Disposer; @@ -64,7 +65,7 @@ public class SceneCreationTest extends SceneTest { public void testSceneCreation() { ModelBuilder builder = createModel(); SyncNlModel model = builder.build(); - LayoutlibSceneManager sceneBuilder = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model); + LayoutlibSceneManager sceneBuilder = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); Scene scene = sceneBuilder.getScene(); scene.setAnimated(false); assertEquals(scene.getRoot().getChildren().size(), 1); @@ -124,7 +125,7 @@ public class SceneCreationTest extends SceneTest { public void testSceneReparenting() { ModelBuilder builder = createModel(); SyncNlModel model = builder.build(); - LayoutlibSceneManager sceneBuilder = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model); + LayoutlibSceneManager sceneBuilder = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel(model); Scene scene = sceneBuilder.getScene(); scene.setAnimated(false); assertEquals(scene.getRoot().getChildren().size(), 1); @@ -158,11 +159,11 @@ public class SceneCreationTest extends SceneTest { Configuration config = model.getConfiguration(); config.setDevice(config.getConfigurationManager().getDeviceById("Nexus 6P"), false); - Scene scene = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model).getScene(); + SyncLayoutlibSceneManager manager = new SyncLayoutlibSceneManager((DesignSurface<LayoutlibSceneManager>)model.getSurface(), model); + manager.setIgnoreRenderRequests(true); + Scene scene = manager.getScene(); scene.setAnimated(false); - ComponentDescriptor parent = builder.findByPath(AndroidXConstants.CONSTRAINT_LAYOUT.defaultName()); - ComponentDescriptor textView = builder.findByPath(AndroidXConstants.CONSTRAINT_LAYOUT.defaultName(), TEXT_VIEW); SceneComponent sceneTextView = scene.getRoot().getChildren().get(0); float dpiFactor = 560 / 160f; diff --git a/designer/testSrc/com/android/tools/idea/uibuilder/surface/NlDesignSurfaceActionHandlerTest.java b/designer/testSrc/com/android/tools/idea/uibuilder/surface/NlDesignSurfaceActionHandlerTest.java index 579d09249ad..eafe026b6fd 100644 --- a/designer/testSrc/com/android/tools/idea/uibuilder/surface/NlDesignSurfaceActionHandlerTest.java +++ b/designer/testSrc/com/android/tools/idea/uibuilder/surface/NlDesignSurfaceActionHandlerTest.java @@ -19,18 +19,15 @@ import com.android.tools.idea.common.SyncNlModel; import com.android.tools.idea.common.fixtures.ModelBuilder; import com.android.tools.idea.common.model.NlComponent; import com.android.tools.idea.common.surface.DesignSurfaceActionHandler; -import com.android.tools.idea.common.surface.SceneView; import com.android.tools.idea.common.util.NlTreeDumper; -import com.android.tools.idea.rendering.RenderResult; import com.android.tools.idea.uibuilder.LayoutTestCase; +import com.android.tools.idea.uibuilder.NlModelBuilderUtil; import com.android.tools.idea.uibuilder.scene.SyncLayoutlibSceneManager; import com.google.common.collect.ImmutableList; -import com.google.wireless.android.sdk.stats.LayoutEditorRenderResult; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.util.Disposer; -import java.util.concurrent.CompletableFuture; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.mockito.Mock; @@ -71,17 +68,10 @@ public class NlDesignSurfaceActionHandlerTest extends LayoutTestCase { // If using a lambda, it can be reused by the JVM and causing a Exception because the Disposable is already disposed. myDisposable = Disposer.newDisposable(); mySurface = NlDesignSurface.builder(getProject(), myDisposable) - .setSceneManagerProvider((surface, model) -> new SyncLayoutlibSceneManager(surface, (SyncNlModel) model) { - protected @NotNull CompletableFuture<RenderResult> renderAsync(LayoutEditorRenderResult.@Nullable Trigger trigger) { - // This test does not need Layoutlib renders - return CompletableFuture.completedFuture(null); - } - - @NotNull - @Override - public SceneView getSceneView() { - return myScreen; - } + .setSceneManagerProvider((surface, model) -> { + SyncLayoutlibSceneManager manager = NlModelBuilderUtil.getSyncLayoutlibSceneManagerForModel((SyncNlModel)model); + manager.setIgnoreRenderRequests(true); + return manager; }) .build(); mySurface.setModel(myModel); |