Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit d95bb0e

Browse files
committed
createOverlaySurface JNI
1 parent dbb57f1 commit d95bb0e

File tree

12 files changed

+121
-0
lines changed

12 files changed

+121
-0
lines changed
1 Byte
Binary file not shown.

.gradle/6.5/gc.properties

Whitespace-only changes.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#Fri Jun 05 11:53:05 CDT 2020
2+
gradle.version=6.5

.gradle/vcs-1/gc.properties

Whitespace-only changes.

ci/licenses_golden/licenses_flutter

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ LIBRARY: txt
1111
ORIGIN: ../../../flutter/LICENSE
1212
TYPE: LicenseType.bsd
1313
FILE: ../../../flutter/.clang-tidy
14+
FILE: ../../../flutter/.gradle/6.5/fileChanges/last-build.bin
15+
FILE: ../../../flutter/.gradle/buildOutputCleanup/cache.properties
1416
FILE: ../../../flutter/DEPS
1517
FILE: ../../../flutter/assets/asset_manager.cc
1618
FILE: ../../../flutter/assets/asset_manager.h
@@ -702,6 +704,7 @@ FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/Flutte
702704
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterEngineCache.java
703705
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterEnginePluginRegistry.java
704706
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterJNI.java
707+
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterOverlaySurface.java
705708
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterShellArgs.java
706709
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/dart/DartExecutor.java
707710
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/dart/DartMessenger.java

