blob: 228f081e843bb685e6380ae062d6b8b0a1d6f937 [file] [log] [blame]
// 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.plugin.platform;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.embedding.android.FlutterImageView;
/** A host view for Flutter content displayed over a platform view. */
public class PlatformOverlayView extends FlutterImageView {
@Nullable private AccessibilityEventsDelegate accessibilityDelegate;
public PlatformOverlayView(
@NonNull Context context,
int width,
int height,
@NonNull AccessibilityEventsDelegate accessibilityDelegate) {
super(context, width, height, FlutterImageView.SurfaceKind.overlay);
this.accessibilityDelegate = accessibilityDelegate;
}
public PlatformOverlayView(@NonNull Context context) {
this(context, 1, 1, null);
}
public PlatformOverlayView(@NonNull Context context, @NonNull AttributeSet attrs) {
this(context, 1, 1, null);
}
@Override
public boolean onHoverEvent(@NonNull MotionEvent event) {
// This view doesn't have any accessibility information of its own, but anything drawn in
// this view is visible above the platform view it is overlaying, so should respond to
// accessibility exploration events. Forward those events to the accessibility delegate in
// a special mode that will stop as soon as it reaches a platform view, so that it will not
// find widgets that behind the platform view. If no such widget is found, treat the event
// as unhandled so that it can fall through to the platform view.
if (accessibilityDelegate != null
&& accessibilityDelegate.onAccessibilityHoverEvent(event, true)) {
return true;
}
return super.onHoverEvent(event);
}
}