Skip to content

Commit a685780

Browse files
Fix the initialization of AndroidSurfaceFactoryImpl (flutter#21977)
Fixes flutter#68446
1 parent 43b618e commit a685780

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

shell/platform/android/platform_view_android.cc

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,16 @@ namespace flutter {
3030

3131
AndroidSurfaceFactoryImpl::AndroidSurfaceFactoryImpl(
3232
std::shared_ptr<AndroidContext> context,
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) {}
33+
std::shared_ptr<PlatformViewAndroidJNI> jni_facade)
34+
: android_context_(context), jni_facade_(jni_facade) {}
3735

3836
AndroidSurfaceFactoryImpl::~AndroidSurfaceFactoryImpl() = default;
3937

38+
void AndroidSurfaceFactoryImpl::SetExternalViewEmbedder(
39+
std::shared_ptr<AndroidExternalViewEmbedder> external_view_embedder) {
40+
external_view_embedder_ = external_view_embedder;
41+
}
42+
4043
std::unique_ptr<AndroidSurface> AndroidSurfaceFactoryImpl::CreateSurface() {
4144
std::shared_ptr<AndroidExternalViewEmbedder> external_view_embedder =
4245
external_view_embedder_.lock();
@@ -84,12 +87,11 @@ PlatformViewAndroid::PlatformViewAndroid(
8487
FML_CHECK(android_context && android_context->IsValid())
8588
<< "Could not create an Android context.";
8689

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-
external_view_embedder_);
91+
std::make_shared<AndroidSurfaceFactoryImpl>(android_context, jni_facade);
92+
external_view_embedder_ = std::make_shared<AndroidExternalViewEmbedder>(
93+
android_context, jni_facade, surface_factory_);
94+
surface_factory_->SetExternalViewEmbedder(external_view_embedder_);
9395

9496
android_surface_ = surface_factory_->CreateSurface();
9597
FML_CHECK(android_surface_ && android_surface_->IsValid())

shell/platform/android/platform_view_android.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ namespace flutter {
2525
class AndroidSurfaceFactoryImpl : public AndroidSurfaceFactory {
2626
public:
2727
AndroidSurfaceFactoryImpl(std::shared_ptr<AndroidContext> context,
28-
std::shared_ptr<PlatformViewAndroidJNI> jni_facade,
29-
std::weak_ptr<AndroidExternalViewEmbedder> external_view_embedder);
28+
std::shared_ptr<PlatformViewAndroidJNI> jni_facade);
3029

3130
~AndroidSurfaceFactoryImpl() override;
3231

3332
std::unique_ptr<AndroidSurface> CreateSurface() override;
3433

34+
void SetExternalViewEmbedder(
35+
std::shared_ptr<AndroidExternalViewEmbedder> external_view_embedder);
36+
3537
private:
3638
std::shared_ptr<AndroidContext> android_context_;
3739
std::shared_ptr<PlatformViewAndroidJNI> jni_facade_;

0 commit comments

Comments
 (0)