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);