summaryrefslogtreecommitdiff
path: root/designer
diff options
context:
space:
mode:
authorDiego Perez <diegoperez@google.com>2022-07-28 09:49:05 +0000
committerTreeHugger Robot <treehugger-gerrit@google.com>2022-08-01 12:53:24 +0000
commit0d7e94b2c117d92dce93431603ce148a48aadb5e (patch)
tree28fdc811a18481661f8183aa259e3b1ea19faa87 /designer
parent41687356b0a6b62d482287866fe53ca455be94d6 (diff)
downloadidea-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')
-rw-r--r--designer/testFramework/com/android/tools/idea/uibuilder/NlModelBuilderUtil.java14
-rw-r--r--designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceCategoryDragHandlerTest.java7
-rw-r--r--designer/testSrc/com/android/tools/idea/uibuilder/handlers/preference/PreferenceScreenDragHandlerLayoutTest.java8
-rw-r--r--designer/testSrc/com/android/tools/idea/uibuilder/menu/ActionBarTest.java19
-rw-r--r--designer/testSrc/com/android/tools/idea/uibuilder/menu/GroupDragHandlerLayoutTest.java11
-rw-r--r--designer/testSrc/com/android/tools/idea/uibuilder/scene/SceneCreationTest.java11
-rw-r--r--designer/testSrc/com/android/tools/idea/uibuilder/surface/NlDesignSurfaceActionHandlerTest.java20
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);