From afaeefc27d74b894ab60b4d3a2cc8087a06b31f2 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 13 Jul 2021 23:59:18 -0700 Subject: [PATCH 1/2] Revert "Revert "Make FlutterFragment usable without requiring it to be attached to an Android Activity. (#27332)" (#27382)" This reverts commit 093c4ed1a3d7cc28d273124ddd8046c0ebcbec4b. --- .../FlutterActivityAndFragmentDelegate.java | 8 ++++---- ...FlutterActivityAndFragmentDelegateTest.java | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java index 18dd0cddb29fd..0f398ef0fe3fe 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java @@ -276,15 +276,15 @@ View onCreateView( if (host.getRenderMode() == RenderMode.surface) { FlutterSurfaceView flutterSurfaceView = new FlutterSurfaceView( - host.getActivity(), host.getTransparencyMode() == TransparencyMode.transparent); + host.getContext(), host.getTransparencyMode() == TransparencyMode.transparent); // Allow our host to customize FlutterSurfaceView, if desired. host.onFlutterSurfaceViewCreated(flutterSurfaceView); // Create the FlutterView that owns the FlutterSurfaceView. - flutterView = new FlutterView(host.getActivity(), flutterSurfaceView); + flutterView = new FlutterView(host.getContext(), flutterSurfaceView); } else { - FlutterTextureView flutterTextureView = new FlutterTextureView(host.getActivity()); + FlutterTextureView flutterTextureView = new FlutterTextureView(host.getContext()); flutterTextureView.setOpaque(host.getTransparencyMode() == TransparencyMode.opaque); @@ -292,7 +292,7 @@ View onCreateView( host.onFlutterTextureViewCreated(flutterTextureView); // Create the FlutterView that owns the FlutterTextureView. - flutterView = new FlutterView(host.getActivity(), flutterTextureView); + flutterView = new FlutterView(host.getContext(), flutterTextureView); } // Add listener to be notified when Flutter renders its first frame. diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java index ddad953b64b99..9b6f7877af63b 100644 --- a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java +++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java @@ -378,6 +378,9 @@ public void itDoesNotAttachFlutterToTheActivityIfNotDesired() { // Declare that the host does NOT want Flutter to attach to the surrounding Activity. when(mockHost.shouldAttachEngineToActivity()).thenReturn(false); + // getActivity() returns null if the activity is not attached + when(mockHost.getActivity()).thenReturn(null); + // Create the real object that we're testing. FlutterActivityAndFragmentDelegate delegate = new FlutterActivityAndFragmentDelegate(mockHost); @@ -385,14 +388,21 @@ public void itDoesNotAttachFlutterToTheActivityIfNotDesired() { // Flutter is attached to the surrounding Activity in onAttach. delegate.onAttach(RuntimeEnvironment.application); - // Verify that the ActivityControlSurface was NOT told to attach to an Activity. - verify(mockFlutterEngine.getActivityControlSurface(), never()) - .attachToActivity(any(Activity.class), any(Lifecycle.class)); + // Make sure all of the other lifecycle methods can run safely as well + // without a valid Activity + delegate.onCreateView(null, null, null); + delegate.onStart(); + delegate.onResume(); + delegate.onPause(); + delegate.onStop(); + delegate.onDestroyView(); // Flutter is detached from the surrounding Activity in onDetach. delegate.onDetach(); - // Verify that the ActivityControlSurface was NOT told to detach from the Activity. + // Verify that the ActivityControlSurface was NOT told to attach or detach to an Activity. + verify(mockFlutterEngine.getActivityControlSurface(), never()) + .attachToActivity(any(Activity.class), any(Lifecycle.class)); verify(mockFlutterEngine.getActivityControlSurface(), never()).detachFromActivity(); } From 9930408bea54899609454edf8d33ab39e38c82c3 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Wed, 14 Jul 2021 00:00:56 -0700 Subject: [PATCH 2/2] update test --- .../android/FlutterActivityAndFragmentDelegateTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java index 9b6f7877af63b..c00bd1e646386 100644 --- a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java +++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java @@ -390,7 +390,7 @@ public void itDoesNotAttachFlutterToTheActivityIfNotDesired() { // Make sure all of the other lifecycle methods can run safely as well // without a valid Activity - delegate.onCreateView(null, null, null); + delegate.onCreateView(null, null, null, 0); delegate.onStart(); delegate.onResume(); delegate.onPause();