blob: fc22e8440fd1d73b16859d0c3999c1dbf574d038 [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.annotation.SuppressLint;
import android.view.View;
import androidx.annotation.NonNull;
/** A handle to an Android view to be embedded in the Flutter hierarchy. */
public interface PlatformView {
/** Returns the Android view to be embedded in the Flutter hierarchy. */
View getView();
/**
* Called by the {@link FlutterEngine} that owns this {@code PlatformView} when the Android {@link
* View} responsible for rendering a Flutter UI is associated with the {@link FlutterEngine}.
*
* <p>This means that our associated {@link FlutterEngine} can now render a UI and interact with
* the user.
*
* <p>Some platform views may have unusual dependencies on the {@link View} that renders Flutter
* UIs, such as unique keyboard interactions. That {@link View} is provided here for those
* purposes. Use of this {@link View} should be avoided if it is not absolutely necessary, because
* depending on this {@link View} will tend to make platform view code more brittle to future
* changes.
*/
// Default interface methods are supported on all min SDK versions of Android.
@SuppressLint("NewApi")
default void onFlutterViewAttached(@NonNull View flutterView) {}
/**
* Called by the {@link FlutterEngine} that owns this {@code PlatformView} when the Android {@link
* View} responsible for rendering a Flutter UI is detached and disassociated from the {@link
* FlutterEngine}.
*
* <p>This means that our associated {@link FlutterEngine} no longer has a rendering surface, or a
* user interaction surface of any kind.
*
* <p>This platform view must release any references related to the Android {@link View} that was
* provided in {@link #onFlutterViewAttached(View)}.
*/
// Default interface methods are supported on all min SDK versions of Android.
@SuppressLint("NewApi")
default void onFlutterViewDetached() {}
/**
* Dispose this platform view.
*
* <p>The {@link PlatformView} object is unusable after this method is called.
*
* <p>Plugins implementing {@link PlatformView} must clear all references to the View object and
* the PlatformView after this method is called. Failing to do so will result in a memory leak.
*
* <p>References related to the Android {@link View} attached in {@link
* #onFlutterViewAttached(View)} must be released in {@code dispose()} to avoid memory leaks.
*/
void dispose();
/**
* Callback fired when the platform's input connection is locked, or should be used. See also
* {@link TextInputPlugin#lockPlatformViewInputConnection}.
*
* <p>This hook only exists for rare cases where the plugin relies on the state of the input
* connection. This probably doesn't need to be implemented.
*/
// Default interface methods are supported on all min SDK versions of Android.
@SuppressLint("NewApi")
default void onInputConnectionLocked() {};
/**
* Callback fired when the platform input connection has been unlocked. See also {@link
* TextInputPlugin#lockPlatformViewInputConnection}.
*
* <p>This hook only exists for rare cases where the plugin relies on the state of the input
* connection. This probably doesn't need to be implemented.
*/
// Default interface methods are supported on all min SDK versions of Android.
@SuppressLint("NewApi")
default void onInputConnectionUnlocked() {};
}