summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDiego Perez <diegoperez@google.com>2015-06-02 17:09:45 +0100
committerDiego Perez <diegoperez@google.com>2015-06-02 17:09:45 +0100
commit4362443cd9a5df6c5cc012881a0aaf96c927b923 (patch)
treef93270aabffc681bbe32ae981a7428523f90874c
parent958a7c1cd816986ac58073ae415b0825c0a11b7b (diff)
downloadframeworks_base-4362443cd9a5df6c5cc012881a0aaf96c927b923.zip
frameworks_base-4362443cd9a5df6c5cc012881a0aaf96c927b923.tar.gz
frameworks_base-4362443cd9a5df6c5cc012881a0aaf96c927b923.tar.bz2
Render to measured size when using expand mode
When using RenderingMode.V_SCROLL or RenderingMode.H_SCROLL, if the screen size is smaller than the measured size but as large as the desired size, the layout will render incorrectly and won't expand. This changes that to expand to at least the size of the screen. Added tests for the V_SCROLL and H_SCROLL modes. Bug: http://b.android.com/174928 Change-Id: I22686903560775e2e4f362af1d7b50c9b985467d
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java10
-rw-r--r--tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.classbin519 -> 598 bytes
-rw-r--r--tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_horz_layout.pngbin0 -> 636 bytes
-rw-r--r--tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_vert_layout.pngbin0 -> 578 bytes
-rw-r--r--tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_horz_layout.xml15
-rw-r--r--tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_layout.xml29
-rw-r--r--tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_vert_layout.xml15
-rw-r--r--tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java73
8 files changed, 131 insertions, 11 deletions
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index f6e5ef1..5ded389 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -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;
+ }
}
}
}
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class
index 36e2688..1499751 100644
--- a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/build/intermediates/classes/debug/com/android/layoutlib/test/myapplication/R$layout.class
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_horz_layout.png b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_horz_layout.png
new file mode 100644
index 0000000..92eb3e1
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_horz_layout.png
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_vert_layout.png b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_vert_layout.png
new file mode 100644
index 0000000..81755ce
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/golden/expand_vert_layout.png
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_horz_layout.xml b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_horz_layout.xml
new file mode 100644
index 0000000..2c66b7f
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_horz_layout.xml
@@ -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>
+
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_layout.xml b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_layout.xml
new file mode 100644
index 0000000..a255da7
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_layout.xml
@@ -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>
diff --git a/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_vert_layout.xml b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_vert_layout.xml
new file mode 100644
index 0000000..5319654
--- /dev/null
+++ b/tools/layoutlib/bridge/tests/res/testApp/MyApplication/src/main/res/layout/expand_vert_layout.xml
@@ -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>
+
diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
index f2a039e..6fcd645 100644
--- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
+++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java
@@ -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(),
@@ -322,25 +354,44 @@ 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());
}