@@ -415,6 +415,7 @@ public void onEndFrame__destroysOverlaySurfaceAfterFrameOnFlutterSurfaceView() {
415415
416416 // Produce a frame that doesn't display platform views.
417417 platformViewsController .onBeginFrame ();
418+ disposePlatformView (jni , platformViewsController , platformViewId );
418419 platformViewsController .onEndFrame ();
419420
420421 verify (overlayImageView , never ()).detachFromRenderer ();
@@ -485,17 +486,80 @@ public void onEndFrame__removesPlatformViewParent() {
485486
486487 // Simulate create call from the framework.
487488 createPlatformView (jni , platformViewsController , platformViewId , "testType" );
488- platformViewsController . initializePlatformViewIfNeeded ( platformViewId );
489- assertEquals (flutterView .getChildCount (), 2 );
489+ assertEquals ( flutterView . getChildCount (), 1 );
490+ assertEquals (flutterView .getChildAt ( 0 ). getClass (). getSimpleName (), "FlutterSurfaceView" );
490491
491492 // Simulate first frame from the framework.
492493 jni .onFirstFrame ();
493494 platformViewsController .onBeginFrame ();
495+ platformViewsController .onDisplayPlatformView (
496+ platformViewId , 0 , 0 , 100 , 100 , 200 , 200 , new FlutterMutatorsStack ());
497+ assertEquals (flutterView .getChildCount (), 3 );
498+ assertEquals (flutterView .getChildAt (0 ).getClass ().getSimpleName (), "FlutterSurfaceView" );
499+ assertTrue (flutterView .getChildAt (1 ).getClass ().getSimpleName ().startsWith ("FlutterImageView" ));
500+
494501 platformViewsController .onEndFrame ();
502+ assertEquals (flutterView .getChildCount (), 3 );
503+ assertEquals (flutterView .getChildAt (0 ).getClass ().getSimpleName (), "FlutterSurfaceView" );
504+ assertTrue (flutterView .getChildAt (1 ).getClass ().getSimpleName ().startsWith ("FlutterImageView" ));
495505
496506 // Simulate dispose call from the framework.
497507 disposePlatformView (jni , platformViewsController , platformViewId );
508+ assertEquals (flutterView .getChildCount (), 2 );
509+ assertEquals (flutterView .getChildAt (0 ).getClass ().getSimpleName (), "FlutterSurfaceView" );
510+ assertTrue (flutterView .getChildAt (1 ).getClass ().getSimpleName ().startsWith ("FlutterImageView" ));
511+ }
512+
513+ @ Test
514+ @ Config (shadows = {ShadowFlutterSurfaceView .class , ShadowFlutterJNI .class })
515+ public void onEndFrame__revertsFlutterSurface () {
516+ final PlatformViewsController platformViewsController = new PlatformViewsController ();
517+
518+ final int platformViewId = 0 ;
519+ assertNull (platformViewsController .getPlatformViewById (platformViewId ));
520+
521+ final PlatformViewFactory viewFactory = mock (PlatformViewFactory .class );
522+ final PlatformView platformView = mock (PlatformView .class );
523+ final View androidView = mock (View .class );
524+ when (platformView .getView ()).thenReturn (androidView );
525+ when (viewFactory .create (any (), eq (platformViewId ), any ())).thenReturn (platformView );
526+
527+ platformViewsController .getRegistry ().registerViewFactory ("testType" , viewFactory );
528+
529+ final FlutterJNI jni = new FlutterJNI ();
530+ jni .attachToNative (false );
531+
532+ final FlutterView flutterView = attach (jni , platformViewsController );
533+
534+ jni .onFirstFrame ();
535+
536+ // Simulate create call from the framework.
537+ createPlatformView (jni , platformViewsController , platformViewId , "testType" );
498538 assertEquals (flutterView .getChildCount (), 1 );
539+ assertEquals (flutterView .getChildAt (0 ).getClass ().getSimpleName (), "FlutterSurfaceView" );
540+
541+ // Simulate first frame from the framework.
542+ jni .onFirstFrame ();
543+ platformViewsController .onBeginFrame ();
544+ platformViewsController .onDisplayPlatformView (
545+ platformViewId , 0 , 0 , 100 , 100 , 200 , 200 , new FlutterMutatorsStack ());
546+ assertTrue (
547+ flutterView .getRenderSurface ().getClass ().getSimpleName ().contains ("FlutterImageView" ));
548+
549+ platformViewsController .onEndFrame ();
550+ assertTrue (
551+ flutterView .getRenderSurface ().getClass ().getSimpleName ().contains ("FlutterImageView" ));
552+
553+ platformViewsController .onBeginFrame ();
554+ platformViewsController .onEndFrame ();
555+ assertTrue (
556+ flutterView .getRenderSurface ().getClass ().getSimpleName ().contains ("FlutterImageView" ));
557+
558+ platformViewsController .onBeginFrame ();
559+ // Dispose the platform view is sufficient to flip the Flutter surface.
560+ disposePlatformView (jni , platformViewsController , platformViewId );
561+ platformViewsController .onEndFrame ();
562+ assertEquals (flutterView .getRenderSurface ().getClass ().getSimpleName (), "FlutterSurfaceView" );
499563 }
500564
501565 @ Test
@@ -556,8 +620,6 @@ private static FlutterView attach(
556620 new FlutterView (context , FlutterView .RenderMode .surface ) {
557621 @ Override
558622 public FlutterImageView createImageView () {
559- final FlutterImageView view = mock (FlutterImageView .class );
560- when (view .acquireLatestImage ()).thenReturn (true );
561623 return mock (FlutterImageView .class );
562624 }
563625 };
0 commit comments