mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
createOverlaySurface JNI method (flutter/engine#19076)
* createOverlaySurface JNI * update imports * remove unused method * license * deleted unused file * remove wrong function call * removed duplicate createOverlaySurface
This commit is contained in:
parent
f3470a0450
commit
ef2b08d5b6
@ -702,6 +702,7 @@ FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/Flutte
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterEngineCache.java
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterEnginePluginRegistry.java
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterJNI.java
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterOverlaySurface.java
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/FlutterShellArgs.java
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/dart/DartExecutor.java
|
||||
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/dart/DartMessenger.java
|
||||
|
||||
@ -150,6 +150,7 @@ android_java_sources = [
|
||||
"io/flutter/embedding/engine/FlutterEngineCache.java",
|
||||
"io/flutter/embedding/engine/FlutterEnginePluginRegistry.java",
|
||||
"io/flutter/embedding/engine/FlutterJNI.java",
|
||||
"io/flutter/embedding/engine/FlutterOverlaySurface.java",
|
||||
"io/flutter/embedding/engine/FlutterShellArgs.java",
|
||||
"io/flutter/embedding/engine/dart/DartExecutor.java",
|
||||
"io/flutter/embedding/engine/dart/DartMessenger.java",
|
||||
|
||||
@ -827,6 +827,17 @@ public class FlutterJNI {
|
||||
}
|
||||
platformViewsController.onEndFrame();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@UiThread
|
||||
public FlutterOverlaySurface createOverlaySurface() {
|
||||
ensureRunningOnMainThread();
|
||||
if (platformViewsController == null) {
|
||||
throw new RuntimeException(
|
||||
"platformViewsController must be set before attempting to position an overlay surface");
|
||||
}
|
||||
return platformViewsController.createOverlaySurface();
|
||||
}
|
||||
// ----- End Engine Lifecycle Support ----
|
||||
|
||||
// ----- Start Localization Support ----
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
// Copyright 2013 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
package io.flutter.embedding.engine;
|
||||
|
||||
import android.view.Surface;
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class FlutterOverlaySurface {
|
||||
@NonNull private final Surface surface;
|
||||
|
||||
private final long id;
|
||||
|
||||
@Keep
|
||||
public FlutterOverlaySurface(long id, @NonNull Surface surface) {
|
||||
this.id = id;
|
||||
this.surface = surface;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Surface getSurface() {
|
||||
return surface;
|
||||
}
|
||||
}
|
||||
@ -17,6 +17,7 @@ import android.view.View;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.UiThread;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import io.flutter.embedding.engine.FlutterOverlaySurface;
|
||||
import io.flutter.embedding.engine.dart.DartExecutor;
|
||||
import io.flutter.embedding.engine.systemchannels.PlatformViewsChannel;
|
||||
import io.flutter.plugin.editing.TextInputPlugin;
|
||||
@ -549,4 +550,9 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega
|
||||
public void onEndFrame() {
|
||||
// TODO: Implement this method. https://github.com/flutter/flutter/issues/58288
|
||||
}
|
||||
|
||||
public FlutterOverlaySurface createOverlaySurface() {
|
||||
// TODO: Implement this method. https://github.com/flutter/flutter/issues/58288
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,6 +130,7 @@ class PlatformViewAndroidJNI {
|
||||
int y,
|
||||
int width,
|
||||
int height) = 0;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/// @brief Initiates a frame if using hybrid composition.
|
||||
///
|
||||
@ -146,6 +147,13 @@ class PlatformViewAndroidJNI {
|
||||
///
|
||||
virtual void FlutterViewEndFrame() = 0;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/// @brief Instantiates an overlay surface in hybrid composition.
|
||||
///
|
||||
/// @note Must be called from the platform thread.
|
||||
///
|
||||
virtual void FlutterViewCreateOverlaySurface() = 0;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
/// @brief Computes the locale Android would select.
|
||||
///
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
#include "flutter/shell/platform/android/android_shell_holder.h"
|
||||
#include "flutter/shell/platform/android/apk_asset_provider.h"
|
||||
#include "flutter/shell/platform/android/flutter_main.h"
|
||||
#include "flutter/shell/platform/android/jni/platform_view_android_jni.h"
|
||||
#include "flutter/shell/platform/android/platform_view_android.h"
|
||||
|
||||
#define ANDROID_SHELL_HOLDER \
|
||||
@ -80,6 +81,8 @@ static jmethodID g_on_first_frame_method = nullptr;
|
||||
|
||||
static jmethodID g_on_engine_restart_method = nullptr;
|
||||
|
||||
static jmethodID g_create_overlay_surface_method = nullptr;
|
||||
|
||||
static jmethodID g_on_begin_frame_method = nullptr;
|
||||
|
||||
static jmethodID g_on_end_frame_method = nullptr;
|
||||
@ -686,6 +689,15 @@ bool RegisterApi(JNIEnv* env) {
|
||||
return false;
|
||||
}
|
||||
|
||||
g_create_overlay_surface_method =
|
||||
env->GetMethodID(g_flutter_jni_class->obj(), "createOverlaySurface",
|
||||
"()Lio/flutter/embedding/engine/FlutterOverlaySurface;");
|
||||
|
||||
if (g_create_overlay_surface_method == nullptr) {
|
||||
FML_LOG(ERROR) << "Could not locate createOverlaySurface method";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1092,6 +1104,19 @@ void PlatformViewAndroidJNIImpl::FlutterViewEndFrame() {
|
||||
FML_CHECK(CheckException(env));
|
||||
}
|
||||
|
||||
void PlatformViewAndroidJNIImpl::FlutterViewCreateOverlaySurface() {
|
||||
JNIEnv* env = fml::jni::AttachCurrentThread();
|
||||
|
||||
auto java_object = java_object_.get(env);
|
||||
if (java_object.is_null()) {
|
||||
return;
|
||||
}
|
||||
|
||||
env->CallVoidMethod(java_object.obj(), g_create_overlay_surface_method);
|
||||
|
||||
FML_CHECK(CheckException(env));
|
||||
}
|
||||
|
||||
std::unique_ptr<std::vector<std::string>>
|
||||
PlatformViewAndroidJNIImpl::FlutterViewComputePlatformResolvedLocale(
|
||||
std::vector<std::string> supported_locales_data) {
|
||||
|
||||
@ -66,6 +66,8 @@ class PlatformViewAndroidJNIImpl final : public PlatformViewAndroidJNI {
|
||||
|
||||
void FlutterViewEndFrame() override;
|
||||
|
||||
void FlutterViewCreateOverlaySurface() override;
|
||||
|
||||
std::unique_ptr<std::vector<std::string>>
|
||||
FlutterViewComputePlatformResolvedLocale(
|
||||
std::vector<std::string> supported_locales_data) override;
|
||||
|
||||
@ -201,4 +201,18 @@ public class FlutterJNITest {
|
||||
// --- Verify Results ---
|
||||
verify(platformViewsController, times(1)).onEndFrame();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createOverlaySurface__callsPlatformViewsController() {
|
||||
PlatformViewsController platformViewsController = mock(PlatformViewsController.class);
|
||||
|
||||
FlutterJNI flutterJNI = new FlutterJNI();
|
||||
flutterJNI.setPlatformViewsController(platformViewsController);
|
||||
|
||||
// --- Execute Test ---
|
||||
flutterJNI.createOverlaySurface();
|
||||
|
||||
// --- Verify Results ---
|
||||
verify(platformViewsController, times(1)).createOverlaySurface();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user