From 5edd7666287cf47f2840cc63610e66a0359b8073 Mon Sep 17 00:00:00 2001 From: xster Date: Mon, 8 Jun 2020 12:08:04 -0700 Subject: [PATCH] Fix intent builder visibility (#18875) --- shell/platform/android/BUILD.gn | 1 + .../embedding/android/FlutterActivity.java | 8 ++--- .../android/FlutterFragmentActivity.java | 7 ++-- .../test/io/flutter/FlutterTestSuite.java | 2 ++ .../android/FlutterActivityTest.java | 12 +++++++ .../android/FlutterFragmentActivityTest.java | 34 +++++++++++++++++++ 6 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java diff --git a/shell/platform/android/BUILD.gn b/shell/platform/android/BUILD.gn index 77a9b63c4..0b8195863 100644 --- a/shell/platform/android/BUILD.gn +++ b/shell/platform/android/BUILD.gn @@ -428,6 +428,7 @@ action("robolectric_tests") { "test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java", "test/io/flutter/embedding/android/FlutterActivityTest.java", "test/io/flutter/embedding/android/FlutterAndroidComponentTest.java", + "test/io/flutter/embedding/android/FlutterFragmentActivityTest.java", "test/io/flutter/embedding/android/FlutterFragmentTest.java", "test/io/flutter/embedding/android/FlutterViewTest.java", "test/io/flutter/embedding/android/RobolectricFlutterActivity.java", diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java index 07089613f..2237f304f 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java @@ -241,7 +241,7 @@ public class FlutterActivity extends Activity * *

{@code return new NewEngineIntentBuilder(MyFlutterActivity.class); } */ - protected NewEngineIntentBuilder(@NonNull Class activityClass) { + public NewEngineIntentBuilder(@NonNull Class activityClass) { this.activityClass = activityClass; } @@ -314,12 +314,12 @@ public class FlutterActivity extends Activity * {@code FlutterActivity}. * *

Subclasses of {@code FlutterActivity} should provide their own static version of {@link - * #withNewEngine()}, which returns an instance of {@code CachedEngineIntentBuilder} constructed - * with a {@code Class} reference to the {@code FlutterActivity} subclass, e.g.: + * #withCachedEngine()}, which returns an instance of {@code CachedEngineIntentBuilder} + * constructed with a {@code Class} reference to the {@code FlutterActivity} subclass, e.g.: * *

{@code return new CachedEngineIntentBuilder(MyFlutterActivity.class, engineId); } */ - protected CachedEngineIntentBuilder( + public CachedEngineIntentBuilder( @NonNull Class activityClass, @NonNull String engineId) { this.activityClass = activityClass; this.cachedEngineId = engineId; diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java index 4215d4d2c..92d7586a3 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java @@ -101,8 +101,7 @@ public class FlutterFragmentActivity extends FragmentActivity * *

{@code return new NewEngineIntentBuilder(MyFlutterActivity.class); } */ - protected NewEngineIntentBuilder( - @NonNull Class activityClass) { + public NewEngineIntentBuilder(@NonNull Class activityClass) { this.activityClass = activityClass; } @@ -177,13 +176,13 @@ public class FlutterFragmentActivity extends FragmentActivity * {@code FlutterFragmentActivity}. * *

Subclasses of {@code FlutterFragmentActivity} should provide their own static version of - * {@link #withNewEngine()}, which returns an instance of {@code CachedEngineIntentBuilder} + * {@link #withCachedEngine()}, which returns an instance of {@code CachedEngineIntentBuilder} * constructed with a {@code Class} reference to the {@code FlutterFragmentActivity} subclass, * e.g.: * *

{@code return new CachedEngineIntentBuilder(MyFlutterActivity.class, engineId); } */ - protected CachedEngineIntentBuilder( + public CachedEngineIntentBuilder( @NonNull Class activityClass, @NonNull String engineId) { this.activityClass = activityClass; this.cachedEngineId = engineId; diff --git a/shell/platform/android/test/io/flutter/FlutterTestSuite.java b/shell/platform/android/test/io/flutter/FlutterTestSuite.java index 7d0d84ac1..7a101deb2 100644 --- a/shell/platform/android/test/io/flutter/FlutterTestSuite.java +++ b/shell/platform/android/test/io/flutter/FlutterTestSuite.java @@ -7,6 +7,7 @@ package io.flutter; import io.flutter.embedding.android.FlutterActivityAndFragmentDelegateTest; import io.flutter.embedding.android.FlutterActivityTest; import io.flutter.embedding.android.FlutterAndroidComponentTest; +import io.flutter.embedding.android.FlutterFragmentActivityTest; import io.flutter.embedding.android.FlutterFragmentTest; import io.flutter.embedding.android.FlutterViewTest; import io.flutter.embedding.engine.FlutterEngineCacheTest; @@ -42,6 +43,7 @@ import test.io.flutter.embedding.engine.dart.DartExecutorTest; FlutterEngineCacheTest.class, FlutterEnginePluginRegistryTest.class, FlutterEngineTest.class, + FlutterFragmentActivityTest.class, FlutterFragmentTest.class, FlutterJNITest.class, FlutterLaunchTests.class, diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java index f6e9c59c6..67e5984fa 100644 --- a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java +++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java @@ -175,4 +175,16 @@ public class FlutterActivityTest { context, mock(FlutterLoader.class), flutterJNI, new String[] {}, false); } } + + // This is just a compile time check to ensure that it's possible for FlutterActivity subclasses + // to provide their own intent builders which builds their own runtime types. + static class FlutterActivityWithIntentBuilders extends FlutterActivity { + public static NewEngineIntentBuilder withNewEngine() { + return new NewEngineIntentBuilder(FlutterActivityWithIntentBuilders.class); + } + + public static CachedEngineIntentBuilder withCachedEngine(@NonNull String cachedEngineId) { + return new CachedEngineIntentBuilder(FlutterActivityWithIntentBuilders.class, cachedEngineId); + } + } } diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java new file mode 100644 index 000000000..39384aca2 --- /dev/null +++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java @@ -0,0 +1,34 @@ +package io.flutter.embedding.android; + +import static org.junit.Assert.assertTrue; + +import androidx.annotation.NonNull; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +@Config(manifest = Config.NONE) +@RunWith(RobolectricTestRunner.class) +public class FlutterFragmentActivityTest { + @Test + public void placeholder() { + // This is just a placeholder since this file only has a compile check currently. + // Delete when adding the first real test. + assertTrue(true); + } + + // This is just a compile time check to ensure that it's possible for FlutterFragmentActivity + // subclasses + // to provide their own intent builders which builds their own runtime types. + static class FlutterFragmentActivityWithIntentBuilders extends FlutterFragmentActivity { + public static NewEngineIntentBuilder withNewEngine() { + return new NewEngineIntentBuilder(FlutterFragmentActivityWithIntentBuilders.class); + } + + public static CachedEngineIntentBuilder withCachedEngine(@NonNull String cachedEngineId) { + return new CachedEngineIntentBuilder( + FlutterFragmentActivityWithIntentBuilders.class, cachedEngineId); + } + } +} -- GitLab