Merge "[ATF integration] #2 Add validation to render path" into rvc-dev am: 51b1770542 am: d3850f6663 am: 90e2fb968c

Change-Id: I710c05235eff15437d5c294a7b4dd380263c0d19
diff --git a/bridge/Android.bp b/bridge/Android.bp
index bca63bc..02b147e 100644
--- a/bridge/Android.bp
+++ b/bridge/Android.bp
@@ -25,6 +25,7 @@
         "layoutlib_api-prebuilt",
         "tools-common-prebuilt",
         "guava",
+        "layoutlib-validator"
     ],
 
     static_libs: [
@@ -56,6 +57,7 @@
         "tools-common-prebuilt",
         "ninepatch-prebuilt",
         "layoutlib-common",
+        "layoutlib-validator",
     ],
 
     dist: {
diff --git a/bridge/bridge.iml b/bridge/bridge.iml
index 2e782e2..5d437cb 100644
--- a/bridge/bridge.iml
+++ b/bridge/bridge.iml
@@ -92,5 +92,6 @@
         </SOURCES>
       </library>
     </orderEntry>
+    <orderEntry type="module" module-name="validator" />
   </component>
 </module>
\ No newline at end of file
diff --git a/bridge/src/com/android/layoutlib/bridge/Bridge.java b/bridge/src/com/android/layoutlib/bridge/Bridge.java
index 0121e92..af1f964 100644
--- a/bridge/src/com/android/layoutlib/bridge/Bridge.java
+++ b/bridge/src/com/android/layoutlib/bridge/Bridge.java
@@ -30,6 +30,8 @@
 import com.android.layoutlib.bridge.util.DynamicIdMap;
 import com.android.ninepatch.NinePatchChunk;
 import com.android.resources.ResourceType;
+import com.android.tools.idea.validator.LayoutValidator;
+import com.android.tools.idea.validator.ValidatorResult;
 import com.android.tools.layoutlib.annotations.Nullable;
 import com.android.tools.layoutlib.create.MethodAdapter;
 import com.android.tools.layoutlib.create.OverrideMethod;
@@ -378,6 +380,13 @@
                     if (lastResult.isSuccess() && !doNotRenderOnCreate) {
                         lastResult = scene.render(true /*freshRender*/);
                     }
+
+                    boolean enableLayoutValidation = Boolean.TRUE.equals(
+                            params.getFlag(RenderParamsFlags.FLAG_ENABLE_LAYOUT_VALIDATOR));
+                    if (enableLayoutValidation && !scene.getViewInfos().isEmpty()) {
+                        ValidatorResult validatorResult = LayoutValidator.validate(((View) scene.getViewInfos().get(0).getViewObject()));
+                        lastResult = lastResult.getCopyWithData(validatorResult);
+                    }
                 }
             } finally {
                 scene.release();
diff --git a/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java b/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java
index a2f5976..2640617 100644
--- a/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java
+++ b/bridge/src/com/android/layoutlib/bridge/android/RenderParamsFlags.java
@@ -87,6 +87,12 @@
     public static final Key<Boolean> FLAG_ENABLE_SHADOW =
             new Key<>("enableShadow", Boolean.class);
 
+    /**
+     * Enables layout validation calls within rendering.
+     */
+    public static final Key<Boolean> FLAG_ENABLE_LAYOUT_VALIDATOR =
+            new Key<>("enableLayoutValidator", Boolean.class);
+
     // Disallow instances.
     private RenderParamsFlags() {}
 }