blob: fc2deca721061408a26354d9653b182addd0ef76 [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.embedding.engine.plugins.activity;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.flutter.plugin.common.PluginRegistry;
/**
* Binding that gives {@link ActivityAware} plugins access to an associated {@link
* android.app.Activity} and the {@link android.app.Activity}'s lifecycle methods.
*
* <p>To obtain an instance of an {@code ActivityPluginBinding} in a Flutter plugin, implement the
* {@link ActivityAware} interface. A binding is provided in {@link
* ActivityAware#onAttachedToActivity(ActivityPluginBinding)} and {@link
* ActivityAware#onReattachedToActivityForConfigChanges(ActivityPluginBinding)}.
*/
public interface ActivityPluginBinding {
/**
* Returns the {@link android.app.Activity} that is currently attached to the {@link
* io.flutter.embedding.engine.FlutterEngine} that owns this {@code ActivityPluginBinding}.
*/
@NonNull
Activity getActivity();
/**
* Returns the {@code Lifecycle} associated with the attached {@code Activity}.
*
* <p>Use the flutter_plugin_android_lifecycle plugin to turn the returned {@code Object} into a
* {@code Lifecycle} object. See
* (https://github.com/flutter/plugins/tree/master/packages/flutter_plugin_android_lifecycle).
* Flutter plugins that rely on {@code Lifecycle} are forced to use the
* flutter_plugin_android_lifecycle plugin so that the version of the Android Lifecycle library is
* exposed to pub, which allows Flutter to manage different versions library over time.
*/
@NonNull
Object getLifecycle();
/**
* Adds a listener that is invoked whenever the associated {@link android.app.Activity}'s {@code
* onRequestPermissionsResult(...)} method is invoked.
*/
void addRequestPermissionsResultListener(
@NonNull PluginRegistry.RequestPermissionsResultListener listener);
/**
* Removes a listener that was added in {@link
* #addRequestPermissionsResultListener(PluginRegistry.RequestPermissionsResultListener)}.
*/
void removeRequestPermissionsResultListener(
@NonNull PluginRegistry.RequestPermissionsResultListener listener);
/**
* Adds a listener that is invoked whenever the associated {@link android.app.Activity}'s {@code
* onActivityResult(...)} method is invoked.
*/
void addActivityResultListener(@NonNull PluginRegistry.ActivityResultListener listener);
/**
* Removes a listener that was added in {@link
* #addActivityResultListener(PluginRegistry.ActivityResultListener)}.
*/
void removeActivityResultListener(@NonNull PluginRegistry.ActivityResultListener listener);
/**
* Adds a listener that is invoked whenever the associated {@link android.app.Activity}'s {@code
* onNewIntent(...)} method is invoked.
*/
void addOnNewIntentListener(@NonNull PluginRegistry.NewIntentListener listener);
/**
* Removes a listener that was added in {@link
* #addOnNewIntentListener(PluginRegistry.NewIntentListener)}.
*/
void removeOnNewIntentListener(@NonNull PluginRegistry.NewIntentListener listener);
/**
* Adds a listener that is invoked whenever the associated {@link android.app.Activity}'s {@code
* onUserLeaveHint()} method is invoked.
*/
void addOnUserLeaveHintListener(@NonNull PluginRegistry.UserLeaveHintListener listener);
/**
* Removes a listener that was added in {@link
* #addOnUserLeaveHintListener(PluginRegistry.UserLeaveHintListener)}.
*/
void removeOnUserLeaveHintListener(@NonNull PluginRegistry.UserLeaveHintListener listener);
/**
* Adds a listener that is invoked when the associated {@code Activity} or {@code Fragment} saves
* and restores instance state.
*/
void addOnSaveStateListener(@NonNull OnSaveInstanceStateListener listener);
/**
* Removes a listener that was added in {@link
* #addOnSaveStateListener(OnSaveInstanceStateListener)}.
*/
void removeOnSaveStateListener(@NonNull OnSaveInstanceStateListener listener);
interface OnSaveInstanceStateListener {
/**
* Invoked when the associated {@code Activity} or {@code Fragment} executes {@link
* Activity#onSaveInstanceState(Bundle)}.
*/
void onSaveInstanceState(@NonNull Bundle bundle);
/**
* Invoked when the associated {@code Activity} executes {@link
* android.app.Activity#onCreate(Bundle)} or associated {@code Fragment} executes {@code
* Fragment#onCreate(Bundle)}.
*/
void onRestoreInstanceState(@Nullable Bundle bundle);
}
}