Merge "Render to measured size when using expand mode" into lmp-mr1-dev
This commit is contained in:
@@ -523,6 +523,11 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
if (neededWidth > measuredWidth) {
|
||||
mMeasuredScreenWidth += neededWidth - measuredWidth;
|
||||
}
|
||||
if (mMeasuredScreenWidth < measuredWidth) {
|
||||
// If the screen width is less than the exact measured width,
|
||||
// expand to match.
|
||||
mMeasuredScreenWidth = measuredWidth;
|
||||
}
|
||||
}
|
||||
|
||||
if (renderingMode.isVertExpand()) {
|
||||
@@ -531,6 +536,11 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
if (neededHeight > measuredHeight) {
|
||||
mMeasuredScreenHeight += neededHeight - measuredHeight;
|
||||
}
|
||||
if (mMeasuredScreenHeight < measuredHeight) {
|
||||
// If the screen height is less than the exact measured height,
|
||||
// expand to match.
|
||||
mMeasuredScreenHeight = measuredHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 636 B |
Binary file not shown.
|
After Width: | Height: | Size: 578 B |
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:padding="16dp"
|
||||
android:orientation="horizontal"
|
||||
android:background="#AAAAAA"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<include layout="@layout/expand_layout"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<TextView
|
||||
android:background="#FF0000"
|
||||
android:textSize="200sp"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp" />
|
||||
<TextView
|
||||
android:background="#00FF00"
|
||||
android:textSize="200sp"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp" />
|
||||
<TextView
|
||||
android:background="#0000FF"
|
||||
android:textSize="200sp"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp" />
|
||||
<TextView
|
||||
android:background="#FF00FF"
|
||||
android:textSize="200sp"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp" />
|
||||
<TextView
|
||||
android:background="#00FFFF"
|
||||
android:textSize="200sp"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp" />
|
||||
</merge>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:padding="16dp"
|
||||
android:orientation="vertical"
|
||||
android:background="#AAAAAA"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<include layout="@layout/expand_layout"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -32,6 +32,8 @@ import com.android.layoutlib.bridge.Bridge;
|
||||
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;
|
||||
import com.android.utils.ILogger;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -288,20 +290,50 @@ public class Main {
|
||||
renderAndVerify("allwidgets.xml", "allwidgets.png");
|
||||
}
|
||||
|
||||
/** Test expand_layout.xml */
|
||||
@Test
|
||||
public void testExpand() throws ClassNotFoundException {
|
||||
// Create the layout pull parser.
|
||||
LayoutPullParser parser = new LayoutPullParser(APP_TEST_RES + "/layout/" +
|
||||
"expand_vert_layout.xml");
|
||||
// Create LayoutLibCallback.
|
||||
LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger());
|
||||
layoutLibCallback.initResources();
|
||||
|
||||
ConfigGenerator customConfigGenerator = new ConfigGenerator()
|
||||
.setScreenWidth(300)
|
||||
.setScreenHeight(20)
|
||||
.setDensity(Density.XHIGH)
|
||||
.setNavigation(Navigation.NONAV);
|
||||
|
||||
SessionParams params = getSessionParams(parser, customConfigGenerator,
|
||||
layoutLibCallback, "Theme.Material.NoActionBar.Fullscreen", RenderingMode.V_SCROLL,
|
||||
22);
|
||||
|
||||
renderAndVerify(params, "expand_vert_layout.png");
|
||||
|
||||
customConfigGenerator = new ConfigGenerator()
|
||||
.setScreenWidth(20)
|
||||
.setScreenHeight(300)
|
||||
.setDensity(Density.XHIGH)
|
||||
.setNavigation(Navigation.NONAV);
|
||||
parser = new LayoutPullParser(APP_TEST_RES + "/layout/" +
|
||||
"expand_horz_layout.xml");
|
||||
params = getSessionParams(parser, customConfigGenerator,
|
||||
layoutLibCallback, "Theme.Material.NoActionBar.Fullscreen", RenderingMode
|
||||
.H_SCROLL, 22);
|
||||
|
||||
renderAndVerify(params, "expand_horz_layout.png");
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new rendering session and test that rendering given layout on nexus 5
|
||||
* doesn't throw any exceptions and matches the provided image.
|
||||
*/
|
||||
private void renderAndVerify(String layoutFileName, String goldenFileName)
|
||||
private void renderAndVerify(SessionParams params, String goldenFileName)
|
||||
throws ClassNotFoundException {
|
||||
// Create the layout pull parser.
|
||||
LayoutPullParser parser = new LayoutPullParser(APP_TEST_RES + "/layout/" + layoutFileName);
|
||||
// Create LayoutLibCallback.
|
||||
LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger());
|
||||
layoutLibCallback.initResources();
|
||||
// TODO: Set up action bar handler properly to test menu rendering.
|
||||
// Create session params.
|
||||
SessionParams params = getSessionParams(parser, ConfigGenerator.NEXUS_5, layoutLibCallback);
|
||||
RenderSession session = mBridge.createSession(params);
|
||||
if (!session.getResult().isSuccess()) {
|
||||
getLogger().error(session.getResult().getException(),
|
||||
@@ -321,26 +353,45 @@ public class Main {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new rendering session and test that rendering given layout on nexus 5
|
||||
* doesn't throw any exceptions and matches the provided image.
|
||||
*/
|
||||
private void renderAndVerify(String layoutFileName, String goldenFileName)
|
||||
throws ClassNotFoundException {
|
||||
// Create the layout pull parser.
|
||||
LayoutPullParser parser = new LayoutPullParser(APP_TEST_RES + "/layout/" + layoutFileName);
|
||||
// Create LayoutLibCallback.
|
||||
LayoutLibTestCallback layoutLibCallback = new LayoutLibTestCallback(getLogger());
|
||||
layoutLibCallback.initResources();
|
||||
// TODO: Set up action bar handler properly to test menu rendering.
|
||||
// Create session params.
|
||||
SessionParams params = getSessionParams(parser, ConfigGenerator.NEXUS_5,
|
||||
layoutLibCallback, "Theme.Material.Light.DarkActionBar", RenderingMode.NORMAL, 22);
|
||||
renderAndVerify(params, goldenFileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses Theme.Material and Target sdk version as 22.
|
||||
*/
|
||||
private SessionParams getSessionParams(LayoutPullParser layoutParser,
|
||||
ConfigGenerator configGenerator, LayoutLibTestCallback layoutLibCallback) {
|
||||
ConfigGenerator configGenerator, LayoutLibTestCallback layoutLibCallback,
|
||||
String themeName, RenderingMode renderingMode, int targetSdk) {
|
||||
FolderConfiguration config = configGenerator.getFolderConfig();
|
||||
ResourceResolver resourceResolver =
|
||||
ResourceResolver.create(mProjectResources.getConfiguredResources(config),
|
||||
mFrameworkRepo.getConfiguredResources(config),
|
||||
"Theme.Material.Light.DarkActionBar", false);
|
||||
themeName, false);
|
||||
|
||||
return new SessionParams(
|
||||
layoutParser,
|
||||
RenderingMode.NORMAL,
|
||||
renderingMode,
|
||||
null /*used for caching*/,
|
||||
configGenerator.getHardwareConfig(),
|
||||
resourceResolver,
|
||||
layoutLibCallback,
|
||||
0,
|
||||
22, // TODO: Make it more configurable to run tests for various versions.
|
||||
targetSdk,
|
||||
getLayoutLog());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user