未验证 提交 2b6c71c4 编写于 作者: J Jason Simmons 提交者: GitHub

Reland "Implement PlatformViewsController.createOverlaySurface" (#19245)

上级 10dfcc03
......@@ -9,14 +9,19 @@ import static android.view.MotionEvent.PointerProperties;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.PixelFormat;
import android.hardware.HardwareBuffer;
import android.media.ImageReader;
import android.os.Build;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.LongSparseArray;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
import androidx.annotation.VisibleForTesting;
import io.flutter.embedding.android.FlutterImageView;
import io.flutter.embedding.engine.FlutterOverlaySurface;
import io.flutter.embedding.engine.dart.DartExecutor;
import io.flutter.embedding.engine.systemchannels.PlatformViewsChannel;
......@@ -71,6 +76,12 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega
// it is associated with(e.g if a platform view creates other views in the same virtual display.
private final HashMap<Context, View> contextToPlatformView;
// Map of unique IDs to views that render overlay layers.
private final LongSparseArray<FlutterImageView> overlayLayerViews;
// Next available unique ID for use in overlayLayerViews;
private long nextOverlayLayerId = 0;
private final PlatformViewsChannel.PlatformViewsHandler channelHandler =
new PlatformViewsChannel.PlatformViewsHandler() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
......@@ -283,6 +294,7 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega
vdControllers = new HashMap<>();
accessibilityEventsDelegate = new AccessibilityEventsDelegate();
contextToPlatformView = new HashMap<>();
overlayLayerViews = new LongSparseArray<>();
}
/**
......@@ -551,8 +563,27 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega
// TODO: Implement this method. https://github.com/flutter/flutter/issues/58288
}
@TargetApi(19)
public FlutterOverlaySurface createOverlaySurface() {
// TODO: Implement this method. https://github.com/flutter/flutter/issues/58288
return null;
ImageReader imageReader;
if (android.os.Build.VERSION.SDK_INT >= 29) {
imageReader =
ImageReader.newInstance(
flutterView.getWidth(),
flutterView.getHeight(),
PixelFormat.RGBA_8888,
2,
HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE | HardwareBuffer.USAGE_GPU_COLOR_OUTPUT);
} else {
imageReader =
ImageReader.newInstance(
flutterView.getWidth(), flutterView.getHeight(), PixelFormat.RGBA_8888, 2);
}
FlutterImageView imageView = new FlutterImageView(flutterView.getContext(), imageReader);
long id = nextOverlayLayerId++;
overlayLayerViews.put(id, imageView);
return new FlutterOverlaySurface(id, imageReader.getSurface());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册