diff --git a/android/plugins/network/src/main/java/com/facebook/flipper/plugins/network/NetworkFlipperPlugin.java b/android/plugins/network/src/main/java/com/facebook/flipper/plugins/network/NetworkFlipperPlugin.java index 4c9a1bf2d18..19a245404d8 100644 --- a/android/plugins/network/src/main/java/com/facebook/flipper/plugins/network/NetworkFlipperPlugin.java +++ b/android/plugins/network/src/main/java/com/facebook/flipper/plugins/network/NetworkFlipperPlugin.java @@ -8,18 +8,23 @@ package com.facebook.flipper.plugins.network; import android.util.Base64; + import com.facebook.flipper.core.ErrorReportingRunnable; import com.facebook.flipper.core.FlipperArray; import com.facebook.flipper.core.FlipperObject; import com.facebook.flipper.plugins.common.BufferingFlipperPlugin; + import java.util.Arrays; import java.util.List; + import javax.annotation.Nullable; public class NetworkFlipperPlugin extends BufferingFlipperPlugin implements NetworkReporter { public static final String ID = "Network"; private static final int MAX_BODY_SIZE_IN_BYTES = 1024 * 1024; + private List mFormatters; + private final List mRequestFormatters; public NetworkFlipperPlugin() { this(null); @@ -27,6 +32,12 @@ public NetworkFlipperPlugin() { public NetworkFlipperPlugin(List formatters) { this.mFormatters = formatters; + this.mRequestFormatters = null; + } + + public NetworkFlipperPlugin(List formatters, List requestFormatters) { + this.mFormatters = formatters; + this.mRequestFormatters = requestFormatters; } @Override @@ -40,7 +51,7 @@ public void setFormatters(List formatters) { @Override public void reportRequest(final RequestInfo requestInfo) { - (new ErrorReportingRunnable(getConnection()) { + final Runnable job = new ErrorReportingRunnable(getConnection()) { @Override protected void runOrThrow() throws Exception { final FlipperObject request = @@ -55,8 +66,26 @@ protected void runOrThrow() throws Exception { send("newRequest", request); } - }) - .run(); + }; + + if (mRequestFormatters != null) { + for (NetworkRequestFormatter formatter : mRequestFormatters) { + if (formatter.shouldFormat(requestInfo)) { + formatter.format( + requestInfo, + new NetworkRequestFormatter.OnCompletionListener() { + @Override + public void onCompletion(final String json) { + requestInfo.body = json.getBytes(); + job.run(); + } + }); + return; + } + } + } + + job.run(); } @Override diff --git a/android/plugins/network/src/main/java/com/facebook/flipper/plugins/network/NetworkRequestFormatter.java b/android/plugins/network/src/main/java/com/facebook/flipper/plugins/network/NetworkRequestFormatter.java new file mode 100644 index 00000000000..8239e339599 --- /dev/null +++ b/android/plugins/network/src/main/java/com/facebook/flipper/plugins/network/NetworkRequestFormatter.java @@ -0,0 +1,11 @@ +package com.facebook.flipper.plugins.network; + +public interface NetworkRequestFormatter { + interface OnCompletionListener { + void onCompletion(String json); + } + + boolean shouldFormat(NetworkReporter.RequestInfo request); + + void format(NetworkReporter.RequestInfo request, OnCompletionListener onCompletionListener); +}