shell/platform/android/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ android_java_sources = [
149149
"io/flutter/embedding/engine/FlutterEngineCache.java",
150150
"io/flutter/embedding/engine/FlutterEnginePluginRegistry.java",
151151
"io/flutter/embedding/engine/FlutterJNI.java",
152+
"io/flutter/embedding/engine/FlutterOverlaySurface.java",
152153
"io/flutter/embedding/engine/FlutterShellArgs.java",
153154
"io/flutter/embedding/engine/dart/DartExecutor.java",
154155
"io/flutter/embedding/engine/dart/DartMessenger.java",

shell/platform/android/io/flutter/embedding/engine/FlutterJNI.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.flutter.embedding.engine.renderer.FlutterUiDisplayListener;
2323
import io.flutter.embedding.engine.renderer.RenderSurface;
2424
import io.flutter.plugin.common.StandardMessageCodec;
25+
import io.flutter.plugin.platform.PlatformViewsController;
2526
import io.flutter.view.AccessibilityBridge;
2627
import io.flutter.view.FlutterCallbackInformation;
2728
import java.nio.ByteBuffer;
@@ -168,6 +169,7 @@ public static native void nativeOnVsync(
168169
@Nullable private Long nativePlatformViewId;
169170
@Nullable private AccessibilityDelegate accessibilityDelegate;
170171
@Nullable private PlatformMessageHandler platformMessageHandler;
172+
@Nullable private PlatformViewsController platformViewsController;
171173

172174
@NonNull
173175
private final Set<EngineLifecycleListener> engineLifecycleListeners = new CopyOnWriteArraySet<>();
@@ -415,6 +417,12 @@ private native void nativeDispatchPointerDataPacket(
415417
long nativePlatformViewId, @NonNull ByteBuffer buffer, int position);
416418
// ------ End Touch Interaction Support ---
417419

420+
@UiThread
421+
public void setPlatformViewsController(@NonNull PlatformViewsController platformViewsController) {
422+
ensureRunningOnMainThread();
423+
this.platformViewsController = platformViewsController;
424+
}
425+
418426
// ------ Start Accessibility Support -----
419427
/**
420428
* Sets the {@link AccessibilityDelegate} for the attached Flutter context.
@@ -780,6 +788,17 @@ private void onPreEngineRestart() {
780788
listener.onPreEngineRestart();
781789
}
782790
}
791+
792+
@SuppressWarnings("unused")
793+
@UiThread
794+
public FlutterOverlaySurface createOverlaySurface() {
795+
ensureRunningOnMainThread();
796+
if (platformViewsController == null) {
797+
throw new RuntimeException(
798+
"platformViewsController must be set before attempting to create an overlay surface");
799+
}
800+
return platformViewsController.createOverlaySurface();
801+
}
783802
// ----- End Engine Lifecycle Support ----
784803

785804
// TODO(mattcarroll): determine if this is nonull or nullable
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
package io.flutter.embedding.engine;
6+
7+
import android.view.Surface;
8+
9+
public class FlutterOverlaySurface {
10+
private final Surface surface;
11+
private final long id;
12+
13+
public FlutterOverlaySurface(long id, Surface surface) {
14+
this.id = id;
15+
this.surface = surface;
16+
}
17+
18+
public long getId() {
19+
return id;
20+
}
21+
22+
public Surface getSurface() {
23+
return surface;
24+
}
25+
}

shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import androidx.annotation.NonNull;
1818
import androidx.annotation.UiThread;
1919
import androidx.annotation.VisibleForTesting;
20+
import io.flutter.embedding.engine.FlutterOverlaySurface;
2021
import io.flutter.embedding.engine.dart.DartExecutor;
2122
import io.flutter.embedding.engine.systemchannels.PlatformViewsChannel;
2223
import io.flutter.plugin.editing.TextInputPlugin;
@@ -533,4 +534,9 @@ private void flushAllViews() {
533534
}
534535
vdControllers.clear();
535536
}
537+
538+
public FlutterOverlaySurface createOverlaySurface() {
539+
// TODO: Implement this method. https://github.com/flutter/flutter/issues/58288
540+
return null;
541+
}
536542
}

shell/platform/android/platform_view_android_jni.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,26 @@ void FlutterViewOnPreEngineRestart(JNIEnv* env, jobject obj) {
118118
FML_CHECK(CheckException(env));
119119
}
120120

121+
static jmethodID g_create_overlay_surface_method = nullptr;
122+
static jmethodID g_flutter_overlay_layer_get_id_method = nullptr;
123+
static jmethodID g_flutter_overlay_layer_get_surface_method = nullptr;
124+
125+
std::unique_ptr<AndroidFlutterOverlaySurface> FlutterViewCreateOverlaySurface(
126+
JNIEnv* env,
127+
jobject obj) {
128+
jobject joverlay_layer =
129+
env->CallObjectMethod(obj, g_create_overlay_surface_method);
130+
jlong layer_id = env->CallLongMethod(joverlay_layer,
131+
g_flutter_overlay_layer_get_id_method);
132+
jobject surface = env->CallObjectMethod(
133+
joverlay_layer, g_flutter_overlay_layer_get_surface_method);
134+
135+
FML_CHECK(CheckException(env));
136+
return std::make_unique<AndroidFlutterOverlaySurface>(
137+
layer_id, fml::MakeRefCounted<AndroidNativeWindow>(
138+
ANativeWindow_fromSurface(env, surface)));
139+
}
140+
121141
static jmethodID g_attach_to_gl_context_method = nullptr;
122142
void SurfaceTextureAttachToGLContext(JNIEnv* env, jobject obj, jint textureId) {
123143
env->CallVoidMethod(obj, g_attach_to_gl_context_method, textureId);
@@ -719,6 +739,10 @@ bool RegisterApi(JNIEnv* env) {
719739
return false;
720740
}
721741

742+
g_create_overlay_surface_method =
743+
env->GetMethodID(g_flutter_jni_class->obj(), "createOverlaySurface",
744+
"()Lio/flutter/embedding/engine/FlutterOverlaySurface;");
745+
722746
return true;
723747
}
724748

@@ -743,6 +767,10 @@ bool PlatformViewAndroid::Register(JNIEnv* env) {
743767
return false;
744768
}
745769

770+
g_create_overlay_surface_method =
771+
env->GetMethodID(g_flutter_jni_class->obj(), "createOverlaySurface",
772+
"()Lio/flutter/embedding/engine/FlutterOverlaySurface;");
773+
746774
g_flutter_jni_class = new fml::jni::ScopedJavaGlobalRef<jclass>(
747775
env, env->FindClass("io/flutter/embedding/engine/FlutterJNI"));
748776
if (g_flutter_jni_class->is_null()) {

0 commit comments

Comments
 (0)