|  | 
| 21 | 21 | import android.content.Intent; | 
| 22 | 22 | import android.content.pm.ActivityInfo; | 
| 23 | 23 | import android.content.pm.PackageManager; | 
|  | 24 | +import android.os.Build; | 
| 24 | 25 | import android.os.Bundle; | 
| 25 | 26 | import androidx.annotation.NonNull; | 
| 26 | 27 | import androidx.annotation.Nullable; | 
| @@ -438,6 +439,32 @@ public void itWithMetadataWithoutSplashScreenResourceKeyDoesNotProvideSplashScre | 
| 438 | 439 |     assertNull(splashScreen); | 
| 439 | 440 |   } | 
| 440 | 441 | 
 | 
|  | 442 | +  @Test | 
|  | 443 | +  public void fullyDrawn() { | 
|  | 444 | +    Intent intent = | 
|  | 445 | +        FlutterActivityWithReportFullyDrawn.createDefaultIntent(RuntimeEnvironment.application); | 
|  | 446 | +    ActivityController<FlutterActivityWithReportFullyDrawn> activityController = | 
|  | 447 | +        Robolectric.buildActivity(FlutterActivityWithReportFullyDrawn.class, intent); | 
|  | 448 | +    FlutterActivityWithReportFullyDrawn flutterActivity = activityController.get(); | 
|  | 449 | + | 
|  | 450 | +    // See https://github.com/flutter/flutter/issues/46172, and | 
|  | 451 | +    // https://github.com/flutter/flutter/issues/88767. | 
|  | 452 | +    for (int version = Build.VERSION_CODES.JELLY_BEAN; version < Build.VERSION_CODES.Q; version++) { | 
|  | 453 | +      TestUtils.setApiVersion(version); | 
|  | 454 | +      flutterActivity.onFlutterUiDisplayed(); | 
|  | 455 | +      assertFalse( | 
|  | 456 | +          "reportFullyDrawn isn't used in API level " + version, flutterActivity.isFullyDrawn()); | 
|  | 457 | +    } | 
|  | 458 | + | 
|  | 459 | +    for (int version = Build.VERSION_CODES.Q; version < Build.VERSION_CODES.S; version++) { | 
|  | 460 | +      TestUtils.setApiVersion(version); | 
|  | 461 | +      flutterActivity.onFlutterUiDisplayed(); | 
|  | 462 | +      assertTrue( | 
|  | 463 | +          "reportFullyDrawn is used in API level " + version, flutterActivity.isFullyDrawn()); | 
|  | 464 | +      flutterActivity.resetFullyDrawn(); | 
|  | 465 | +    } | 
|  | 466 | +  } | 
|  | 467 | + | 
| 441 | 468 |   static class FlutterActivityWithProvidedEngine extends FlutterActivity { | 
| 442 | 469 |     @Override | 
| 443 | 470 |     @SuppressLint("MissingSuperCall") | 
| @@ -478,6 +505,23 @@ public RenderMode getRenderMode() { | 
| 478 | 505 |     } | 
| 479 | 506 |   } | 
| 480 | 507 | 
 | 
|  | 508 | +  private static class FlutterActivityWithReportFullyDrawn extends FlutterActivity { | 
|  | 509 | +    private boolean fullyDrawn = false; | 
|  | 510 | + | 
|  | 511 | +    @Override | 
|  | 512 | +    public void reportFullyDrawn() { | 
|  | 513 | +      fullyDrawn = true; | 
|  | 514 | +    } | 
|  | 515 | + | 
|  | 516 | +    public boolean isFullyDrawn() { | 
|  | 517 | +      return fullyDrawn; | 
|  | 518 | +    } | 
|  | 519 | + | 
|  | 520 | +    public void resetFullyDrawn() { | 
|  | 521 | +      fullyDrawn = false; | 
|  | 522 | +    } | 
|  | 523 | +  } | 
|  | 524 | + | 
| 481 | 525 |   private static final class FakeFlutterPlugin | 
| 482 | 526 |       implements FlutterPlugin, | 
| 483 | 527 |           ActivityAware, | 
|  | 
0 commit comments