paparazzi icon indicating copy to clipboard operation
paparazzi copied to clipboard

NullPointerException when referencing AAPT inlined resources in Compose via `Resources.getXml(id)`

Open dniHze opened this issue 2 years ago • 0 comments

Description AAPT inlined resources are not resolved when referenced from Compose. Due to the way Compose Vector parser works with resources, it first requests an id for resource reference. But as there is no id for this reference, it falls back to 0, so the resource can't be resolved.

Stacktrace

INFO: ComplexColorCompat [4]: Failed to inflate ComplexColor.
java.lang.NullPointerException
	at androidx.core.content.res.ComplexColorCompat.createFromXml(ComplexColorCompat.java:155)
	at androidx.core.content.res.ComplexColorCompat.inflate(ComplexColorCompat.java:140)
	at androidx.core.content.res.TypedArrayUtils.getNamedComplexColor(TypedArrayUtils.java:150)
	at androidx.compose.ui.graphics.vector.compat.AndroidVectorParser.getNamedComplexColor(XmlVectorParser.android.kt:663)
	at androidx.compose.ui.graphics.vector.compat.XmlVectorParser_androidKt.parsePath(XmlVectorParser.android.kt:281)
	at androidx.compose.ui.graphics.vector.compat.XmlVectorParser_androidKt.parseCurrentVectorNode(XmlVectorParser.android.kt:101)
	at androidx.compose.ui.res.VectorResources_androidKt.loadVectorResourceInner(VectorResources.android.kt:81)
	at androidx.compose.ui.res.PainterResources_androidKt.loadVectorResource(PainterResources.android.kt:95)
	at androidx.compose.ui.res.PainterResources_androidKt.painterResource(PainterResources.android.kt:65)
	at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt.Header(UndeclaredIncidentsUi.kt:285)
	at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt.access$Header(UndeclaredIncidentsUi.kt:1)
	at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt$ContentUi$1$1.invoke(UndeclaredIncidentsUi.kt:164)
	at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt$ContentUi$1$1.invoke(UndeclaredIncidentsUi.kt:163)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
	at androidx.compose.foundation.lazy.list.LazyListScopeImpl$item$2$1.invoke(LazyListScopeImpl.kt:51)
	at androidx.compose.foundation.lazy.list.LazyListScopeImpl$item$2$1.invoke(LazyListScopeImpl.kt:51)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
	at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
	at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84)
	at androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory$CachedItemContent$content$1.invoke(LazyLayoutItemContentFactory.kt:103)
	at androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory$CachedItemContent$content$1.invoke(LazyLayoutItemContentFactory.kt:94)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
	at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayout.kt:251)
	at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayout.kt:251)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
	at androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:3337)
	at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2582)
	at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2571)
	at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:247)
	at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source)
	at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2571)
	at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2522)
	at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:478)
	at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:748)
	at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:2987)
Jun 24, 2022 12:30:33 PM app.cash.paparazzi.internal.PaparazziLogger logAndroidFramework

Steps to Reproduce

  1. Create a composable that uses a vector drawable with aapt attr inlined resources (like this one);
  2. Create a simple Paparazzi test and run it;

Expected behavior Inlined resources (like gradients) are supported and rendered correctly in Compose.

Additional information:

  • Paparazzi Version: 1.0.0
  • OS: macOS 12.4
  • Compile SDK: 31
  • Gradle Version: 7.4.2
  • Android Gradle Plugin Version: 7.2.1

Screenshots

Expected screenshot Actual screenshot
image image

dniHze avatar Jun 24 '22 11:06 dniHze