diff --git a/samples/showcase/src/main/java/com/facebook/fresco/samples/showcase/ShowcaseApplication.kt b/samples/showcase/src/main/java/com/facebook/fresco/samples/showcase/ShowcaseApplication.kt index c383cd58b5..4b3326bff3 100644 --- a/samples/showcase/src/main/java/com/facebook/fresco/samples/showcase/ShowcaseApplication.kt +++ b/samples/showcase/src/main/java/com/facebook/fresco/samples/showcase/ShowcaseApplication.kt @@ -23,6 +23,7 @@ import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin import com.facebook.flipper.plugins.fresco.FrescoFlipperRequestListener import com.facebook.flipper.plugins.inspector.DescriptorMapping import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin +import com.facebook.fresco.samples.showcase.imageformat.svg.SvgDecoderExample import com.facebook.fresco.samples.showcase.misc.DebugOverlaySupplierSingleton import com.facebook.fresco.samples.showcase.misc.ImageUriProvider import com.facebook.fresco.samples.showcase.misc.LogcatRequestListener2 @@ -164,6 +165,12 @@ class ShowcaseApplication : Application() { resources: Resources, vitoConfig: FrescoVitoConfig = DefaultFrescoVitoConfig(), ) { + val externalImageOptionsDrawableFactories = if (CustomImageFormatConfigurator.isSvgEnabled(this)) { + listOf(SvgDecoderExample.SvgDrawableFactory()) + } else { + emptyList() + } + if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(KEY_VITO_KOTLIN, false)) { FrescoVito.initialize( KFrescoVitoProvider( @@ -177,13 +184,18 @@ class ShowcaseApplication : Application() { .executorSupplier .forLightweightBackgroundTasks(), NoOpCallerContextVerifier, - DebugOverlayHandler(DebugOverlaySupplierSingleton.getInstance(applicationContext)))) + DebugOverlayHandler(DebugOverlaySupplierSingleton.getInstance(applicationContext)), + externalImageOptionsDrawableFactories, + ) + ) } else { FrescoVito.initialize( vitoConfig = vitoConfig, debugOverlayEnabledSupplier = DebugOverlaySupplierSingleton.getInstance(applicationContext), - vitoImagePerfListener = imageTracker) + vitoImagePerfListener = imageTracker, + externalImageOptionsDrawableFactories = externalImageOptionsDrawableFactories + ) } } diff --git a/vito/init/src/main/java/com/facebook/fresco/vito/init/FrescoVito.kt b/vito/init/src/main/java/com/facebook/fresco/vito/init/FrescoVito.kt index 8c4281efc7..5fb3e66b13 100644 --- a/vito/init/src/main/java/com/facebook/fresco/vito/init/FrescoVito.kt +++ b/vito/init/src/main/java/com/facebook/fresco/vito/init/FrescoVito.kt @@ -29,6 +29,7 @@ import com.facebook.fresco.vito.provider.impl.NoOpCallerContextVerifier import com.facebook.fresco.vito.provider.setup.FrescoVitoSetup import com.facebook.imagepipeline.core.ImagePipeline import com.facebook.imagepipeline.core.ImagePipelineFactory +import com.facebook.imagepipeline.drawable.DrawableFactory import java.util.concurrent.Executor class FrescoVito { @@ -60,6 +61,7 @@ class FrescoVito { imagePerfListenerSupplier: Supplier? = null, showExtendedDebugOverlayInformation: Boolean = true, showExtendedImageSourceExtraInformation: Boolean = false, + externalImageOptionsDrawableFactories: List = emptyList(), ) { if (isInitialized) { return @@ -84,7 +86,10 @@ class FrescoVito { showExtendedImageSourceExtraInformation, it) } ?: NoOpDebugOverlayFactory2(), - imagePerfListenerSupplier)) + imagePerfListenerSupplier, + externalImageOptionsDrawableFactories, + ), + ) } /** diff --git a/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/DefaultFrescoVitoProvider.kt b/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/DefaultFrescoVitoProvider.kt index 2ec68734be..8fdb3699e3 100644 --- a/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/DefaultFrescoVitoProvider.kt +++ b/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/DefaultFrescoVitoProvider.kt @@ -29,6 +29,7 @@ import com.facebook.fresco.vito.options.ImageOptionsDrawableFactory import com.facebook.fresco.vito.provider.setup.FrescoVitoSetup import com.facebook.imagepipeline.core.ImagePipeline import com.facebook.imagepipeline.core.ImagePipelineFactory +import com.facebook.imagepipeline.drawable.DrawableFactory import java.util.concurrent.Executor class DefaultFrescoVitoProvider( @@ -41,6 +42,7 @@ class DefaultFrescoVitoProvider( vitoImagePerfListener: VitoImagePerfListener, debugOverlayFactory: DebugOverlayFactory2 = NoOpDebugOverlayFactory2(), imagePerfListenerSupplier: Supplier? = null, + externalImageOptionsDrawableFactories: List = emptyList() ) : FrescoVitoSetup { private val frescoController: FrescoController2 @@ -60,7 +62,7 @@ class DefaultFrescoVitoProvider( frescoController = FrescoController2Impl( frescoVitoConfig, - HierarcherImpl(createDefaultDrawableFactory()), + HierarcherImpl(createDefaultDrawableFactory(externalImageOptionsDrawableFactories)), lightweightBackgroundThreadExecutor, uiThreadExecutor, vitoImagePipeline, @@ -79,7 +81,9 @@ class DefaultFrescoVitoProvider( override fun getConfig(): FrescoVitoConfig = frescoVitoConfig companion object { - private fun createDefaultDrawableFactory(): ImageOptionsDrawableFactory { + private fun createDefaultDrawableFactory( + externalImageOptionsDrawableFactories: List + ): ImageOptionsDrawableFactory { val animatedDrawableFactory = ImagePipelineFactory.getInstance() .getAnimatedDrawableFactory(null) @@ -87,7 +91,8 @@ class DefaultFrescoVitoProvider( val bitmapFactory = BitmapDrawableFactory() val xmlFactory = ImagePipelineFactory.getInstance().xmlDrawableFactory?.let(DrawableFactoryWrapper::wrap) - val factories = listOfNotNull(bitmapFactory, animatedDrawableFactory, xmlFactory) + val factories = listOfNotNull(bitmapFactory, animatedDrawableFactory, xmlFactory) + + externalImageOptionsDrawableFactories.map(DrawableFactoryWrapper::wrap) return when (factories.size) { 1 -> factories[0] else -> ArrayVitoDrawableFactory(*factories.toTypedArray()) diff --git a/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/kotlin/KFrescoVitoProvider.kt b/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/kotlin/KFrescoVitoProvider.kt index 621c048a97..a74d45bdda 100644 --- a/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/kotlin/KFrescoVitoProvider.kt +++ b/vito/provider/src/main/java/com/facebook/fresco/vito/provider/impl/kotlin/KFrescoVitoProvider.kt @@ -24,6 +24,7 @@ import com.facebook.fresco.vito.provider.impl.NoOpCallerContextVerifier import com.facebook.fresco.vito.provider.setup.FrescoVitoSetup import com.facebook.imagepipeline.core.ImagePipeline import com.facebook.imagepipeline.core.ImagePipelineFactory +import com.facebook.imagepipeline.drawable.DrawableFactory import java.util.concurrent.Executor class KFrescoVitoProvider( @@ -33,7 +34,8 @@ class KFrescoVitoProvider( private val uiThreadExecutor: Executor, private val lightweightBackgroundExecutor: Executor, private val callerContextVerifier: CallerContextVerifier = NoOpCallerContextVerifier, - private val debugOverlayHandler: DebugOverlayHandler? = null + private val debugOverlayHandler: DebugOverlayHandler? = null, + private val externalImageOptionsDrawableFactories: List = emptyList() ) : FrescoVitoSetup { private val _imagePipeline: VitoImagePipeline by lazy { @@ -71,7 +73,8 @@ class KFrescoVitoProvider( ImagePipelineFactory.getInstance() .getXmlDrawableFactory() ?.let(DrawableFactoryWrapper::wrap) - val factories = listOfNotNull(animatedDrawableFactory, xmlFactory) + val factories = listOfNotNull(animatedDrawableFactory, xmlFactory) + + externalImageOptionsDrawableFactories.map(DrawableFactoryWrapper::wrap) return when (factories.size) { 0 -> null 1 -> factories[0]