aboutsummaryrefslogtreecommitdiff
path: root/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
diff options
context:
space:
mode:
Diffstat (limited to 'bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java')
-rw-r--r--bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java393
1 files changed, 261 insertions, 132 deletions
diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
index 91c79c9587..7b9c163634 100644
--- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
+++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java
@@ -29,12 +29,12 @@ import com.android.internal.R;
import com.android.internal.lang.System_Delegate;
import com.android.layoutlib.bridge.android.BridgeContext;
import com.android.layoutlib.bridge.android.RenderParamsFlags;
+import com.android.layoutlib.bridge.android.RenderTestBase;
import com.android.layoutlib.bridge.impl.ParserFactory;
import com.android.layoutlib.bridge.impl.RenderAction;
import com.android.layoutlib.bridge.impl.RenderActionTestUtil;
import com.android.layoutlib.bridge.impl.ResourceHelper;
import com.android.layoutlib.bridge.intensive.setup.ConfigGenerator;
-import com.android.layoutlib.bridge.intensive.setup.LayoutLibTestCallback;
import com.android.layoutlib.bridge.intensive.setup.LayoutPullParser;
import com.android.resources.Density;
import com.android.resources.Navigation;
@@ -67,6 +67,7 @@ import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.util.concurrent.TimeUnit;
@@ -101,20 +102,26 @@ public class RenderTests extends RenderTestBase {
LayoutPullParser parser = LayoutPullParser.createFromString(
"<RelativeLayout xmlns:android=\"http://schemas" +
- ".android.com/apk/res/android\"\n" +
- " android:layout_width=\"match_parent\"\n" +
- " android:layout_height=\"match_parent\"\n" +
- " android:paddingLeft=\"@dimen/activity_horizontal_margin\"\n" +
- " android:paddingRight=\"@dimen/activity_horizontal_margin\"\n" +
- " android:paddingTop=\"@dimen/activity_vertical_margin\"\n" +
- " android:paddingBottom=\"@dimen/activity_vertical_margin\">\n" +
- " <TextView\n" +
- " android:text=\"@string/hello_world\"\n" +
- " android:layout_width=\"wrap_content\"\n" +
- " android:layout_height=\"200dp\"\n" +
- " android:background=\"#FF0000\"\n" +
- " android:id=\"@+id/text1\"/>\n" +
- "</RelativeLayout>");
+ ".android.com/apk/res/android\"\n" +
+ " android:layout_width=\"match_parent\"\n" +
+ " android:layout_height=\"match_parent\"\n" +
+ " android:paddingLeft=\"@dimen/activity_horizontal_margin"
+ + "\"\n"
+ +
+ " android:paddingRight=\"@dimen/activity_horizontal_margin"
+ + "\"\n"
+ +
+ " android:paddingTop=\"@dimen/activity_vertical_margin\"\n" +
+ " android:paddingBottom=\"@dimen/activity_vertical_margin"
+ + "\">\n"
+ +
+ " <TextView\n" +
+ " android:text=\"@string/hello_world\"\n" +
+ " android:layout_width=\"wrap_content\"\n" +
+ " android:layout_height=\"200dp\"\n" +
+ " android:background=\"#FF0000\"\n" +
+ " android:id=\"@+id/text1\"/>\n" +
+ "</RelativeLayout>");
SessionParams params = getSessionParamsBuilder()
.setParser(parser)
.setCallback(layoutLibCallback)
@@ -149,10 +156,10 @@ public class RenderTests extends RenderTestBase {
parser = createParserFromPath("four_corners.xml");
params = getSessionParamsBuilder()
- .setParser(parser)
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.Light.NoActionBar", false)
- .build();
+ .setParser(parser)
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.Light.NoActionBar", false)
+ .build();
renderAndVerify(params, "four_corners.png");
}
@@ -194,19 +201,25 @@ public class RenderTests extends RenderTestBase {
public void testActivityActionBar() throws ClassNotFoundException {
String simpleActivity =
"<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
- " android:layout_width=\"match_parent\"\n" +
- " android:layout_height=\"match_parent\"\n" +
- " android:paddingLeft=\"@dimen/activity_horizontal_margin\"\n" +
- " android:paddingRight=\"@dimen/activity_horizontal_margin\"\n" +
- " android:paddingTop=\"@dimen/activity_vertical_margin\"\n" +
- " android:paddingBottom=\"@dimen/activity_vertical_margin\">\n" +
- " <TextView\n" +
- " android:text=\"@string/hello_world\"\n" +
- " android:layout_width=\"wrap_content\"\n" +
- " android:layout_height=\"200dp\"\n" +
- " android:background=\"#FF0000\"\n" +
- " android:id=\"@+id/text1\"/>\n" +
- "</RelativeLayout>";
+ " android:layout_width=\"match_parent\"\n" +
+ " android:layout_height=\"match_parent\"\n" +
+ " android:paddingLeft=\"@dimen/activity_horizontal_margin"
+ + "\"\n"
+ +
+ " android:paddingRight=\"@dimen/activity_horizontal_margin"
+ + "\"\n"
+ +
+ " android:paddingTop=\"@dimen/activity_vertical_margin\"\n" +
+ " android:paddingBottom=\"@dimen/activity_vertical_margin"
+ + "\">\n"
+ +
+ " <TextView\n" +
+ " android:text=\"@string/hello_world\"\n" +
+ " android:layout_width=\"wrap_content\"\n" +
+ " android:layout_height=\"200dp\"\n" +
+ " android:background=\"#FF0000\"\n" +
+ " android:id=\"@+id/text1\"/>\n" +
+ "</RelativeLayout>";
LayoutPullParser parser = LayoutPullParser.createFromString(simpleActivity);
LayoutLibTestCallback layoutLibCallback =
@@ -224,11 +237,11 @@ public class RenderTests extends RenderTestBase {
parser = LayoutPullParser.createFromString(simpleActivity);
params = getSessionParamsBuilder()
- .setParser(parser)
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.Light", false)
- .setRenderingMode(RenderingMode.V_SCROLL)
- .build();
+ .setParser(parser)
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.Light", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
renderAndVerify(params, "simple_activity.png");
@@ -236,11 +249,11 @@ public class RenderTests extends RenderTestBase {
// displaying menus.
parser = LayoutPullParser.createFromString(simpleActivity);
params = getSessionParamsBuilder()
- .setParser(parser)
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.Light.NoActionBar", false)
- .setRenderingMode(RenderingMode.V_SCROLL)
- .build();
+ .setParser(parser)
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.Light.NoActionBar", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
params.setFlag(RenderParamsFlags.FLAG_KEY_ROOT_TAG, "menu");
renderAndVerify(params, "simple_activity.png");
}
@@ -253,19 +266,19 @@ public class RenderTests extends RenderTestBase {
Class insetsWidgetClass = Class.forName("com.android.layoutlib.test.myapplication.widgets" +
".InsetsWidget");
Field field = insetsWidgetClass.getDeclaredField("sApplyInsetsCalled");
- assertFalse((Boolean)field.get(null));
+ assertFalse((Boolean) field.get(null));
LayoutPullParser parser = LayoutPullParser.createFromString(
"<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
- " android:padding=\"16dp\"\n" +
- " android:orientation=\"horizontal\"\n" +
- " android:layout_width=\"wrap_content\"\n" +
- " android:layout_height=\"wrap_content\">\n" + "\n" +
- " <com.android.layoutlib.test.myapplication.widgets.InsetsWidget\n" +
- " android:text=\"Hello world\"\n" +
- " android:layout_width=\"wrap_content\"\n" +
- " android:layout_height=\"wrap_content\"\n" +
- " android:id=\"@+id/text1\"/>\n" + "</LinearLayout>\n");
+ " android:padding=\"16dp\"\n" +
+ " android:orientation=\"horizontal\"\n" +
+ " android:layout_width=\"wrap_content\"\n" +
+ " android:layout_height=\"wrap_content\">\n" + "\n" +
+ " <com.android.layoutlib.test.myapplication.widgets.InsetsWidget\n" +
+ " android:text=\"Hello world\"\n" +
+ " android:layout_width=\"wrap_content\"\n" +
+ " android:layout_height=\"wrap_content\"\n" +
+ " android:id=\"@+id/text1\"/>\n" + "</LinearLayout>\n");
LayoutLibTestCallback layoutLibCallback =
new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
layoutLibCallback.initResources();
@@ -277,7 +290,7 @@ public class RenderTests extends RenderTestBase {
render(sBridge, params, -1);
- assertTrue((Boolean)field.get(null));
+ assertTrue((Boolean) field.get(null));
field.set(null, false);
}
@@ -314,12 +327,12 @@ public class RenderTests extends RenderTestBase {
.setNavigation(Navigation.NONAV);
parser = createParserFromPath("expand_horz_layout.xml");
params = getSessionParamsBuilder()
- .setParser(parser)
- .setConfigGenerator(customConfigGenerator)
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.Light.NoActionBar.Fullscreen", false)
- .setRenderingMode(RenderingMode.H_SCROLL)
- .build();
+ .setParser(parser)
+ .setConfigGenerator(customConfigGenerator)
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.Light.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.H_SCROLL)
+ .build();
renderAndVerify(params, "expand_horz_layout.png");
}
@@ -399,11 +412,11 @@ public class RenderTests extends RenderTestBase {
parser = LayoutPullParser.createFromString(layout);
params = getSessionParamsBuilder()
- .setParser(parser)
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
- .setRenderingMode(RenderingMode.V_SCROLL)
- .build();
+ .setParser(parser)
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
renderAndVerify(params, "animated_vector_1.png", TimeUnit.SECONDS.toNanos(3));
}
@@ -415,16 +428,16 @@ public class RenderTests extends RenderTestBase {
public void testVectorDrawable() throws ClassNotFoundException {
// Create the layout pull parser.
LayoutPullParser parser = LayoutPullParser.createFromString(
- "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
- " android:padding=\"16dp\"\n" +
- " android:orientation=\"horizontal\"\n" +
- " android:layout_width=\"fill_parent\"\n" +
- " android:layout_height=\"fill_parent\">\n" +
- " <ImageView\n" +
- " android:layout_height=\"fill_parent\"\n" +
- " android:layout_width=\"fill_parent\"\n" +
- " android:src=\"@drawable/multi_path\" />\n" + "\n" +
- "</LinearLayout>");
+ "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+ " android:padding=\"16dp\"\n" +
+ " android:orientation=\"horizontal\"\n" +
+ " android:layout_width=\"fill_parent\"\n" +
+ " android:layout_height=\"fill_parent\">\n" +
+ " <ImageView\n" +
+ " android:layout_height=\"fill_parent\"\n" +
+ " android:layout_width=\"fill_parent\"\n" +
+ " android:src=\"@drawable/multi_path\" />\n" + "\n" +
+ "</LinearLayout>");
// Create LayoutLibCallback.
LayoutLibTestCallback layoutLibCallback =
new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
@@ -792,12 +805,12 @@ public class RenderTests extends RenderTestBase {
parser = createParserFromPath("scrolled.xml");
params = getSessionParamsBuilder()
- .setParser(parser)
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
- .setRenderingMode(RenderingMode.V_SCROLL)
- .disableDecoration()
- .build();
+ .setParser(parser)
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .disableDecoration()
+ .build();
params.setExtendedViewInfoMode(true);
result = renderAndVerify(params, "scrolled.png");
@@ -824,7 +837,8 @@ public class RenderTests extends RenderTestBase {
AssetManager assetManager = AssetManager.getSystem();
DisplayMetrics metrics = new DisplayMetrics();
Configuration configuration = RenderAction.getConfiguration(params);
- BridgeContext context = new BridgeContext(params.getProjectKey(), metrics, params.getResources(),
+ BridgeContext context = new BridgeContext(params.getProjectKey(), metrics,
+ params.getResources(),
params.getAssets(), params.getLayoutlibCallback(), configuration,
params.getTargetSdkVersion(), params.isRtlSupported());
Resources resources = Resources_Delegate.initSystem(context, assetManager, metrics,
@@ -866,7 +880,8 @@ public class RenderTests extends RenderTestBase {
AssetManager assetManager = AssetManager.getSystem();
DisplayMetrics metrics = new DisplayMetrics();
Configuration configuration = RenderAction.getConfiguration(params);
- BridgeContext context = new BridgeContext(params.getProjectKey(), metrics, params.getResources(),
+ BridgeContext context = new BridgeContext(params.getProjectKey(), metrics,
+ params.getResources(),
params.getAssets(), params.getLayoutlibCallback(), configuration,
params.getTargetSdkVersion(), params.isRtlSupported());
Resources resources = Resources_Delegate.initSystem(context, assetManager, metrics,
@@ -915,46 +930,46 @@ public class RenderTests extends RenderTestBase {
new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
layoutLibCallback.initResources();
- layoutLibCallback.setAdaptiveIconMaskPath("M50,0L100,0 100,100 0,100 0,0z");
SessionParams params = getSessionParamsBuilder()
.setParser(parser)
.setCallback(layoutLibCallback)
.setTheme("Theme.Material.NoActionBar.Fullscreen", false)
.setRenderingMode(RenderingMode.V_SCROLL)
.build();
-
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
+ "M50,0L100,0 100,100 0,100 0,0z");
renderAndVerify(params, "adaptive_icon.png");
- layoutLibCallback.setAdaptiveIconMaskPath(
+ params = getSessionParamsBuilder()
+ .setParser(LayoutPullParser.createFromString(layout))
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
"M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 " +
"22.4 22.4 0 50 0Z");
- params = getSessionParamsBuilder()
- .setParser(LayoutPullParser.createFromString(layout))
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
- .setRenderingMode(RenderingMode.V_SCROLL)
- .build();
renderAndVerify(params, "adaptive_icon_circle.png");
- layoutLibCallback.setAdaptiveIconMaskPath(
+ params = getSessionParamsBuilder()
+ .setParser(LayoutPullParser.createFromString(layout))
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
"M50,0L92,0C96.42,0 100,4.58 100 8L100,92C100, 96.42 96.42 100 92 100L8 100C4.58," +
" 100 0 96.42 0 92L0 8 C 0 4.42 4.42 0 8 0L50 0Z");
- params = getSessionParamsBuilder()
- .setParser(LayoutPullParser.createFromString(layout))
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
- .setRenderingMode(RenderingMode.V_SCROLL)
- .build();
renderAndVerify(params, "adaptive_icon_rounded_corners.png");
- layoutLibCallback.setAdaptiveIconMaskPath(
- "M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z");
params = getSessionParamsBuilder()
- .setParser(LayoutPullParser.createFromString(layout))
- .setCallback(layoutLibCallback)
- .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
- .setRenderingMode(RenderingMode.V_SCROLL)
- .build();
+ .setParser(LayoutPullParser.createFromString(layout))
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
+ "M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z");
renderAndVerify(params, "adaptive_icon_squircle.png");
}
@@ -1000,20 +1015,31 @@ public class RenderTests extends RenderTestBase {
mContext.resolveThemeAttribute(android.R.attr.isLightTheme, outValue, true);
assertEquals(TypedValue.TYPE_INT_BOOLEAN, outValue.type);
assertEquals(1, outValue.data);
+
+ outValue = new TypedValue();
+ mContext.resolveThemeAttribute(android.R.attr.scrollbarFadeDuration, outValue, true);
+ assertEquals(TypedValue.TYPE_INT_DEC, outValue.type);
+ assertEquals(250, outValue.data);
+
+ outValue = new TypedValue();
+ mContext.resolveThemeAttribute(android.R.attr.scrollbarThumbHorizontal, outValue, true);
+ assertEquals(TypedValue.TYPE_STRING, outValue.type);
+ assertNotNull(outValue.string);
assertTrue(sRenderMessages.isEmpty());
}
@Test
public void testColorStateList() throws Exception {
- final String STATE_LIST = "<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n" +
- " <item android:state_pressed=\"true\"\n" +
- " android:color=\"?android:attr/colorForeground\"/> \n" +
- " <item android:state_focused=\"true\"\n" +
- " android:color=\"?android:attr/colorBackground\"/> \n" +
- " <item android:color=\"#a000\"/> <!-- default -->\n" + "</selector>";
+ final String STATE_LIST =
+ "<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n" +
+ " <item android:state_pressed=\"true\"\n" +
+ " android:color=\"?android:attr/colorForeground\"/> \n" +
+ " <item android:state_focused=\"true\"\n" +
+ " android:color=\"?android:attr/colorBackground\"/> \n" +
+ " <item android:color=\"#a000\"/> <!-- default -->\n" + "</selector>";
File tmpColorList = File.createTempFile("statelist", "xml");
- try(PrintWriter output = new PrintWriter(new FileOutputStream(tmpColorList))) {
+ try (PrintWriter output = new PrintWriter(new FileOutputStream(tmpColorList))) {
output.println(STATE_LIST);
}
@@ -1126,7 +1152,8 @@ public class RenderTests extends RenderTestBase {
AssetManager assetManager = AssetManager.getSystem();
DisplayMetrics metrics = new DisplayMetrics();
Configuration configuration = RenderAction.getConfiguration(params);
- BridgeContext context = new BridgeContext(params.getProjectKey(), metrics, params.getResources(),
+ BridgeContext context = new BridgeContext(params.getProjectKey(), metrics,
+ params.getResources(),
params.getAssets(), params.getLayoutlibCallback(), configuration,
params.getTargetSdkVersion(), params.isRtlSupported());
Resources resources = Resources_Delegate.initSystem(context, assetManager, metrics,
@@ -1294,17 +1321,17 @@ public class RenderTests extends RenderTestBase {
public void testCrashes() throws ClassNotFoundException {
final String layout =
"<LinearLayout " +
- "xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
- " android:layout_width=\"match_parent\"\n" +
- " android:layout_height=\"match_parent\">\n" +
- "<com.android.layoutlib.bridge.test.widgets.HookWidget " +
- " android:layout_width=\"100dp\"\n" +
- " android:layout_height=\"200dp\" />\n" +
- "<LinearLayout " +
- " android:background=\"#CBBAF0\"\n" +
- " android:layout_width=\"100dp\"\n" +
- " android:layout_height=\"200dp\" />\n" +
- "</LinearLayout>";
+ "xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+ " android:layout_width=\"match_parent\"\n" +
+ " android:layout_height=\"match_parent\">\n" +
+ "<com.android.layoutlib.bridge.test.widgets.HookWidget " +
+ " android:layout_width=\"100dp\"\n" +
+ " android:layout_height=\"200dp\" />\n" +
+ "<LinearLayout " +
+ " android:background=\"#CBBAF0\"\n" +
+ " android:layout_width=\"100dp\"\n" +
+ " android:layout_height=\"200dp\" />\n" +
+ "</LinearLayout>";
{
com.android.layoutlib.bridge.test.widgets.HookWidget.setOnPreDrawHook(() -> {
throw new NullPointerException();
@@ -1429,7 +1456,7 @@ public class RenderTests extends RenderTestBase {
.disableDecoration()
.build();
- RenderResult result = RenderTestBase.render(sBridge, params, -1);
+ RenderResult result = render(sBridge, params, -1);
BufferedImage image = result.getImage();
assertNotNull(image);
Graphics2D g = (Graphics2D) image.getGraphics();
@@ -1438,7 +1465,7 @@ public class RenderTests extends RenderTestBase {
paintBorders(g, 0, 0, 0, vInfo);
}
- RenderTestBase.verify("view_boundaries.png", image);
+ verify("view_boundaries.png", image);
}
/**
@@ -1555,7 +1582,7 @@ public class RenderTests extends RenderTestBase {
.setCallback(layoutLibCallback)
.setImageFactory((width, height) ->
new BufferedImage(width / 10, height / 10,
- BufferedImage.TYPE_INT_ARGB))
+ BufferedImage.TYPE_INT_ARGB))
.setFlag(RenderParamsFlags.FLAG_KEY_RESULT_IMAGE_AUTO_SCALE, true)
.build();
@@ -1737,7 +1764,8 @@ public class RenderTests extends RenderTestBase {
// Create the layout pull parser.
LayoutPullParser parser = LayoutPullParser.createFromString(layout);
// Create LayoutLibCallback.
- LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
+ LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger(),
+ mDefaultClassLoader);
layoutLibCallback.initResources();
SessionParams params = getSessionParamsBuilder()
@@ -1754,7 +1782,8 @@ public class RenderTests extends RenderTestBase {
// Create the layout pull parser.
LayoutPullParser parser = LayoutPullParser.createFromString(layout);
// Create LayoutLibCallback.
- LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
+ LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger(),
+ mDefaultClassLoader);
layoutLibCallback.initResources();
SessionParams params = getSessionParamsBuilder()
@@ -1818,7 +1847,8 @@ public class RenderTests extends RenderTestBase {
// Create the layout pull parser.
LayoutPullParser parser = LayoutPullParser.createFromString(layout);
// Create LayoutLibCallback.
- LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
+ LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger(),
+ mDefaultClassLoader);
layoutLibCallback.initResources();
SessionParams params = getSessionParamsBuilder()
@@ -1838,8 +1868,7 @@ public class RenderTests extends RenderTestBase {
if (!session.getResult().isSuccess()) {
getLogger().error(session.getResult().getException(),
session.getResult().getErrorMessage());
- }
- else {
+ } else {
// Render the session with a timeout of 50s.
Result renderResult = session.render(50000);
if (!renderResult.isSuccess()) {
@@ -2001,4 +2030,104 @@ public class RenderTests extends RenderTestBase {
renderAndVerify(params, "window_background.png",
TimeUnit.SECONDS.toNanos(2));
}
+
+ @Test
+ public void testThemedAdaptiveIcon() throws ClassNotFoundException, IOException {
+ // Create the layout pull parser.
+ String layout =
+ "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+ " android:padding=\"16dp\"\n" +
+ " android:orientation=\"horizontal\"\n" +
+ " android:layout_width=\"fill_parent\"\n" +
+ " android:layout_height=\"fill_parent\">\n" +
+ " <ImageView\n" +
+ " android:layout_height=\"wrap_content\"\n" +
+ " android:layout_width=\"wrap_content\"\n" +
+ " android:src=\"@drawable/adaptive\" />\n" +
+ "</LinearLayout>\n";
+ // Create LayoutLibCallback.
+ LayoutLibTestCallback layoutLibCallback =
+ new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
+ layoutLibCallback.initResources();
+ SessionParams params = getSessionParamsBuilder()
+ .setParser(LayoutPullParser.createFromString(layout))
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
+ "M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 " +
+ "22.4 22.4 0 50 0Z");
+ renderAndVerify(params, "adaptive_icon_circle.png");
+
+ params = getSessionParamsBuilder()
+ .setParser(LayoutPullParser.createFromString(layout))
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
+ "M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 " +
+ "22.4 22.4 0 50 0Z");
+ params.setFlag(RenderParamsFlags.FLAG_KEY_WALLPAPER_PATH,
+ "/com/android/layoutlib/testdata/wallpaper1.webp");
+ params.setFlag(RenderParamsFlags.FLAG_KEY_USE_THEMED_ICON, true);
+ renderAndVerify(params, "adaptive_icon_dynamic_orange.png");
+
+ params = getSessionParamsBuilder()
+ .setParser(LayoutPullParser.createFromString(layout))
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
+ "M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 " +
+ "22.4 22.4 0 50 0Z");
+ params.setFlag(RenderParamsFlags.FLAG_KEY_WALLPAPER_PATH,
+ "/com/android/layoutlib/testdata/wallpaper2.webp");
+ params.setFlag(RenderParamsFlags.FLAG_KEY_USE_THEMED_ICON, true);
+ renderAndVerify(params, "adaptive_icon_dynamic_green.png");
+
+ params = getSessionParamsBuilder()
+ .setParser(LayoutPullParser.createFromString(layout))
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .build();
+ params.setFlag(RenderParamsFlags.FLAG_KEY_ADAPTIVE_ICON_MASK_PATH,
+ "M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 " +
+ "22.4 22.4 0 50 0Z");
+ params.setFlag(RenderParamsFlags.FLAG_KEY_WALLPAPER_PATH,
+ "/com/android/layoutlib/testdata/wallpaper2.webp");
+ params.setFlag(RenderParamsFlags.FLAG_KEY_USE_THEMED_ICON, false);
+ renderAndVerify(params, "adaptive_icon_circle.png");
+ }
+
+ @Test
+ public void testHtmlText() throws ClassNotFoundException {
+ final String layout =
+ "<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" +
+ " android:layout_width=\"match_parent\"\n" +
+ " android:layout_height=\"match_parent\">\n" + "\n" +
+ " <com.android.layoutlib.bridge.test.widgets.HtmlTextView\n" +
+ " android:layout_width=\"wrap_content\"\n" +
+ " android:layout_height=\"wrap_content\"\n" +
+ " android:textSize=\"30sp\"/>\n" +
+ "</FrameLayout>";
+ LayoutPullParser parser = LayoutPullParser.createFromString(layout);
+ // Create LayoutLibCallback.
+ LayoutLibTestCallback layoutLibCallback =
+ new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
+ layoutLibCallback.initResources();
+
+ SessionParams params = getSessionParamsBuilder()
+ .setParser(parser)
+ .setCallback(layoutLibCallback)
+ .setTheme("Theme.Material.Light.NoActionBar.Fullscreen", false)
+ .setRenderingMode(RenderingMode.V_SCROLL)
+ .disableDecoration()
+ .build();
+
+ renderAndVerify(params, "html.png", TimeUnit.SECONDS.toNanos(2));
+ }
}