diff --git a/packages/connectivity/CHANGELOG.md b/packages/connectivity/CHANGELOG.md index 6b1b3780c4c2..050b1de78242 100644 --- a/packages/connectivity/CHANGELOG.md +++ b/packages/connectivity/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.5+1 + +* Revert 0.4.5 because the lower bound flutter version introduced is not supported. + ## 0.4.5 * Support the v2 Android embedder. diff --git a/packages/connectivity/android/build.gradle b/packages/connectivity/android/build.gradle index 3012844d8778..681eb0438b75 100644 --- a/packages/connectivity/android/build.gradle +++ b/packages/connectivity/android/build.gradle @@ -45,28 +45,3 @@ android { disable 'InvalidPackage' } } - -// TODO(amirh): Remove this hack once androidx.lifecycle is included on stable. https://github.com/flutter/flutter/issues/42348 -afterEvaluate { - def containsEmbeddingDependencies = false - for (def configuration : configurations.all) { - for (def dependency : configuration.dependencies) { - if (dependency.group == 'io.flutter' && - dependency.name.startsWith('flutter_embedding') && - dependency.isTransitive()) - { - containsEmbeddingDependencies = true - break - } - } - } - if (!containsEmbeddingDependencies) { - android { - dependencies { - def lifecycle_version = "2.1.0" - api "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" - api "androidx.lifecycle:lifecycle-runtime:$lifecycle_version" - } - } - } -} diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/Connectivity.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/Connectivity.java deleted file mode 100644 index 605acdb73948..000000000000 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/Connectivity.java +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2019 The Chromium 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.plugins.connectivity; - -import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkCapabilities; -import android.net.NetworkInfo; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; -import android.os.Build; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -/** Reports connectivity related information such as connectivity type and wifi information. */ -class Connectivity { - private ConnectivityManager connectivityManager; - private WifiManager wifiManager; - - Connectivity(ConnectivityManager connectivityManager, WifiManager wifiManager) { - this.connectivityManager = connectivityManager; - this.wifiManager = wifiManager; - } - - @NonNull - String getNetworkType() { - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - Network network = connectivityManager.getActiveNetwork(); - NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network); - if (capabilities == null) { - return "none"; - } - if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) - || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) { - return "wifi"; - } - if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { - return "mobile"; - } - } - - return getNetworkTypeLegacy(); - } - - @Nullable - String getWifiName() { - WifiInfo wifiInfo = getWifiInfo(); - String ssid = null; - if (wifiInfo != null) ssid = wifiInfo.getSSID(); - if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID" - return ssid; - } - - @Nullable - String getWifiBSSID() { - WifiInfo wifiInfo = getWifiInfo(); - String bssid = null; - if (wifiInfo != null) { - bssid = wifiInfo.getBSSID(); - } - return bssid; - } - - @Nullable - String getWifiIPAddress() { - WifiInfo wifiInfo = null; - if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); - - String ip = null; - int i_ip = 0; - if (wifiInfo != null) i_ip = wifiInfo.getIpAddress(); - - if (i_ip != 0) - ip = - String.format( - "%d.%d.%d.%d", - (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff)); - - return ip; - } - - @Nullable - private WifiInfo getWifiInfo() { - return wifiManager == null ? null : wifiManager.getConnectionInfo(); - } - - @SuppressWarnings("deprecation") - private String getNetworkTypeLegacy() { - // handle type for Android versions less than Android 9 - NetworkInfo info = connectivityManager.getActiveNetworkInfo(); - if (info == null || !info.isConnected()) { - return "none"; - } - int type = info.getType(); - switch (type) { - case ConnectivityManager.TYPE_ETHERNET: - case ConnectivityManager.TYPE_WIFI: - case ConnectivityManager.TYPE_WIMAX: - return "wifi"; - case ConnectivityManager.TYPE_MOBILE: - case ConnectivityManager.TYPE_MOBILE_DUN: - case ConnectivityManager.TYPE_MOBILE_HIPRI: - return "mobile"; - default: - return "none"; - } - } -} diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java deleted file mode 100644 index d046eceb0fa6..000000000000 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2019 The Chromium 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.plugins.connectivity; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.net.ConnectivityManager; -import androidx.annotation.NonNull; -import io.flutter.plugin.common.EventChannel; - -/** - * The ConnectivityBroadcastReceiver receives the connectivity updates and send them to the UIThread - * through an {@link EventChannel.EventSink} - * - *
Use {@link
- * io.flutter.plugin.common.EventChannel#setStreamHandler(io.flutter.plugin.common.EventChannel.StreamHandler)}
- * to set up the receiver.
- */
-class ConnectivityBroadcastReceiver extends BroadcastReceiver
- implements EventChannel.StreamHandler {
- private Context context;
- private Connectivity connectivity;
- private EventChannel.EventSink events;
-
- ConnectivityBroadcastReceiver(@NonNull Context context, @NonNull Connectivity connectivity) {
- this.context = context;
- this.connectivity = connectivity;
- }
-
- @Override
- public void onListen(Object arguments, EventChannel.EventSink events) {
- this.events = events;
- context.registerReceiver(this, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
- }
-
- @Override
- public void onCancel(Object arguments) {
- context.unregisterReceiver(this);
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (events != null) {
- events.success(connectivity.getNetworkType());
- }
- }
-}
diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandler.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandler.java
deleted file mode 100644
index 488c8efdd15f..000000000000
--- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandler.java
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2019 The Chromium 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.plugins.connectivity;
-
-import androidx.annotation.NonNull;
-import io.flutter.plugin.common.MethodCall;
-import io.flutter.plugin.common.MethodChannel;
-
-/**
- * The handler receives {@link MethodCall}s from the UIThread, gets the related information from
- * a @{@link Connectivity}, and then send the result back to the UIThread through the {@link
- * MethodChannel.Result}.
- */
-class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler {
-
- private Connectivity connectivity;
-
- /**
- * Construct the ConnectivityMethodChannelHandler with a {@code connectivity}. The {@code
- * connectivity} must not be null.
- */
- ConnectivityMethodChannelHandler(@NonNull Connectivity connectivity) {
- assert (connectivity != null);
- this.connectivity = connectivity;
- }
-
- @Override
- public void onMethodCall(MethodCall call, MethodChannel.Result result) {
- switch (call.method) {
- case "check":
- result.success(connectivity.getNetworkType());
- break;
- case "wifiName":
- result.success(connectivity.getWifiName());
- break;
- case "wifiBSSID":
- result.success(connectivity.getWifiBSSID());
- break;
- case "wifiIPAddress":
- result.success(connectivity.getWifiIPAddress());
- break;
- default:
- result.notImplemented();
- break;
- }
- }
-}
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 ef8f7861d8e0..dac720b0450c 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
@@ -4,60 +4,186 @@
package io.flutter.plugins.connectivity;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
-import io.flutter.embedding.engine.plugins.FlutterPlugin;
-import io.flutter.plugin.common.BinaryMessenger;
+import android.os.Build;
import io.flutter.plugin.common.EventChannel;
+import io.flutter.plugin.common.EventChannel.EventSink;
+import io.flutter.plugin.common.EventChannel.StreamHandler;
+import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
+import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;
/** ConnectivityPlugin */
-public class ConnectivityPlugin implements FlutterPlugin {
-
- private MethodChannel methodChannel;
- private EventChannel eventChannel;
+public class ConnectivityPlugin implements MethodCallHandler, StreamHandler {
+ private final Registrar registrar;
+ private final ConnectivityManager manager;
+ private BroadcastReceiver receiver;
/** Plugin registration. */
public static void registerWith(Registrar registrar) {
+ final MethodChannel channel =
+ 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);
+ channel.setMethodCallHandler(instance);
+ eventChannel.setStreamHandler(instance);
+ }
- ConnectivityPlugin plugin = new ConnectivityPlugin();
- plugin.setupChannels(registrar.messenger(), registrar.context());
+ private ConnectivityPlugin(Registrar registrar) {
+ this.registrar = registrar;
+ this.manager =
+ (ConnectivityManager)
+ registrar
+ .context()
+ .getApplicationContext()
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
}
@Override
- public void onAttachedToEngine(FlutterPluginBinding binding) {
- setupChannels(binding.getFlutterEngine().getDartExecutor(), binding.getApplicationContext());
+ public void onListen(Object arguments, EventSink events) {
+ receiver = createReceiver(events);
+ registrar
+ .context()
+ .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
@Override
- public void onDetachedFromEngine(FlutterPluginBinding binding) {
- teardownChannels();
+ public void onCancel(Object arguments) {
+ registrar.context().unregisterReceiver(receiver);
+ receiver = null;
+ }
+
+ private String getNetworkType(ConnectivityManager manager) {
+ if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ Network network = manager.getActiveNetwork();
+ NetworkCapabilities capabilities = manager.getNetworkCapabilities(network);
+ if (capabilities == null) {
+ return "none";
+ }
+ if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
+ || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
+ return "wifi";
+ }
+ if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
+ return "mobile";
+ }
+ }
+
+ return getNetworkTypeLegacy(manager);
}
- private void setupChannels(BinaryMessenger messenger, Context context) {
- methodChannel = new MethodChannel(messenger, "plugins.flutter.io/connectivity");
- eventChannel = new EventChannel(messenger, "plugins.flutter.io/connectivity_status");
- ConnectivityManager connectivityManager =
- (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ @SuppressWarnings("deprecation")
+ private String getNetworkTypeLegacy(ConnectivityManager manager) {
+ // handle type for Android versions less than Android 9
+ NetworkInfo info = manager.getActiveNetworkInfo();
+ if (info == null || !info.isConnected()) {
+ return "none";
+ }
+ int type = info.getType();
+ switch (type) {
+ case ConnectivityManager.TYPE_ETHERNET:
+ case ConnectivityManager.TYPE_WIFI:
+ case ConnectivityManager.TYPE_WIMAX:
+ return "wifi";
+ case ConnectivityManager.TYPE_MOBILE:
+ case ConnectivityManager.TYPE_MOBILE_DUN:
+ case ConnectivityManager.TYPE_MOBILE_HIPRI:
+ return "mobile";
+ default:
+ return "none";
+ }
+ }
+
+ @Override
+ public void onMethodCall(MethodCall call, Result result) {
+ switch (call.method) {
+ case "check":
+ handleCheck(call, result);
+ break;
+ case "wifiName":
+ handleWifiName(call, result);
+ break;
+ case "wifiBSSID":
+ handleBSSID(call, result);
+ break;
+ case "wifiIPAddress":
+ handleWifiIPAddress(call, result);
+ break;
+ default:
+ result.notImplemented();
+ break;
+ }
+ }
+
+ private void handleCheck(MethodCall call, final Result result) {
+ result.success(checkNetworkType());
+ }
+
+ private String checkNetworkType() {
+ return getNetworkType(manager);
+ }
+
+ private WifiInfo getWifiInfo() {
+ WifiManager wifiManager =
+ (WifiManager)
+ registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+ return wifiManager == null ? null : wifiManager.getConnectionInfo();
+ }
+
+ private void handleWifiName(MethodCall call, final Result result) {
+ WifiInfo wifiInfo = getWifiInfo();
+ String ssid = null;
+ if (wifiInfo != null) ssid = wifiInfo.getSSID();
+ if (ssid != null) ssid = ssid.replaceAll("\"", ""); // Android returns "SSID"
+ result.success(ssid);
+ }
+
+ private void handleBSSID(MethodCall call, MethodChannel.Result result) {
+ WifiInfo wifiInfo = getWifiInfo();
+ String bssid = null;
+ if (wifiInfo != null) bssid = wifiInfo.getBSSID();
+ result.success(bssid);
+ }
+
+ private void handleWifiIPAddress(MethodCall call, final Result result) {
+ WifiManager wifiManager =
+ (WifiManager)
+ registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+
+ WifiInfo wifiInfo = null;
+ if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo();
- Connectivity connectivity = new Connectivity(connectivityManager, wifiManager);
+ String ip = null;
+ int i_ip = 0;
+ if (wifiInfo != null) i_ip = wifiInfo.getIpAddress();
- ConnectivityMethodChannelHandler methodChannelHandler =
- new ConnectivityMethodChannelHandler(connectivity);
- ConnectivityBroadcastReceiver receiver =
- new ConnectivityBroadcastReceiver(context, connectivity);
+ if (i_ip != 0)
+ ip =
+ String.format(
+ "%d.%d.%d.%d",
+ (i_ip & 0xff), (i_ip >> 8 & 0xff), (i_ip >> 16 & 0xff), (i_ip >> 24 & 0xff));
- methodChannel.setMethodCallHandler(methodChannelHandler);
- eventChannel.setStreamHandler(receiver);
+ result.success(ip);
}
- private void teardownChannels() {
- methodChannel.setMethodCallHandler(null);
- eventChannel.setStreamHandler(null);
- methodChannel = null;
- eventChannel = null;
+ private BroadcastReceiver createReceiver(final EventSink events) {
+ return new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ events.success(checkNetworkType());
+ }
+ };
}
}
diff --git a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml
index 3bf2ca03bc33..bf36efe1a689 100644
--- a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml
+++ b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml
@@ -4,20 +4,12 @@