mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Implement PlatformViewsController.createOverlaySurface (flutter/engine#19226)
This commit is contained in:
parent
b652c5d5e2
commit
5f53fb4fbf
@ -9,6 +9,9 @@ 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;
|
||||
@ -17,6 +20,7 @@ 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 +75,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 HashMap<Long, 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 +293,7 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega
|
||||
vdControllers = new HashMap<>();
|
||||
accessibilityEventsDelegate = new AccessibilityEventsDelegate();
|
||||
contextToPlatformView = new HashMap<>();
|
||||
overlayLayerViews = new HashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -552,7 +563,25 @@ public class PlatformViewsController implements PlatformViewsAccessibilityDelega
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user