Skip to content

Commit

Permalink
Reland "Implement PlatformViewsController.createOverlaySurface" (flut…
Browse files Browse the repository at this point in the history
  • Loading branch information
jason-simmons authored Jun 23, 2020
1 parent 10dfcc0 commit 2b6c71c
Showing 1 changed file with 33 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,19 @@

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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -283,6 +294,7 @@ public PlatformViewsController() {
vdControllers = new HashMap<>();
accessibilityEventsDelegate = new AccessibilityEventsDelegate();
contextToPlatformView = new HashMap<>();
overlayLayerViews = new LongSparseArray<>();
}

/**
Expand Down Expand Up @@ -551,8 +563,27 @@ public void onEndFrame() {
// 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());
}
}

0 comments on commit 2b6c71c

Please sign in to comment.