diff --git a/android/no-op/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticActivity.java b/android/no-op/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticActivity.java new file mode 100644 index 000000000..f7c4b4516 --- /dev/null +++ b/android/no-op/src/main/java/com/facebook/flipper/android/diagnostics/FlipperDiagnosticActivity.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ +package com.facebook.flipper.android.diagnostics; + +import android.app.Activity; + +public class FlipperDiagnosticActivity extends Activity {} diff --git a/android/sample/build.gradle b/android/sample/build.gradle index 2912416cd..e37b1fc4b 100644 --- a/android/sample/build.gradle +++ b/android/sample/build.gradle @@ -64,5 +64,6 @@ dependencies { testImplementation deps.hamcrest testImplementation deps.junit - implementation project(':android') + debugImplementation project(':android') + releaseImplementation project(':noop') } diff --git a/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java b/android/sample/src/debug/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java similarity index 81% rename from android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java rename to android/sample/src/debug/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java index d03641ba1..16bdf1646 100644 --- a/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java +++ b/android/sample/src/debug/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ package com.facebook.flipper.connectivitytest; import android.os.Bundle; @@ -6,9 +13,6 @@ import androidx.appcompat.app.AppCompatActivity; import com.facebook.flipper.android.AndroidFlipperClient; import com.facebook.flipper.core.FlipperClient; import com.facebook.flipper.plugins.example.ExampleFlipperPlugin; -import com.facebook.flipper.sample.RootComponent; -import com.facebook.litho.ComponentContext; -import com.facebook.litho.LithoView; /** * Oh hai! This is probably not the kinda sample you want to copy to your application; we're just @@ -20,9 +24,6 @@ public class ConnectionTestActivity extends AppCompatActivity { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final ComponentContext c = new ComponentContext(this); - setContentView(LithoView.create(c, RootComponent.create(c).build())); - final FlipperClient client = AndroidFlipperClient.getInstanceIfInitialized(); if (client != null) { // As we're re-using the identifier, get rid of the default plugin first. diff --git a/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java b/android/sample/src/debug/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java similarity index 89% rename from android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java rename to android/sample/src/debug/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java index 274cec2df..6e9a9baca 100644 --- a/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java +++ b/android/sample/src/debug/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java @@ -16,6 +16,7 @@ import com.facebook.flipper.core.FlipperPlugin; import com.facebook.flipper.core.FlipperReceiver; import com.facebook.flipper.core.FlipperResponder; import com.facebook.flipper.sample.ExampleActions; +import com.facebook.flipper.sample.network.NetworkClient; public class ConnectionTestPlugin implements FlipperPlugin { @@ -63,8 +64,9 @@ public class ConnectionTestPlugin implements FlipperPlugin { new Runnable() { @Override public void run() { - ExampleActions.sendGetRequest(); - ExampleActions.sendPostRequest(); + final NetworkClient networkClient = NetworkClient.getInstance(); + ExampleActions.sendGetRequest(networkClient.getOkHttpClient()); + ExampleActions.sendPostRequest(networkClient.getOkHttpClient()); // We want Flipper to properly disconnect at this point and actually shut down the app. mActivity.finish(); android.os.Process.sendSignal(android.os.Process.myPid(), 15); diff --git a/android/sample/src/main/java/com/facebook/flipper/plugins/example/ExampleFlipperPlugin.java b/android/sample/src/debug/java/com/facebook/flipper/plugins/example/ExampleFlipperPlugin.java similarity index 100% rename from android/sample/src/main/java/com/facebook/flipper/plugins/example/ExampleFlipperPlugin.java rename to android/sample/src/debug/java/com/facebook/flipper/plugins/example/ExampleFlipperPlugin.java diff --git a/android/sample/src/main/java/com/facebook/flipper/sample/ExampleActions.java b/android/sample/src/debug/java/com/facebook/flipper/sample/ExampleActions.java similarity index 82% rename from android/sample/src/main/java/com/facebook/flipper/sample/ExampleActions.java rename to android/sample/src/debug/java/com/facebook/flipper/sample/ExampleActions.java index 78732e579..04439c147 100644 --- a/android/sample/src/main/java/com/facebook/flipper/sample/ExampleActions.java +++ b/android/sample/src/debug/java/com/facebook/flipper/sample/ExampleActions.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ package com.facebook.flipper.sample; import android.util.Log; @@ -8,13 +15,14 @@ import java.io.IOException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public final class ExampleActions { - public static void sendPostRequest() { + public static void sendPostRequest(OkHttpClient client) { final RequestBody formBody = new FormBody.Builder().add("app", "Flipper").add("remarks", "Its awesome").build(); @@ -24,7 +32,7 @@ public final class ExampleActions { .post(formBody) .build(); - FlipperSampleApplication.sOkHttpClient + client .newCall(request) .enqueue( new Callback() { @@ -45,9 +53,10 @@ public final class ExampleActions { }); } - public static void sendGetRequest() { - final Request request = new Request.Builder().url("https://api.github.com/repos/facebook/yoga").get().build(); - FlipperSampleApplication.sOkHttpClient + public static void sendGetRequest(OkHttpClient client) { + final Request request = + new Request.Builder().url("https://api.github.com/repos/facebook/yoga").get().build(); + client .newCall(request) .enqueue( new Callback() { diff --git a/android/sample/src/debug/java/com/facebook/flipper/sample/FlipperInitializer.java b/android/sample/src/debug/java/com/facebook/flipper/sample/FlipperInitializer.java new file mode 100644 index 000000000..685517191 --- /dev/null +++ b/android/sample/src/debug/java/com/facebook/flipper/sample/FlipperInitializer.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ +package com.facebook.flipper.sample; + +import android.content.Context; +import com.facebook.flipper.core.FlipperClient; +import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; +import com.facebook.flipper.plugins.example.ExampleFlipperPlugin; +import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; +import com.facebook.flipper.plugins.inspector.DescriptorMapping; +import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; +import com.facebook.flipper.plugins.leakcanary.LeakCanaryFlipperPlugin; +import com.facebook.flipper.plugins.litho.LithoFlipperDescriptors; +import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; +import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; +import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; +import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin.SharedPreferencesDescriptor; +import com.facebook.litho.config.ComponentsConfiguration; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import okhttp3.OkHttpClient; + +public final class FlipperInitializer { + public interface IntializationResult { + OkHttpClient getOkHttpClient(); + } + + public static IntializationResult initFlipperPlugins(Context context, FlipperClient client) { + final DescriptorMapping descriptorMapping = DescriptorMapping.withDefaults(); + + final NetworkFlipperPlugin networkPlugin = new NetworkFlipperPlugin(); + final FlipperOkhttpInterceptor interceptor = new FlipperOkhttpInterceptor(networkPlugin); + + // Normally, you would want to make this dependent on a BuildConfig flag, but + // for this demo application we can safely assume that you always want to debug. + ComponentsConfiguration.isDebugModeEnabled = true; + LithoFlipperDescriptors.add(descriptorMapping); + client.addPlugin(new InspectorFlipperPlugin(context, descriptorMapping)); + client.addPlugin(networkPlugin); + client.addPlugin( + new SharedPreferencesFlipperPlugin( + context, + Arrays.asList( + new SharedPreferencesDescriptor("sample", Context.MODE_PRIVATE), + new SharedPreferencesDescriptor("other_sample", Context.MODE_PRIVATE)))); + client.addPlugin(new LeakCanaryFlipperPlugin()); + client.addPlugin(new FrescoFlipperPlugin()); + client.addPlugin(new ExampleFlipperPlugin()); + client.addPlugin(CrashReporterPlugin.getInstance()); + client.start(); + + final OkHttpClient okHttpClient = + new OkHttpClient.Builder() + .addNetworkInterceptor(interceptor) + .connectTimeout(60, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.MINUTES) + .build(); + + return new IntializationResult() { + @Override + public OkHttpClient getOkHttpClient() { + return okHttpClient; + } + }; + } +} diff --git a/android/sample/src/main/java/com/facebook/flipper/sample/FlipperSampleApplication.java b/android/sample/src/main/java/com/facebook/flipper/sample/FlipperSampleApplication.java index 158a6d81d..55ce1fff1 100644 --- a/android/sample/src/main/java/com/facebook/flipper/sample/FlipperSampleApplication.java +++ b/android/sample/src/main/java/com/facebook/flipper/sample/FlipperSampleApplication.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) Facebook, Inc. and its affiliates. * *
This source code is licensed under the MIT license found in the LICENSE file in the root @@ -8,31 +8,13 @@ package com.facebook.flipper.sample; import android.app.Application; import android.content.Context; -import androidx.annotation.Nullable; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.flipper.android.AndroidFlipperClient; import com.facebook.flipper.core.FlipperClient; -import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; -import com.facebook.flipper.plugins.example.ExampleFlipperPlugin; -import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; -import com.facebook.flipper.plugins.inspector.DescriptorMapping; -import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; -import com.facebook.flipper.plugins.leakcanary.LeakCanaryFlipperPlugin; -import com.facebook.flipper.plugins.litho.LithoFlipperDescriptors; -import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; -import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; -import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; -import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin.SharedPreferencesDescriptor; -import com.facebook.litho.config.ComponentsConfiguration; +import com.facebook.flipper.sample.network.NetworkClient; import com.facebook.soloader.SoLoader; -import java.util.Arrays; -import java.util.concurrent.TimeUnit; -import okhttp3.OkHttpClient; public class FlipperSampleApplication extends Application { - - @Nullable public static OkHttpClient sOkHttpClient = null; - @Override public void onCreate() { super.onCreate(); @@ -40,36 +22,11 @@ public class FlipperSampleApplication extends Application { Fresco.initialize(this); final FlipperClient client = AndroidFlipperClient.getInstance(this); - final DescriptorMapping descriptorMapping = DescriptorMapping.withDefaults(); - final NetworkFlipperPlugin networkPlugin = new NetworkFlipperPlugin(); - final FlipperOkhttpInterceptor interceptor = new FlipperOkhttpInterceptor(networkPlugin); + final FlipperInitializer.IntializationResult initializationResult = + FlipperInitializer.initFlipperPlugins(this, client); - sOkHttpClient = - new OkHttpClient.Builder() - .addNetworkInterceptor(interceptor) - .connectTimeout(60, TimeUnit.SECONDS) - .readTimeout(60, TimeUnit.SECONDS) - .writeTimeout(10, TimeUnit.MINUTES) - .build(); - - // Normally, you would want to make this dependent on a BuildConfig flag, but - // for this demo application we can safely assume that you always want to debug. - ComponentsConfiguration.isDebugModeEnabled = true; - LithoFlipperDescriptors.add(descriptorMapping); - client.addPlugin(new InspectorFlipperPlugin(this, descriptorMapping)); - client.addPlugin(networkPlugin); - client.addPlugin( - new SharedPreferencesFlipperPlugin( - this, - Arrays.asList( - new SharedPreferencesDescriptor("sample", Context.MODE_PRIVATE), - new SharedPreferencesDescriptor("other_sample", Context.MODE_PRIVATE)))); - client.addPlugin(new LeakCanaryFlipperPlugin()); - client.addPlugin(new FrescoFlipperPlugin()); - client.addPlugin(new ExampleFlipperPlugin()); - client.addPlugin(CrashReporterPlugin.getInstance()); - client.start(); + NetworkClient.getInstance().setOkHttpClient(initializationResult.getOkHttpClient()); getSharedPreferences("sample", Context.MODE_PRIVATE).edit().putString("Hello", "world").apply(); getSharedPreferences("other_sample", Context.MODE_PRIVATE) diff --git a/android/sample/src/main/java/com/facebook/flipper/sample/RootComponentSpec.java b/android/sample/src/main/java/com/facebook/flipper/sample/RootComponentSpec.java index f4ae22d00..3f77c1f83 100644 --- a/android/sample/src/main/java/com/facebook/flipper/sample/RootComponentSpec.java +++ b/android/sample/src/main/java/com/facebook/flipper/sample/RootComponentSpec.java @@ -11,6 +11,7 @@ import android.content.Intent; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.flipper.android.diagnostics.FlipperDiagnosticActivity; +import com.facebook.flipper.sample.network.NetworkClient; import com.facebook.litho.ClickEvent; import com.facebook.litho.Column; import com.facebook.litho.Component; @@ -23,6 +24,7 @@ import com.facebook.litho.annotations.OnUpdateState; import com.facebook.litho.annotations.State; import com.facebook.litho.fresco.FrescoImage; import com.facebook.litho.widget.Text; + @LayoutSpec public class RootComponentSpec { @@ -67,12 +69,12 @@ public class RootComponentSpec { @OnEvent(ClickEvent.class) static void hitGetRequest(final ComponentContext c) { - ExampleActions.sendGetRequest(); + ExampleActions.sendGetRequest(NetworkClient.getInstance().getOkHttpClient()); } @OnEvent(ClickEvent.class) static void hitPostRequest(final ComponentContext c) { - ExampleActions.sendPostRequest(); + ExampleActions.sendPostRequest(NetworkClient.getInstance().getOkHttpClient()); } @OnEvent(ClickEvent.class) @@ -82,7 +84,7 @@ public class RootComponentSpec { @OnEvent(ClickEvent.class) static void openDiagnostics(final ComponentContext c) { - Intent intent = new Intent(c.getAndroidContext(), FlipperDiagnosticActivity.class); + final Intent intent = new Intent(c.getAndroidContext(), FlipperDiagnosticActivity.class); c.getAndroidContext().startActivity(intent); } diff --git a/android/sample/src/main/java/com/facebook/flipper/sample/network/NetworkClient.java b/android/sample/src/main/java/com/facebook/flipper/sample/network/NetworkClient.java new file mode 100644 index 000000000..ac81fe2bf --- /dev/null +++ b/android/sample/src/main/java/com/facebook/flipper/sample/network/NetworkClient.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ +package com.facebook.flipper.sample.network; + +import okhttp3.OkHttpClient; + +public class NetworkClient { + private OkHttpClient mOkHttpClient; + + private NetworkClient() {} + + private static class Singleton { + private static final NetworkClient INSTANCE = new NetworkClient(); + } + + public static NetworkClient getInstance() { + return Singleton.INSTANCE; + } + + public OkHttpClient getOkHttpClient() { + return mOkHttpClient; + } + + public void setOkHttpClient(OkHttpClient okHttpClient) { + mOkHttpClient = okHttpClient; + } +} diff --git a/android/sample/src/release/java/com/facebook/flipper/plugins/example/ExampleFlipperPlugin.java b/android/sample/src/release/java/com/facebook/flipper/plugins/example/ExampleFlipperPlugin.java new file mode 100644 index 000000000..e244ffaf2 --- /dev/null +++ b/android/sample/src/release/java/com/facebook/flipper/plugins/example/ExampleFlipperPlugin.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ +package com.facebook.flipper.plugins.example; + +import android.app.Activity; +import com.facebook.flipper.core.FlipperPlugin; + +// No-Op implementation to satisfy the interface. +public class ExampleFlipperPlugin implements FlipperPlugin { + public void setActivity(Activity a) { + // no-op + } +} diff --git a/android/sample/src/release/java/com/facebook/flipper/sample/ExampleActions.java b/android/sample/src/release/java/com/facebook/flipper/sample/ExampleActions.java new file mode 100644 index 000000000..e2629bf39 --- /dev/null +++ b/android/sample/src/release/java/com/facebook/flipper/sample/ExampleActions.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ +package com.facebook.flipper.sample; + +import okhttp3.OkHttpClient; + +public final class ExampleActions { + + public static void sendPostRequest(OkHttpClient client) {} + + public static void sendGetRequest(OkHttpClient client) {} + + public static void sendNotification() {} +} diff --git a/android/sample/src/release/java/com/facebook/flipper/sample/FlipperInitializer.java b/android/sample/src/release/java/com/facebook/flipper/sample/FlipperInitializer.java new file mode 100644 index 000000000..734776116 --- /dev/null +++ b/android/sample/src/release/java/com/facebook/flipper/sample/FlipperInitializer.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2018-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + * + */ +package com.facebook.flipper.sample; + +import android.content.Context; +import com.facebook.flipper.core.FlipperClient; +import java.util.concurrent.TimeUnit; +import okhttp3.OkHttpClient; + +public final class FlipperInitializer { + public interface IntializationResult { + OkHttpClient getOkHttpClient(); + } + + public static IntializationResult initFlipperPlugins(Context context, FlipperClient client) { + final OkHttpClient okHttpClient = + new OkHttpClient.Builder() + .connectTimeout(60, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.MINUTES) + .build(); + + return new IntializationResult() { + @Override + public OkHttpClient getOkHttpClient() { + return okHttpClient; + } + }; + } +}