diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 12d3b72cb894b..d4da90cfefd7c 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -612,6 +612,7 @@ FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugin FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugins/contentprovider/ContentProviderAware.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugins/contentprovider/ContentProviderControlSurface.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugins/contentprovider/ContentProviderPluginBinding.java +FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugins/lifecycle/HiddenLifecycleReference.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugins/service/ServiceAware.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugins/service/ServiceControlSurface.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/engine/plugins/service/ServicePluginBinding.java diff --git a/shell/platform/android/BUILD.gn b/shell/platform/android/BUILD.gn index c2f3d1f41e32f..1939249a7411a 100644 --- a/shell/platform/android/BUILD.gn +++ b/shell/platform/android/BUILD.gn @@ -164,6 +164,7 @@ android_java_sources = [ "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderAware.java", "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderControlSurface.java", "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderPluginBinding.java", + "io/flutter/embedding/engine/plugins/lifecycle/HiddenLifecycleReference.java", "io/flutter/embedding/engine/plugins/service/ServiceAware.java", "io/flutter/embedding/engine/plugins/service/ServiceControlSurface.java", "io/flutter/embedding/engine/plugins/service/ServicePluginBinding.java", diff --git a/shell/platform/android/io/flutter/embedding/engine/plugins/FlutterPlugin.java b/shell/platform/android/io/flutter/embedding/engine/plugins/FlutterPlugin.java index 3202d15dd45c8..356ec9be406b6 100644 --- a/shell/platform/android/io/flutter/embedding/engine/plugins/FlutterPlugin.java +++ b/shell/platform/android/io/flutter/embedding/engine/plugins/FlutterPlugin.java @@ -5,11 +5,11 @@ package io.flutter.embedding.engine.plugins; import android.arch.lifecycle.Lifecycle; -import android.arch.lifecycle.LifecycleOwner; import android.content.Context; import android.support.annotation.NonNull; import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.embedding.engine.plugins.lifecycle.HiddenLifecycleReference; /** * Interface to be implemented by all Flutter plugins. @@ -93,10 +93,10 @@ public interface FlutterPlugin { * concerned about which Android Component is currently holding the {@link FlutterEngine}. * TODO(mattcarroll): add info about ActivityAware and ServiceAware for plugins that care. */ - class FlutterPluginBinding implements LifecycleOwner { + class FlutterPluginBinding { private final Context applicationContext; private final FlutterEngine flutterEngine; - private final Lifecycle lifecycle; + private final HiddenLifecycleReference hiddenLifecycleReference; public FlutterPluginBinding( @NonNull Context applicationContext, @@ -105,7 +105,7 @@ public FlutterPluginBinding( ) { this.applicationContext = applicationContext; this.flutterEngine = flutterEngine; - this.lifecycle = lifecycle; + this.hiddenLifecycleReference = new HiddenLifecycleReference(lifecycle); } @NonNull @@ -118,10 +118,9 @@ public FlutterEngine getFlutterEngine() { return flutterEngine; } - @Override @NonNull - public Lifecycle getLifecycle() { - return lifecycle; + public Object getLifecycle() { + return hiddenLifecycleReference; } } } diff --git a/shell/platform/android/io/flutter/embedding/engine/plugins/lifecycle/HiddenLifecycleReference.java b/shell/platform/android/io/flutter/embedding/engine/plugins/lifecycle/HiddenLifecycleReference.java new file mode 100644 index 0000000000000..34b4cb90ceaaf --- /dev/null +++ b/shell/platform/android/io/flutter/embedding/engine/plugins/lifecycle/HiddenLifecycleReference.java @@ -0,0 +1,33 @@ +// 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.lifecycle; + +import android.arch.lifecycle.Lifecycle; +import android.support.annotation.Keep; +import android.support.annotation.NonNull; + +/** + * An {@code Object} that can be used to obtain a {@link Lifecycle} reference. + *

+ * DO NOT USE THIS CLASS IN AN APP OR A PLUGIN. + *

+ * This class is used by the flutter_android_lifecycle package to provide access to a + * {@link Lifecycle} in a way that makes it easier for Flutter and the Flutter plugin ecosystem to + * handle breaking changes in Lifecycle libraries. + */ +@Keep +public class HiddenLifecycleReference { + @NonNull + private final Lifecycle lifecycle; + + public HiddenLifecycleReference(@NonNull Lifecycle lifecycle) { + this.lifecycle = lifecycle; + } + + @NonNull + public Lifecycle getLifecycle() { + return lifecycle; + } +}