diff options
| -rwxr-xr-x | core/jni/android/graphics/Bitmap.cpp | 2 | ||||
| -rw-r--r-- | graphics/java/android/graphics/Color.java | 2 | ||||
| -rw-r--r-- | tools/aapt2/compile/InlineXmlFormatParser.cpp | 4 | ||||
| -rw-r--r-- | tools/aapt2/compile/InlineXmlFormatParser_test.cpp | 43 |
4 files changed, 50 insertions, 1 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp index ad05a5113dff..108fdbce386f 100755 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/core/jni/android/graphics/Bitmap.cpp @@ -682,6 +682,8 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bitmap); if (!nativeBitmap) { + ALOGE("OOM allocating Bitmap with dimensions %i x %i", width, height); + doThrowOOME(env); return NULL; } diff --git a/graphics/java/android/graphics/Color.java b/graphics/java/android/graphics/Color.java index bdd828fd5127..c4bf9d3123bf 100644 --- a/graphics/java/android/graphics/Color.java +++ b/graphics/java/android/graphics/Color.java @@ -73,7 +73,7 @@ import java.util.function.DoubleUnaryOperator; * <h4>Encoding</h4> * <p>The four components of a color int are encoded in the following way:</p> * <pre class="prettyprint"> - * int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 16 | (B & 0xff); + * int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff); * </pre> * * <p>Because of this encoding, color ints can easily be described as an integer diff --git a/tools/aapt2/compile/InlineXmlFormatParser.cpp b/tools/aapt2/compile/InlineXmlFormatParser.cpp index 857cdd5365a0..73a90da6baf0 100644 --- a/tools/aapt2/compile/InlineXmlFormatParser.cpp +++ b/tools/aapt2/compile/InlineXmlFormatParser.cpp @@ -146,6 +146,10 @@ bool InlineXmlFormatParser::Consume(IAaptContext* context, xml::XmlResource* doc } else { new_doc->root.reset(static_cast<xml::Element*>(child.release())); new_doc->root->parent = nullptr; + // Copy down the namespace declarations + new_doc->root->namespace_decls = doc->root->namespace_decls; + // Recurse for nested inlines + Consume(context, new_doc.get()); } } diff --git a/tools/aapt2/compile/InlineXmlFormatParser_test.cpp b/tools/aapt2/compile/InlineXmlFormatParser_test.cpp index de7739ada407..a4c602c29b86 100644 --- a/tools/aapt2/compile/InlineXmlFormatParser_test.cpp +++ b/tools/aapt2/compile/InlineXmlFormatParser_test.cpp @@ -137,4 +137,47 @@ TEST(InlineXmlFormatParserTest, ExtractTwoXmlResources) { EXPECT_THAT(extracted_doc_drawable->root->name, StrEq("vector")); } +TEST(InlineXmlFormatParserTest, ExtractNestedXmlResources) { + std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); + std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(R"( + <base_root xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:aapt="http://schemas.android.com/aapt"> + <aapt:attr name="inline_xml"> + <inline_root> + <aapt:attr name="nested_inline_xml"> + <nested_inline_root/> + </aapt:attr> + <aapt:attr name="another_nested_inline_xml"> + <root/> + </aapt:attr> + </inline_root> + </aapt:attr> + <aapt:attr name="turtles"> + <root1> + <aapt:attr name="all"> + <root2> + <aapt:attr name="the"> + <root3> + <aapt:attr name="way"> + <root4> + <aapt:attr name="down"> + <root5/> + </aapt:attr> + </root4> + </aapt:attr> + </root3> + </aapt:attr> + </root2> + </aapt:attr> + </root1> + </aapt:attr> + </base_root>)"); + + doc->file.name = test::ParseNameOrDie("layout/main"); + + InlineXmlFormatParser parser; + ASSERT_TRUE(parser.Consume(context.get(), doc.get())); + // Confirm that all of the nested inline xmls are parsed out. + ASSERT_THAT(parser.GetExtractedInlineXmlDocuments(), SizeIs(8u)); +} } // namespace aapt |