Android: Enable apps to provide a custom configuration to Fresco

Summary:
The `FrescoModule` supports providing a custom image pipeline configuration. This module is created by `MainReactPackage` but `MainReactPackage` doesn't expose any way to customize the Fresco configuration. This change adds a parameter to `MainReactPackage`'s constructor so that the `FrescoModule`'s configuration can be customized by the app. A couple of design choices were made in this change:
  - `MainReactPackage`'s new constructor parameter is a `MainPackageConfig`. Introducing `MainPackageConfig` enables `MainReactPackage` to nicely support new optional configuration options in the future. Imagine the alternative of each optional configuration being a separate parameter to the `MainReactPackage` constructor.
  - `FrescoModule` exposes its default configuration as a builder object through the `getDefaultConfigBuilder` method. This enables app's to start with `FrescoModule`'s default configuration and then modify it.

**Test plan (required)**

Verified that passing a custom config based on React Nati
Closes https://github.com/facebook/react-native/pull/10906

Differential Revision: D4237054

Pulled By: mkonicek

fbshipit-source-id: 8a62a6f0e77ca5f6d35238950094686756262196
This commit is contained in:
Adam Comella
2016-11-28 03:39:39 -08:00
committed by Facebook Github Bot
parent fde4fb1485
commit 8b199a7fd0
4 changed files with 67 additions and 3 deletions
@@ -74,6 +74,18 @@ import com.facebook.react.views.webview.ReactWebViewManager;
*/
public class MainReactPackage extends LazyReactPackage {
private MainPackageConfig mConfig;
public MainReactPackage() {
}
/**
* Create a new package with configuration
*/
public MainReactPackage(MainPackageConfig config) {
mConfig = config;
}
@Override
public List<ModuleSpec> getNativeModules(final ReactApplicationContext context) {
return Arrays.asList(
@@ -116,7 +128,7 @@ public class MainReactPackage extends LazyReactPackage {
new ModuleSpec(FrescoModule.class, new Provider<NativeModule>() {
@Override
public NativeModule get() {
return new FrescoModule(context);
return new FrescoModule(context, mConfig != null ? mConfig.getFrescoConfig() : null);
}
}),
new ModuleSpec(I18nManagerModule.class, new Provider<NativeModule>() {