// 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.app; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import androidx.fragment.app.FragmentActivity; import io.flutter.app.FlutterActivityDelegate.ViewFactory; import io.flutter.plugin.common.PluginRegistry; import io.flutter.view.FlutterNativeView; import io.flutter.view.FlutterView; /** * Base class for activities that use Flutter who also require the use of the Android v4 Support * library's {@link FragmentActivity}. Applications that don't have this need will likely want to * use {@link FlutterActivity} instead. * *
Important! Flutter does not bundle the necessary Android v4 Support library * classes for this class to work at runtime. It is the responsibility of the app developer using * this class to ensure that they link against the v4 support library .jar file when creating their * app to ensure that {@link FragmentActivity} is available at runtime. * * @see https://developer.android.com/training/testing/set-up-project */ public class FlutterFragmentActivity extends FragmentActivity implements FlutterView.Provider, PluginRegistry, ViewFactory { private final FlutterActivityDelegate delegate = new FlutterActivityDelegate(this, this); // These aliases ensure that the methods we forward to the delegate adhere // to relevant interfaces versus just existing in FlutterActivityDelegate. private final FlutterActivityEvents eventDelegate = delegate; private final FlutterView.Provider viewProvider = delegate; private final PluginRegistry pluginRegistry = delegate; /** * Returns the Flutter view used by this activity; will be null before {@link #onCreate(Bundle)} * is called. */ @Override public FlutterView getFlutterView() { return viewProvider.getFlutterView(); } /** * Hook for subclasses to customize the creation of the {@code FlutterView}. * *
The default implementation returns {@code null}, which will cause the activity to use a
* newly instantiated full-screen view.
*/
@Override
public FlutterView createFlutterView(Context context) {
return null;
}
@Override
public FlutterNativeView createFlutterNativeView() {
return null;
}
@Override
public boolean retainFlutterNativeView() {
return false;
}
@Override
public final boolean hasPlugin(String key) {
return pluginRegistry.hasPlugin(key);
}
@Override
public final