Continues removing the assumption that there is a foreground activity (#309)
diff --git a/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java b/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java index 5a83e52..b6d3e79 100644 --- a/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java +++ b/packages/battery/android/src/main/java/io/flutter/plugins/battery/BatteryPlugin.java
@@ -30,16 +30,16 @@ new MethodChannel(registrar.messenger(), "plugins.flutter.io/battery"); final EventChannel eventChannel = new EventChannel(registrar.messenger(), "plugins.flutter.io/charging"); - final BatteryPlugin instance = new BatteryPlugin(registrar.context()); + final BatteryPlugin instance = new BatteryPlugin(registrar); eventChannel.setStreamHandler(instance); methodChannel.setMethodCallHandler(instance); } - BatteryPlugin(Context context) { - this.context = context; + BatteryPlugin(PluginRegistry.Registrar registrar) { + this.registrar = registrar; } - private final Context context; + private final PluginRegistry.Registrar registrar; private BroadcastReceiver chargingStateChangeReceiver; @Override @@ -60,18 +60,21 @@ @Override public void onListen(Object arguments, EventSink events) { chargingStateChangeReceiver = createChargingStateChangeReceiver(events); - context.registerReceiver( - chargingStateChangeReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + registrar + .context() + .registerReceiver( + chargingStateChangeReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } @Override public void onCancel(Object arguments) { - context.unregisterReceiver(chargingStateChangeReceiver); + registrar.context().unregisterReceiver(chargingStateChangeReceiver); chargingStateChangeReceiver = null; } private int getBatteryLevel() { int batteryLevel = -1; + Context context = registrar.context(); if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { BatteryManager batteryManager = (BatteryManager) context.getSystemService(context.BATTERY_SERVICE);
diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index f4b3663..dbfbddf 100644 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java
@@ -21,7 +21,7 @@ /** ConnectivityPlugin */ public class ConnectivityPlugin implements MethodCallHandler, StreamHandler { - private final Context context; + private final Registrar registrar; private final ConnectivityManager manager; private BroadcastReceiver receiver; @@ -31,25 +31,28 @@ new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); final EventChannel eventChannel = new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); - ConnectivityPlugin instance = new ConnectivityPlugin(registrar.context()); + ConnectivityPlugin instance = new ConnectivityPlugin(registrar); channel.setMethodCallHandler(instance); eventChannel.setStreamHandler(instance); } - private ConnectivityPlugin(Context context) { - this.context = context; - this.manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + private ConnectivityPlugin(Registrar registrar) { + this.registrar = registrar; + this.manager = + (ConnectivityManager) registrar.context().getSystemService(Context.CONNECTIVITY_SERVICE); } @Override public void onListen(Object arguments, EventSink events) { receiver = createReceiver(events); - context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + registrar + .context() + .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); } @Override public void onCancel(Object arguments) { - context.unregisterReceiver(receiver); + registrar.context().unregisterReceiver(receiver); receiver = null; }
diff --git a/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java b/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java index 18816c3..6d787c3 100644 --- a/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java +++ b/packages/firebase_admob/android/src/main/java/io/flutter/plugins/firebaseadmob/FirebaseAdMobPlugin.java
@@ -19,7 +19,7 @@ public class FirebaseAdMobPlugin implements MethodCallHandler { private static final String TAG = "flutter"; - private final Activity activity; + private final Registrar registrar; private final MethodChannel channel; private LinearLayout banner; @@ -28,13 +28,13 @@ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_admob"); - channel.setMethodCallHandler(new FirebaseAdMobPlugin(registrar.activity(), channel)); + channel.setMethodCallHandler(new FirebaseAdMobPlugin(registrar, channel)); } - private FirebaseAdMobPlugin(Activity activity, MethodChannel channel) { - this.activity = activity; + private FirebaseAdMobPlugin(Registrar registrar, MethodChannel channel) { + this.registrar = registrar; this.channel = channel; - FirebaseApp.initializeApp(activity); + FirebaseApp.initializeApp(registrar.context()); } private void callInitialize(MethodCall call, Result result) { @@ -43,7 +43,7 @@ result.error("no_app_id", "a non-empty AdMob appId was not provided", null); return; } - MobileAds.initialize(activity, appId); + MobileAds.initialize(registrar.context(), appId); result.success(Boolean.TRUE); } @@ -93,6 +93,12 @@ return; } + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "firebase_admob plugin requires a foreground activity", null); + return; + } + Integer id = call.argument("id"); if (id == null) { result.error(
diff --git a/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java b/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java index 7123ab4..ea146e3 100755 --- a/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java +++ b/packages/firebase_analytics/android/src/main/java/io/flutter/firebaseanalytics/FirebaseAnalyticsPlugin.java
@@ -17,18 +17,18 @@ /** Flutter plugin for Firebase Analytics. */ public class FirebaseAnalyticsPlugin implements MethodCallHandler { - private final Activity activity; + private final PluginRegistry.Registrar registrar; private final FirebaseAnalytics firebaseAnalytics; public static void registerWith(PluginRegistry.Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "firebase_analytics"); - channel.setMethodCallHandler(new FirebaseAnalyticsPlugin(registrar.activity())); + channel.setMethodCallHandler(new FirebaseAnalyticsPlugin(registrar)); } - private FirebaseAnalyticsPlugin(Activity activity) { - this.activity = activity; - FirebaseApp.initializeApp(activity); - this.firebaseAnalytics = FirebaseAnalytics.getInstance(activity); + private FirebaseAnalyticsPlugin(PluginRegistry.Registrar registrar) { + this.registrar = registrar; + FirebaseApp.initializeApp(registrar.context()); + this.firebaseAnalytics = FirebaseAnalytics.getInstance(registrar.context()); } @Override @@ -81,6 +81,11 @@ private void handleSetCurrentScreen(MethodCall call, Result result) { @SuppressWarnings("unchecked") + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "handleSetCurrentScreen requires a foreground activity", null); + return; + } Map<String, Object> arguments = (Map<String, Object>) call.arguments; final String screenName = (String) arguments.get("screenName"); final String screenClassOverride = (String) arguments.get("screenClassOverride");
diff --git a/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java b/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java index f86e868..9b073d9 100755 --- a/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java +++ b/packages/firebase_auth/android/src/main/java/io/flutter/firebaseauth/FirebaseAuthPlugin.java
@@ -4,7 +4,6 @@ package io.flutter.firebaseauth; -import android.app.Activity; import android.support.annotation.NonNull; import android.util.SparseArray; import com.google.android.gms.tasks.OnCompleteListener; @@ -30,7 +29,7 @@ /** Flutter plugin for Firebase Auth. */ public class FirebaseAuthPlugin implements MethodCallHandler { - private final Activity activity; + private final PluginRegistry.Registrar registrar; private final FirebaseAuth firebaseAuth; private final SparseArray<FirebaseAuth.AuthStateListener> authStateListeners = new SparseArray<>(); @@ -44,13 +43,13 @@ public static void registerWith(PluginRegistry.Registrar registrar) { MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_auth"); - channel.setMethodCallHandler(new FirebaseAuthPlugin(registrar.activity(), channel)); + channel.setMethodCallHandler(new FirebaseAuthPlugin(registrar, channel)); } - private FirebaseAuthPlugin(Activity activity, MethodChannel channel) { - this.activity = activity; + private FirebaseAuthPlugin(PluginRegistry.Registrar registrar, MethodChannel channel) { + this.registrar = registrar; this.channel = channel; - FirebaseApp.initializeApp(activity); + FirebaseApp.initializeApp(registrar.context()); this.firebaseAuth = FirebaseAuth.getInstance(); } @@ -112,7 +111,7 @@ firebaseAuth .getCurrentUser() .linkWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleCurrentUser(MethodCall call, final Result result) { @@ -131,9 +130,7 @@ } private void handleSignInAnonymously(MethodCall call, final Result result) { - firebaseAuth - .signInAnonymously() - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + firebaseAuth.signInAnonymously().addOnCompleteListener(new SignInCompleteListener(result)); } private void handleCreateUserWithEmailAndPassword(MethodCall call, final Result result) { @@ -144,7 +141,7 @@ firebaseAuth .createUserWithEmailAndPassword(email, password) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithEmailAndPassword(MethodCall call, final Result result) { @@ -155,7 +152,7 @@ firebaseAuth .signInWithEmailAndPassword(email, password) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithGoogle(MethodCall call, final Result result) { @@ -166,7 +163,7 @@ AuthCredential credential = GoogleAuthProvider.getCredential(idToken, accessToken); firebaseAuth .signInWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleLinkWithGoogleCredential(MethodCall call, final Result result) { @@ -178,7 +175,7 @@ firebaseAuth .getCurrentUser() .linkWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithFacebook(MethodCall call, final Result result) { @@ -188,7 +185,7 @@ AuthCredential credential = FacebookAuthProvider.getCredential(accessToken); firebaseAuth .signInWithCredential(credential) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignInWithCustomToken(MethodCall call, final Result result) { @@ -196,7 +193,7 @@ String token = arguments.get("token"); firebaseAuth .signInWithCustomToken(token) - .addOnCompleteListener(activity, new SignInCompleteListener(result)); + .addOnCompleteListener(new SignInCompleteListener(result)); } private void handleSignOut(MethodCall call, final Result result) {
diff --git a/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java b/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java index 3a8fc8e..374b2db 100644 --- a/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java +++ b/packages/firebase_messaging/android/src/main/java/io/flutter/plugins/firebasemessaging/FirebaseMessagingPlugin.java
@@ -4,7 +4,6 @@ package io.flutter.plugins.firebasemessaging; -import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -26,28 +25,27 @@ /** FirebaseMessagingPlugin */ public class FirebaseMessagingPlugin extends BroadcastReceiver implements MethodCallHandler, NewIntentListener { - private final Activity activity; + private final Registrar registrar; private final MethodChannel channel; private static final String CLICK_ACTION_VALUE = "FLUTTER_NOTIFICATION_CLICK"; public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "firebase_messaging"); - final FirebaseMessagingPlugin plugin = - new FirebaseMessagingPlugin(registrar.activity(), channel); + final FirebaseMessagingPlugin plugin = new FirebaseMessagingPlugin(registrar, channel); registrar.addNewIntentListener(plugin); channel.setMethodCallHandler(plugin); } - private FirebaseMessagingPlugin(Activity activity, MethodChannel channel) { - this.activity = activity; + private FirebaseMessagingPlugin(Registrar registrar, MethodChannel channel) { + this.registrar = registrar; this.channel = channel; - FirebaseApp.initializeApp(activity); + FirebaseApp.initializeApp(registrar.context()); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(FlutterFirebaseInstanceIDService.ACTION_TOKEN); intentFilter.addAction(FlutterFirebaseMessagingService.ACTION_REMOTE_MESSAGE); - LocalBroadcastManager manager = LocalBroadcastManager.getInstance(activity); + LocalBroadcastManager manager = LocalBroadcastManager.getInstance(registrar.context()); manager.registerReceiver(this, intentFilter); } @@ -68,8 +66,10 @@ @Override public void onMethodCall(MethodCall call, Result result) { if ("configure".equals(call.method)) { - FlutterFirebaseInstanceIDService.broadcastToken(activity); - sendMessageFromIntent("onLaunch", activity.getIntent()); + FlutterFirebaseInstanceIDService.broadcastToken(registrar.context()); + if (registrar.activity() != null) { + sendMessageFromIntent("onLaunch", registrar.activity().getIntent()); + } result.success(null); } else if ("subscribeToTopic".equals(call.method)) { String topic = call.arguments();
diff --git a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java index b9c7aef..013fb97 100755 --- a/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java +++ b/packages/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FirebaseStoragePlugin.java
@@ -4,7 +4,6 @@ package io.flutter.plugins.firebase.storage; -import android.app.Activity; import android.net.Uri; import android.support.annotation.NonNull; import com.google.android.gms.tasks.OnFailureListener; @@ -29,11 +28,11 @@ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "firebase_storage"); - channel.setMethodCallHandler(new FirebaseStoragePlugin(registrar.activity())); + channel.setMethodCallHandler(new FirebaseStoragePlugin(registrar)); } - private FirebaseStoragePlugin(Activity activity) { - FirebaseApp.initializeApp(activity); + private FirebaseStoragePlugin(Registrar registrar) { + FirebaseApp.initializeApp(registrar.context()); this.firebaseStorage = FirebaseStorage.getInstance(); }
diff --git a/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java b/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java index 6071de5..1cc52a5 100755 --- a/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java +++ b/packages/google_sign_in/android/src/main/java/io/flutter/plugins/googlesignin/GoogleSignInPlugin.java
@@ -121,7 +121,7 @@ private static final String STATE_RESOLVING_ERROR = "resolving_error"; - private final PluginRegistry.Registrar mRegistrar; + private final PluginRegistry.Registrar registrar; private final Handler handler = new Handler(); private final BackgroundTaskRunner backgroundTaskRunner = new BackgroundTaskRunner(1); @@ -132,10 +132,10 @@ private volatile GoogleSignInAccount currentAccount; public Delegate(PluginRegistry.Registrar registrar) { - mRegistrar = registrar; - Application application = (Application) mRegistrar.context(); + this.registrar = registrar; + Application application = (Application) registrar.context(); application.registerActivityLifecycleCallbacks(handler); - mRegistrar.addActivityResultListener(handler); + registrar.addActivityResultListener(handler); } /** Returns the most recently signed-in account, or null if there was none. */ @@ -168,13 +168,13 @@ // TODO(jackson): Perhaps we should provide a mechanism to override this // behavior. int clientIdIdentifier = - mRegistrar + registrar .context() .getResources() .getIdentifier( - "default_web_client_id", "string", mRegistrar.context().getPackageName()); + "default_web_client_id", "string", registrar.context().getPackageName()); if (clientIdIdentifier != 0) { - optionsBuilder.requestIdToken(mRegistrar.context().getString(clientIdIdentifier)); + optionsBuilder.requestIdToken(registrar.context().getString(clientIdIdentifier)); } for (String scope : requestedScopes) { optionsBuilder.requestScopes(new Scope(scope)); @@ -185,7 +185,7 @@ this.requestedScopes = requestedScopes; googleApiClient = - new GoogleApiClient.Builder(mRegistrar.context()) + new GoogleApiClient.Builder(registrar.context()) .addApi(Auth.GOOGLE_SIGN_IN_API, optionsBuilder.build()) .addConnectionCallbacks(handler) .addOnConnectionFailedListener(handler) @@ -224,13 +224,13 @@ * were requested. */ public void signIn(Result result) { - if (mRegistrar.activity() == null) { + if (registrar.activity() == null) { throw new IllegalStateException("signIn needs a foreground activity"); } checkAndSetPendingOperation(METHOD_SIGN_IN, result); Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); - mRegistrar.activity().startActivityForResult(signInIntent, REQUEST_CODE); + registrar.activity().startActivityForResult(signInIntent, REQUEST_CODE); } /** @@ -251,7 +251,7 @@ public String call() throws Exception { Account account = new Account(email, "com.google"); String scopesStr = "oauth2:" + Joiner.on(' ').join(requestedScopes); - return GoogleAuthUtil.getToken(mRegistrar.context(), account, scopesStr); + return GoogleAuthUtil.getToken(registrar.context(), account, scopesStr); } }; @@ -417,14 +417,14 @@ @Override public void onActivityStarted(Activity activity) { - if (!resolvingError && activity == mRegistrar.activity() && googleApiClient != null) { + if (!resolvingError && activity == registrar.activity() && googleApiClient != null) { googleApiClient.connect(); } } @Override public void onActivityStopped(Activity activity) { - if (activity == mRegistrar.activity() && googleApiClient != null) { + if (activity == registrar.activity() && googleApiClient != null) { googleApiClient.disconnect(); } } @@ -452,19 +452,19 @@ if (resolvingError) { // Already attempting to resolve an error. return; - } else if (result.hasResolution() && mRegistrar.activity() != null) { + } else if (result.hasResolution() && registrar.activity() != null) { resolvingError = true; try { - result.startResolutionForResult(mRegistrar.activity(), REQUEST_CODE_RESOLVE_ERROR); + result.startResolutionForResult(registrar.activity(), REQUEST_CODE_RESOLVE_ERROR); } catch (SendIntentException e) { resolvingError = false; finishWithError(ERROR_REASON_CONNECTION_FAILED, String.valueOf(result.getErrorCode())); } - } else if (mRegistrar.activity() != null) { + } else if (registrar.activity() != null) { resolvingError = true; GoogleApiAvailability.getInstance() .showErrorDialogFragment( - mRegistrar.activity(), + registrar.activity(), result.getErrorCode(), REQUEST_CODE_RESOLVE_ERROR, new DialogInterface.OnCancelListener() {
diff --git a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java index 784e335..ec6fdf6 100644 --- a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java +++ b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java
@@ -37,23 +37,23 @@ private static final int SOURCE_CAMERA = 1; private static final int SOURCE_GALLERY = 2; - private Activity activity; - private static final DefaultCameraModule cameraModule = new DefaultCameraModule(); + private final PluginRegistry.Registrar registrar; + // Pending method call to obtain an image private Result pendingResult; private MethodCall methodCall; public static void registerWith(PluginRegistry.Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL); - final ImagePickerPlugin instance = new ImagePickerPlugin(registrar.activity()); + final ImagePickerPlugin instance = new ImagePickerPlugin(registrar); registrar.addActivityResultListener(instance); channel.setMethodCallHandler(instance); } - private ImagePickerPlugin(Activity activity) { - this.activity = activity; + private ImagePickerPlugin(PluginRegistry.Registrar registrar) { + this.registrar = registrar; } @Override @@ -63,6 +63,12 @@ return; } + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "image_picker plugin requires a foreground activity.", null); + return; + } + pendingResult = result; methodCall = call; @@ -106,7 +112,7 @@ if (requestCode == REQUEST_CODE_CAMERA) { if (resultCode == Activity.RESULT_OK) { cameraModule.getImage( - activity, + registrar.context(), data, new OnImageReadyListener() { @Override
diff --git a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java b/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java index b37a2bf..f56806c 100644 --- a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java +++ b/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java
@@ -15,18 +15,18 @@ /** LocalAuthPlugin */ public class LocalAuthPlugin implements MethodCallHandler { - private final Activity activity; + private final Registrar registrar; private final AtomicBoolean authInProgress = new AtomicBoolean(false); /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/local_auth"); - channel.setMethodCallHandler(new LocalAuthPlugin(registrar.activity())); + channel.setMethodCallHandler(new LocalAuthPlugin(registrar)); } - private LocalAuthPlugin(Activity activity) { - this.activity = activity; + private LocalAuthPlugin(Registrar registrar) { + this.registrar = registrar; } @Override @@ -40,6 +40,11 @@ result.error("auth_in_progress", "Authentication in progress", null); return; } + Activity activity = registrar.activity(); + if (activity == null) { + result.error("no_activity", "local_auth plugin requires a foreground activity", null); + return; + } AuthenticationHelper authenticationHelper = new AuthenticationHelper( activity,
diff --git a/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java b/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java index 58863a2..4c38019 100644 --- a/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java +++ b/packages/package_info/android/src/main/java/io/flutter/plugins/packageinfo/PackageInfoPlugin.java
@@ -15,22 +15,23 @@ /** PackageInfoPlugin */ public class PackageInfoPlugin implements MethodCallHandler { - private final Context context; + private final Registrar mRegistrar; /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/package_info"); - channel.setMethodCallHandler(new PackageInfoPlugin(registrar.context())); + channel.setMethodCallHandler(new PackageInfoPlugin(registrar)); } - private PackageInfoPlugin(Context context) { - this.context = context; + private PackageInfoPlugin(Registrar registrar) { + this.mRegistrar = registrar; } @Override public void onMethodCall(MethodCall call, Result result) { try { + Context context = mRegistrar.context(); PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); switch (call.method) { case "getVersion":
diff --git a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java index 4836569..d56cb2b 100644 --- a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java +++ b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java
@@ -4,7 +4,6 @@ package io.flutter.plugins.pathprovider; -import android.content.Context; import android.os.Environment; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -14,17 +13,17 @@ import io.flutter.util.PathUtils; public class PathProviderPlugin implements MethodCallHandler { - private final Context context; + private final Registrar mRegistrar; public static void registerWith(Registrar registrar) { MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/path_provider"); - PathProviderPlugin instance = new PathProviderPlugin(registrar.context()); + PathProviderPlugin instance = new PathProviderPlugin(registrar); channel.setMethodCallHandler(instance); } - private PathProviderPlugin(Context context) { - this.context = context; + private PathProviderPlugin(Registrar registrar) { + this.mRegistrar = registrar; } @Override @@ -45,11 +44,11 @@ } private String getPathProviderTemporaryDirectory() { - return context.getCacheDir().getPath(); + return mRegistrar.context().getCacheDir().getPath(); } private String getPathProviderApplicationDocumentsDirectory() { - return PathUtils.getDataDirectory(context); + return PathUtils.getDataDirectory(mRegistrar.context()); } private String getPathProviderStorageDirectory() {
diff --git a/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java b/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java index f2f1fb1..7bc7b70 100644 --- a/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java +++ b/packages/quick_actions/android/src/main/java/io/flutter/plugins/quickactions/QuickActionsPlugin.java
@@ -25,15 +25,16 @@ /** QuickActionsPlugin */ @SuppressWarnings("unchecked") public class QuickActionsPlugin implements MethodCallHandler { - private final Context context; + private final Registrar registrar; + // Channel is a static field because it needs to be accessible to the // {@link ShortcutHandlerActivity} which has to be a static class with // no-args constructor. // It is also mutable because it is derived from {@link Registrar}. private static MethodChannel channel; - private QuickActionsPlugin(Context context) { - this.context = context; + private QuickActionsPlugin(Registrar registrar) { + this.registrar = registrar; } /** Plugin registration. */ @@ -42,7 +43,7 @@ throw new IllegalStateException("You should not call registerWith more than once."); } channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/quick_actions"); - channel.setMethodCallHandler(new QuickActionsPlugin(registrar.context())); + channel.setMethodCallHandler(new QuickActionsPlugin(registrar)); } @Override @@ -54,6 +55,7 @@ result.success(null); return; } + Context context = registrar.context(); ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); switch (call.method) { @@ -75,6 +77,7 @@ @SuppressLint("NewApi") private List<ShortcutInfo> deserializeShortcuts(List<Map<String, String>> shortcuts) { List<ShortcutInfo> shortcutInfos = new ArrayList<>(); + Context context = registrar.context(); for (Map<String, String> shortcut : shortcuts) { String icon = shortcut.get("icon"); String type = shortcut.get("type");
diff --git a/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java b/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java index 338c042..14de0f8 100644 --- a/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java +++ b/packages/video_player/android/src/main/java/io/flutter/videoplayer/VideoPlayerPlugin.java
@@ -10,7 +10,6 @@ import android.media.MediaPlayer; import android.os.Build; import android.view.Surface; -import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -172,22 +171,24 @@ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "flutter.io/videoPlayer"); - channel.setMethodCallHandler( - new VideoPlayerPlugin(registrar.messenger(), registrar.textures())); + channel.setMethodCallHandler(new VideoPlayerPlugin(registrar)); } - private VideoPlayerPlugin(BinaryMessenger messenger, TextureRegistry textures) { - this.textures = textures; + private VideoPlayerPlugin(Registrar registrar) { + this.registrar = registrar; this.videoPlayers = new HashMap<>(); - this.messenger = messenger; } private final Map<Long, VideoPlayer> videoPlayers; - private final TextureRegistry textures; - private final BinaryMessenger messenger; + private final Registrar registrar; @Override public void onMethodCall(MethodCall call, Result result) { + TextureRegistry textures = registrar.textures(); + if (textures == null) { + result.error("no_activity", "video_player plugin requires a foreground activity", null); + return; + } if (call.method.equals("init")) { for (VideoPlayer player : videoPlayers.values()) { player.dispose(); @@ -196,7 +197,8 @@ } else if (call.method.equals("create")) { TextureRegistry.SurfaceTextureEntry handle = textures.createSurfaceTexture(); EventChannel eventChannel = - new EventChannel(messenger, "flutter.io/videoPlayer/videoEvents" + handle.id()); + new EventChannel( + registrar.messenger(), "flutter.io/videoPlayer/videoEvents" + handle.id()); VideoPlayer player = new VideoPlayer(eventChannel, handle, (String) call.argument("dataSource"), result); videoPlayers.put(handle.id(), player);