diff --git a/android/sample/AndroidManifest.xml b/android/sample/AndroidManifest.xml index 8e6c56970..4a14ff96f 100644 --- a/android/sample/AndroidManifest.xml +++ b/android/sample/AndroidManifest.xml @@ -21,6 +21,8 @@ + diff --git a/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java b/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java new file mode 100644 index 000000000..d03641ba1 --- /dev/null +++ b/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestActivity.java @@ -0,0 +1,37 @@ +package com.facebook.flipper.connectivitytest; + +import android.os.Bundle; +import androidx.annotation.Nullable; +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 + * using this to drive a test run and exit the app afterwards. + */ +public class ConnectionTestActivity extends AppCompatActivity { + + @Override + 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. + final ExampleFlipperPlugin exampleFlipperPlugin = + client.getPluginByClass(ExampleFlipperPlugin.class); + client.removePlugin(exampleFlipperPlugin); + + final ConnectionTestPlugin connectionTestPlugin = new ConnectionTestPlugin(this); + client.addPlugin(connectionTestPlugin); + } + } +} diff --git a/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java b/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java new file mode 100644 index 000000000..274cec2df --- /dev/null +++ b/android/sample/src/main/java/com/facebook/flipper/connectivitytest/ConnectionTestPlugin.java @@ -0,0 +1,84 @@ +/* + * 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.app.Activity; +import android.widget.Toast; +import androidx.annotation.Nullable; +import com.facebook.flipper.core.FlipperConnection; +import com.facebook.flipper.core.FlipperObject; +import com.facebook.flipper.core.FlipperPlugin; +import com.facebook.flipper.core.FlipperReceiver; +import com.facebook.flipper.core.FlipperResponder; +import com.facebook.flipper.sample.ExampleActions; + +public class ConnectionTestPlugin implements FlipperPlugin { + + // We are reusing the existing "Example" logic here. That's generally a pretty bad idea, + // but in war and in testing everything is fair. + private static final String ID = "Example"; + + private final Activity mActivity; + + @Nullable private FlipperConnection mConnection; + + public ConnectionTestPlugin(Activity activity) { + mActivity = activity; + } + + @Override + public String getId() { + return ID; + } + + @Override + public void onConnect(FlipperConnection connection) { + mConnection = connection; + connection.receive( + "displayMessage", + new FlipperReceiver() { + @Override + public void onReceive(final FlipperObject params, FlipperResponder responder) { + if (mActivity != null) { + mActivity.runOnUiThread( + new Runnable() { + @Override + public void run() { + Toast.makeText(mActivity, params.getString("message"), Toast.LENGTH_SHORT) + .show(); + } + }); + } + + responder.success(new FlipperObject.Builder().put("greeting", "Hello").build()); + } + }); + + mActivity.runOnUiThread( + new Runnable() { + @Override + public void run() { + ExampleActions.sendGetRequest(); + ExampleActions.sendPostRequest(); + // 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); + } + }); + } + + @Override + public void onDisconnect() { + mConnection = null; + } + + @Override + public boolean runInBackground() { + return true; + } +} diff --git a/android/sample/src/main/java/com/facebook/flipper/sample/ExampleActions.java b/android/sample/src/main/java/com/facebook/flipper/sample/ExampleActions.java index 166693ee3..f74adcc5f 100644 --- a/android/sample/src/main/java/com/facebook/flipper/sample/ExampleActions.java +++ b/android/sample/src/main/java/com/facebook/flipper/sample/ExampleActions.java @@ -12,9 +12,9 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -final class ExampleActions { +public final class ExampleActions { - static void sendPostRequest() { + public static void sendPostRequest() { final RequestBody formBody = new FormBody.Builder().add("app", "Flipper").add("remarks", "Its awesome").build(); @@ -45,7 +45,7 @@ final class ExampleActions { }); } - static void sendGetRequest() { + public static void sendGetRequest() { final Request request = new Request.Builder().url("https://api.github.com/repos/facebook/yoga").get().build(); FlipperSampleApplication.sOkHttpClient @@ -69,7 +69,7 @@ final class ExampleActions { }); } - static void sendNotification() { + public static void sendNotification() { final FlipperClient client = AndroidFlipperClient.getInstanceIfInitialized(); if (client != null) { final ExampleFlipperPlugin plugin = client.getPluginByClass(ExampleFlipperPlugin.class); diff --git a/android/sample/src/main/java/com/facebook/flipper/sample/MainActivity.java b/android/sample/src/main/java/com/facebook/flipper/sample/MainActivity.java index 910dcecba..1ac6a43f1 100644 --- a/android/sample/src/main/java/com/facebook/flipper/sample/MainActivity.java +++ b/android/sample/src/main/java/com/facebook/flipper/sample/MainActivity.java @@ -28,12 +28,5 @@ public class MainActivity extends AppCompatActivity { final ExampleFlipperPlugin samplePlugin = client.getPluginByClass(ExampleFlipperPlugin.class); samplePlugin.setActivity(this); } - - if (getIntent().getBooleanExtra("NON_INTERACTIVE_RUN", false)) { - ExampleActions.sendGetRequest(); - ExampleActions.sendPostRequest(); - ExampleActions.sendNotification(); - finish(); - } } }