@@ -30,31 +30,28 @@ namespace flutter {
3030
3131AndroidSurfaceFactoryImpl::AndroidSurfaceFactoryImpl (
3232 std::shared_ptr<AndroidContext> context,
33- std::shared_ptr<PlatformViewAndroidJNI> jni_facade) {
34- android_context_ = context;
35- jni_facade_ = jni_facade;
36- }
33+ std::shared_ptr<PlatformViewAndroidJNI> jni_facade,
34+ std::weak_ptr<AndroidExternalViewEmbedder> external_view_embedder)
35+ : android_context_(context), jni_facade_( jni_facade),
36+ external_view_embedder_ (external_view_embedder) { }
3737
3838AndroidSurfaceFactoryImpl::~AndroidSurfaceFactoryImpl () = default ;
3939
40- void AndroidSurfaceFactoryImpl::SetExternalViewEmbedder (
41- std::shared_ptr<AndroidExternalViewEmbedder> external_view_embedder) {
42- external_view_embedder_ = external_view_embedder;
43- }
44-
4540std::unique_ptr<AndroidSurface> AndroidSurfaceFactoryImpl::CreateSurface () {
46- FML_CHECK (external_view_embedder_);
41+ std::shared_ptr<AndroidExternalViewEmbedder> external_view_embedder =
42+ external_view_embedder_.lock ();
43+ FML_CHECK (external_view_embedder);
4744 switch (android_context_->RenderingApi ()) {
4845 case AndroidRenderingAPI::kSoftware :
4946 return std::make_unique<AndroidSurfaceSoftware>(
50- android_context_, jni_facade_, external_view_embedder_ );
47+ android_context_, jni_facade_, external_view_embedder );
5148 case AndroidRenderingAPI::kOpenGLES :
5249 return std::make_unique<AndroidSurfaceGL>(android_context_, jni_facade_,
53- external_view_embedder_ );
50+ external_view_embedder );
5451 case AndroidRenderingAPI::kVulkan :
5552#if SHELL_ENABLE_VULKAN
5653 return std::make_unique<AndroidSurfaceVulkan>(
57- android_context_, jni_facade_, external_view_embedder_ );
54+ android_context_, jni_facade_, external_view_embedder );
5855#endif // SHELL_ENABLE_VULKAN
5956 default :
6057 return nullptr ;
@@ -87,11 +84,12 @@ PlatformViewAndroid::PlatformViewAndroid(
8784 FML_CHECK (android_context && android_context->IsValid ())
8885 << " Could not create an Android context." ;
8986
87+ external_view_embedder_ =
88+ std::make_shared<AndroidExternalViewEmbedder>(android_context, jni_facade,
89+ surface_factory_);
9090 surface_factory_ =
91- std::make_shared<AndroidSurfaceFactoryImpl>(android_context, jni_facade);
92- surface_factory_->SetExternalViewEmbedder (
93- std::make_shared<AndroidExternalViewEmbedder>(android_context, jni_facade,
94- surface_factory_));
91+ std::make_shared<AndroidSurfaceFactoryImpl>(android_context, jni_facade,
92+ external_view_embedder_);
9593
9694 android_surface_ = surface_factory_->CreateSurface ();
9795 FML_CHECK (android_surface_ && android_surface_->IsValid ())
0 commit comments