From ae42d1240f14055170e08043ed0e0da48cc4a484 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Wed, 2 Oct 2019 18:20:42 -0700 Subject: [PATCH 01/24] draft --- .../connectivity/ConnectivityPlugin.java | 44 +++++ .../ConnectivityMethodChannelHandler.java | 165 ++++++++++++++++++ .../connectivity/ConnectivityPlugin.java | 160 +---------------- .../example/android/app/build.gradle | 3 + .../android/app/src/main/AndroidManifest.xml | 17 +- .../connectivity_exmaple/MainActivity.java | 12 ++ .../connectivity/example/android/build.gradle | 2 +- .../example/android/gradle.properties | 2 + .../gradle/wrapper/gradle-wrapper.properties | 3 +- 9 files changed, 247 insertions(+), 161 deletions(-) create mode 100644 packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java create mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandler.java create mode 100644 packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java new file mode 100644 index 000000000000..0dcc7f2dd099 --- /dev/null +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -0,0 +1,44 @@ +// 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 dev.flutter.plugins.connectivity; + +import android.hardware.camera2.CameraAccessException; +import android.os.Build; + +//import androidx.annotation.NonNull; + +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.embedding.engine.plugins.activity.ActivityAware; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +import io.flutter.plugin.common.EventChannel; +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; +import io.flutter.plugins.connectivity.ConnectivityMethodChannelHandler; + +public class ConnectivityPlugin implements FlutterPlugin { + + private FlutterPluginBinding pluginBinding; + + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + this.pluginBinding = binding; + final MethodChannel channel = + new MethodChannel(pluginBinding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); + final EventChannel eventChannel = new EventChannel(pluginBinding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); + + ConnectivityMethodChannelHandler handler = new ConnectivityMethodChannelHandler(pluginBinding.getApplicationContext()); + + channel.setMethodCallHandler(handler); + eventChannel.setStreamHandler(handler); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + this.pluginBinding = null; + } +} 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 new file mode 100644 index 000000000000..ec6b406991f3 --- /dev/null +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandler.java @@ -0,0 +1,165 @@ +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 android.os.Build; + +import io.flutter.plugin.common.EventChannel; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.PluginRegistry; +import io.flutter.view.TextureRegistry; + +public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler, EventChannel.StreamHandler { + + private final Context context; + private ConnectivityManager manager; + private BroadcastReceiver receiver; + + public ConnectivityMethodChannelHandler(Context context) { + assert(context != null); + this.context = context; + this.manager = (ConnectivityManager)context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + } + + @Override + public void onListen(Object arguments, EventChannel.EventSink events) { + context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } + + @Override + public void onCancel(Object arguments) { + context.unregisterReceiver(receiver); + receiver = null; + } + + @Override + public void onMethodCall(MethodCall call, MethodChannel.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 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); + } + + @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"; + } + } + + private BroadcastReceiver createReceiver(final EventChannel.EventSink events) { + return new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + events.success(checkNetworkType()); + } + }; + } + + private String checkNetworkType() { + return getNetworkType(manager); + } + + private void handleCheck(MethodCall call, final MethodChannel.Result result) { + result.success(checkNetworkType()); + } + + private WifiInfo getWifiInfo() { + WifiManager wifiManager = + (WifiManager) + context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + return wifiManager == null ? null : wifiManager.getConnectionInfo(); + } + + private void handleWifiName(MethodCall call, final MethodChannel.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 MethodChannel.Result result) { + WifiManager wifiManager = + (WifiManager) + context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + 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)); + + result.success(ip); + } +} 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 dac720b0450c..da5ce10b8e96 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 @@ -25,165 +25,17 @@ import io.flutter.plugin.common.PluginRegistry.Registrar; /** ConnectivityPlugin */ -public class ConnectivityPlugin implements MethodCallHandler, StreamHandler { - private final Registrar registrar; - private final ConnectivityManager manager; - private BroadcastReceiver receiver; +public class ConnectivityPlugin { /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); + 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); - } - - private ConnectivityPlugin(Registrar registrar) { - this.registrar = registrar; - this.manager = - (ConnectivityManager) - registrar - .context() - .getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - } - - @Override - public void onListen(Object arguments, EventSink events) { - receiver = createReceiver(events); - registrar - .context() - .registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } - - @Override - 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); - } - - @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(); - - 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)); - - result.success(ip); - } + new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); - private BroadcastReceiver createReceiver(final EventSink events) { - return new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - events.success(checkNetworkType()); - } - }; + ConnectivityMethodChannelHandler methodChannelHandler = new ConnectivityMethodChannelHandler(registrar.context()); + channel.setMethodCallHandler(methodChannelHandler); + eventChannel.setStreamHandler(methodChannelHandler); } } diff --git a/packages/connectivity/example/android/app/build.gradle b/packages/connectivity/example/android/app/build.gradle index 5d1f138bfe1a..377514e83236 100644 --- a/packages/connectivity/example/android/app/build.gradle +++ b/packages/connectivity/example/android/app/build.gradle @@ -52,6 +52,9 @@ flutter { } dependencies { + implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0' + implementation 'androidx.lifecycle:lifecycle-common-java8:2.1.0' + testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' diff --git a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml index bf36efe1a689..85b9a423ec27 100644 --- a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml +++ b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml @@ -5,11 +5,18 @@ + android:launchMode="singleTop" + android:theme="@android:style/Theme.Black.NoTitleBar" + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection" + android:hardwareAccelerated="true" + android:windowSoftInputMode="adjustResize"> + + + diff --git a/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java new file mode 100644 index 000000000000..6ca150699066 --- /dev/null +++ b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java @@ -0,0 +1,12 @@ +package dev.flutter.plugins.connectivity_exmaple; + +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; + +public class MainActivity extends FlutterActivity { + + @Override + public void configureFlutterEngine(FlutterEngine flutterEngine) { + super.configureFlutterEngine(flutterEngine); + } +} diff --git a/packages/connectivity/example/android/build.gradle b/packages/connectivity/example/android/build.gradle index 541636cc492a..1b3361691d80 100644 --- a/packages/connectivity/example/android/build.gradle +++ b/packages/connectivity/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:3.4.1' } } diff --git a/packages/connectivity/example/android/gradle.properties b/packages/connectivity/example/android/gradle.properties index 8bd86f680510..94adc3a3f97a 100644 --- a/packages/connectivity/example/android/gradle.properties +++ b/packages/connectivity/example/android/gradle.properties @@ -1 +1,3 @@ org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties index 019065d1d650..636fa99743b1 100644 --- a/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Wed Oct 02 18:17:36 PDT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip From 67f4f705f3602d128d57688789dc5bd504f154d1 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 3 Oct 2019 10:20:56 -0700 Subject: [PATCH 02/24] migrate connectivity --- .../connectivity/ConnectivityPlugin.java | 54 ++-- .../ConnectivityMethodChannelHandler.java | 280 +++++++++--------- .../connectivity/ConnectivityPlugin.java | 23 +- .../connectivity_exmaple/MainActivity.java | 10 +- .../connectivity_example/MainActivity.java | 2 +- 5 files changed, 174 insertions(+), 195 deletions(-) diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index 0dcc7f2dd099..f0bf812ce40c 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -4,41 +4,35 @@ package dev.flutter.plugins.connectivity; -import android.hardware.camera2.CameraAccessException; -import android.os.Build; - -//import androidx.annotation.NonNull; - import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.embedding.engine.plugins.activity.ActivityAware; -import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; import io.flutter.plugin.common.EventChannel; -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; import io.flutter.plugins.connectivity.ConnectivityMethodChannelHandler; public class ConnectivityPlugin implements FlutterPlugin { - private FlutterPluginBinding pluginBinding; - - @Override - public void onAttachedToEngine(FlutterPluginBinding binding) { - this.pluginBinding = binding; - final MethodChannel channel = - new MethodChannel(pluginBinding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); - final EventChannel eventChannel = new EventChannel(pluginBinding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); - - ConnectivityMethodChannelHandler handler = new ConnectivityMethodChannelHandler(pluginBinding.getApplicationContext()); - - channel.setMethodCallHandler(handler); - eventChannel.setStreamHandler(handler); - } - - @Override - public void onDetachedFromEngine(FlutterPluginBinding binding) { - this.pluginBinding = null; - } + private FlutterPluginBinding pluginBinding; + + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + this.pluginBinding = binding; + final MethodChannel channel = + new MethodChannel( + pluginBinding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); + final EventChannel eventChannel = + new EventChannel( + pluginBinding.getFlutterEngine().getDartExecutor(), + "plugins.flutter.io/connectivity_status"); + + ConnectivityMethodChannelHandler handler = + new ConnectivityMethodChannelHandler(pluginBinding.getApplicationContext()); + + channel.setMethodCallHandler(handler); + eventChannel.setStreamHandler(handler); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + this.pluginBinding = null; + } } 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 index ec6b406991f3..c1d97446716e 100644 --- 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 @@ -11,155 +11,153 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; - import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugin.common.PluginRegistry; -import io.flutter.view.TextureRegistry; - -public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler, EventChannel.StreamHandler { - - private final Context context; - private ConnectivityManager manager; - private BroadcastReceiver receiver; - - public ConnectivityMethodChannelHandler(Context context) { - assert(context != null); - this.context = context; - this.manager = (ConnectivityManager)context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); - } - - @Override - public void onListen(Object arguments, EventChannel.EventSink events) { - context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } - - @Override - public void onCancel(Object arguments) { - context.unregisterReceiver(receiver); - receiver = null; - } - - @Override - public void onMethodCall(MethodCall call, MethodChannel.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 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); - } - @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"; - } +public class ConnectivityMethodChannelHandler + implements MethodChannel.MethodCallHandler, EventChannel.StreamHandler { + + private final Context context; + private ConnectivityManager manager; + private BroadcastReceiver receiver; + + public ConnectivityMethodChannelHandler(Context context) { + assert (context != null); + this.context = context; + this.manager = + (ConnectivityManager) + context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + } + + @Override + public void onListen(Object arguments, EventChannel.EventSink events) { + context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } + + @Override + public void onCancel(Object arguments) { + context.unregisterReceiver(receiver); + receiver = null; + } + + @Override + public void onMethodCall(MethodCall call, MethodChannel.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 BroadcastReceiver createReceiver(final EventChannel.EventSink events) { - return new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - events.success(checkNetworkType()); - } - }; - } - - private String checkNetworkType() { - return getNetworkType(manager); + } + + 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"; + } } - private void handleCheck(MethodCall call, final MethodChannel.Result result) { - result.success(checkNetworkType()); - } + return getNetworkTypeLegacy(manager); + } - private WifiInfo getWifiInfo() { - WifiManager wifiManager = - (WifiManager) - context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); - return wifiManager == null ? null : wifiManager.getConnectionInfo(); + @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"; } - - private void handleWifiName(MethodCall call, final MethodChannel.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 MethodChannel.Result result) { - WifiManager wifiManager = - (WifiManager) - context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); - - 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)); - - result.success(ip); + 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"; } + } + + private BroadcastReceiver createReceiver(final EventChannel.EventSink events) { + return new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + events.success(checkNetworkType()); + } + }; + } + + private String checkNetworkType() { + return getNetworkType(manager); + } + + private void handleCheck(MethodCall call, final MethodChannel.Result result) { + result.success(checkNetworkType()); + } + + private WifiInfo getWifiInfo() { + WifiManager wifiManager = + (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + return wifiManager == null ? null : wifiManager.getConnectionInfo(); + } + + private void handleWifiName(MethodCall call, final MethodChannel.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 MethodChannel.Result result) { + WifiManager wifiManager = + (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + 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)); + + result.success(ip); + } } 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 da5ce10b8e96..aaf9f6a71877 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,24 +4,8 @@ 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 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 */ @@ -30,11 +14,12 @@ public class ConnectivityPlugin { /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); + new MethodChannel(registrar.messenger(), "plugins.flutter.io/connectivity"); final EventChannel eventChannel = - new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); + new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); - ConnectivityMethodChannelHandler methodChannelHandler = new ConnectivityMethodChannelHandler(registrar.context()); + ConnectivityMethodChannelHandler methodChannelHandler = + new ConnectivityMethodChannelHandler(registrar.context()); channel.setMethodCallHandler(methodChannelHandler); eventChannel.setStreamHandler(methodChannelHandler); } diff --git a/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java index 6ca150699066..30c79e562ae1 100644 --- a/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java +++ b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java @@ -1,12 +1,14 @@ package dev.flutter.plugins.connectivity_exmaple; +import dev.flutter.plugins.connectivity.ConnectivityPlugin; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; public class MainActivity extends FlutterActivity { - @Override - public void configureFlutterEngine(FlutterEngine flutterEngine) { - super.configureFlutterEngine(flutterEngine); - } + @Override + public void configureFlutterEngine(FlutterEngine flutterEngine) { + super.configureFlutterEngine(flutterEngine); + flutterEngine.getPlugins().add(new ConnectivityPlugin()); + } } diff --git a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/MainActivity.java b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/MainActivity.java index 6d76bcc24ac5..1b92897aeea2 100644 --- a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/MainActivity.java +++ b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/MainActivity.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package io.flutter.plugins.connectivityexample; +package io.flutter.plugins.connectivity_example; import android.os.Bundle; import io.flutter.app.FlutterActivity; From 6aebaf75714a0115f40ad966f6806a49c9086b3e Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 3 Oct 2019 10:25:15 -0700 Subject: [PATCH 03/24] revert some changes --- .../android/app/src/main/AndroidManifest.xml | 14 +++++++------- .../plugins/connectivity_example/MainActivity.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml index 85b9a423ec27..46fc8e343e01 100644 --- a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml +++ b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml @@ -4,14 +4,14 @@ + + + + + + + - - Date: Thu, 3 Oct 2019 10:27:44 -0700 Subject: [PATCH 04/24] revert testing code --- .../android/app/src/main/AndroidManifest.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml index 46fc8e343e01..85b9a423ec27 100644 --- a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml +++ b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml @@ -4,14 +4,14 @@ - - - - - - - + + Date: Thu, 3 Oct 2019 10:44:06 -0700 Subject: [PATCH 05/24] add --- packages/connectivity/example/android/build.gradle | 2 +- packages/connectivity/example/android/gradle.properties | 1 + .../example/android/gradle/wrapper/gradle-wrapper.properties | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/connectivity/example/android/build.gradle b/packages/connectivity/example/android/build.gradle index 1b3361691d80..541636cc492a 100644 --- a/packages/connectivity/example/android/build.gradle +++ b/packages/connectivity/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.4.1' + classpath 'com.android.tools.build:gradle:3.3.0' } } diff --git a/packages/connectivity/example/android/gradle.properties b/packages/connectivity/example/android/gradle.properties index 94adc3a3f97a..a6738207fd15 100644 --- a/packages/connectivity/example/android/gradle.properties +++ b/packages/connectivity/example/android/gradle.properties @@ -1,3 +1,4 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true +android.enableR8=true diff --git a/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties index 636fa99743b1..019065d1d650 100644 --- a/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/connectivity/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Wed Oct 02 18:17:36 PDT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip From b24cfc9e33651a33e8fe28b2ccc0451836479d41 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 3 Oct 2019 10:45:08 -0700 Subject: [PATCH 06/24] revert --- packages/connectivity/example/android/gradle.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connectivity/example/android/gradle.properties b/packages/connectivity/example/android/gradle.properties index a6738207fd15..94adc3a3f97a 100644 --- a/packages/connectivity/example/android/gradle.properties +++ b/packages/connectivity/example/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -android.enableR8=true From 7267b11ac2952706d7eb813602bd5c59ccf62cc1 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 3 Oct 2019 11:00:33 -0700 Subject: [PATCH 07/24] remove deps --- packages/connectivity/example/android/app/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/connectivity/example/android/app/build.gradle b/packages/connectivity/example/android/app/build.gradle index 377514e83236..5d1f138bfe1a 100644 --- a/packages/connectivity/example/android/app/build.gradle +++ b/packages/connectivity/example/android/app/build.gradle @@ -52,9 +52,6 @@ flutter { } dependencies { - implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0' - implementation 'androidx.lifecycle:lifecycle-common-java8:2.1.0' - testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' From 4926557a286b5cd7dd767e38efdca1f95772033d Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Thu, 3 Oct 2019 17:13:45 -0700 Subject: [PATCH 08/24] javadoc --- .../connectivity/ConnectivityPlugin.java | 19 ++++++++++--------- .../ConnectivityMethodChannelHandler.java | 8 ++++++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index f0bf812ce40c..bed3656d2544 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -9,30 +9,31 @@ import io.flutter.plugin.common.MethodChannel; import io.flutter.plugins.connectivity.ConnectivityMethodChannelHandler; -public class ConnectivityPlugin implements FlutterPlugin { +/** + * Plugin implementation that uses the new {@code io.flutter.embedding} package. + * + *

Instantiate this in an add to app scenario to gracefully handle activity and context changes. + */ - private FlutterPluginBinding pluginBinding; +public class ConnectivityPlugin implements FlutterPlugin { @Override public void onAttachedToEngine(FlutterPluginBinding binding) { - this.pluginBinding = binding; final MethodChannel channel = new MethodChannel( - pluginBinding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); final EventChannel eventChannel = new EventChannel( - pluginBinding.getFlutterEngine().getDartExecutor(), + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); ConnectivityMethodChannelHandler handler = - new ConnectivityMethodChannelHandler(pluginBinding.getApplicationContext()); + new ConnectivityMethodChannelHandler(binding.getApplicationContext()); channel.setMethodCallHandler(handler); eventChannel.setStreamHandler(handler); } @Override - public void onDetachedFromEngine(FlutterPluginBinding binding) { - this.pluginBinding = null; - } + public void onDetachedFromEngine(FlutterPluginBinding binding){} } 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 index c1d97446716e..1183cc2e6b0a 100644 --- 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 @@ -15,6 +15,9 @@ import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; +/** + * Handles MethodChannel and EventChannel for the plugin. + */ public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler, EventChannel.StreamHandler { @@ -22,6 +25,11 @@ public class ConnectivityMethodChannelHandler private ConnectivityManager manager; private BroadcastReceiver receiver; + /** + * Construct the ConnectivityMethodChannelHandler + * + * @param context The Context used in the handler. It must not be null. + */ public ConnectivityMethodChannelHandler(Context context) { assert (context != null); this.context = context; From 60dde9ec37b2e7f17806a00f9a653a70c32206d7 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 4 Oct 2019 12:54:36 -0700 Subject: [PATCH 09/24] refacotring and testing --- .../connectivity/ConnectivityPlugin.java | 12 +- .../BroadcastReceiverRegistrar.java | 33 +++++ ...onnectivityBroadcastReceiverRegistrar.java | 49 +++++++ .../connectivity/ConnectivityChecker.java | 73 +++++++++++ .../ConnectivityEventChannelHandler.java | 34 +++++ .../ConnectivityMethodChannelHandler.java | 122 ++++-------------- .../connectivity/ConnectivityPlugin.java | 26 +++- .../ConnectivityMethodChannelHandlerTest.java | 20 +++ .../example/android/app/build.gradle | 2 + .../android/app/src/main/AndroidManifest.xml | 4 +- 10 files changed, 264 insertions(+), 111 deletions(-) create mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java create mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiverRegistrar.java create mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityChecker.java create mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java create mode 100644 packages/connectivity/android/src/test/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandlerTest.java diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index bed3656d2544..3df2c6bbbeae 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -7,6 +7,7 @@ import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.connectivity.ConnectivityChecker; import io.flutter.plugins.connectivity.ConnectivityMethodChannelHandler; /** @@ -26,12 +27,11 @@ public void onAttachedToEngine(FlutterPluginBinding binding) { new EventChannel( binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); - - ConnectivityMethodChannelHandler handler = - new ConnectivityMethodChannelHandler(binding.getApplicationContext()); - - channel.setMethodCallHandler(handler); - eventChannel.setStreamHandler(handler); +// ConnectivityMethodChannelHandler handler = +// new ConnectivityMethodChannelHandler(binding.getApplicationContext()); +// +// channel.setMethodCallHandler(handler); +// eventChannel.setStreamHandler(handler); } @Override diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java new file mode 100644 index 000000000000..ad538d9af5ef --- /dev/null +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java @@ -0,0 +1,33 @@ +package io.flutter.plugins.connectivity; + +import android.content.BroadcastReceiver; +import androidx.annotation.NonNull; +import io.flutter.plugin.common.EventChannel; + +/** + * Responsible for constructing a BroadcastReceiver as well as registering and unregistering it. + */ +public interface BroadcastReceiverRegistrar { + + /** + * Triggered when it is ready for the BroadcastReceiver to be registered. Register the receiver in this method body. + * + * @param receiver the receiver is going to be registered. + */ + void readyToRegisterBroadcastReceiver (@NonNull BroadcastReceiver receiver); + + /** + * Triggered when it is ready for the BroadcastReceiver to be unregistered. Unregister the receiver in this method body. + * + * @param receiver the receiver is going to be unregistered. + */ + void readyToUnregisterBroadcastReceiver (@NonNull BroadcastReceiver receiver); + + /** + * Creates a Broadcast receiver. + * + * @param events The events helps the broadcast receiver to dump information to the event channel. + * @return A BroadcastReceiver. + */ + @NonNull BroadcastReceiver createReceiver(@NonNull final EventChannel.EventSink events); +} diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiverRegistrar.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiverRegistrar.java new file mode 100644 index 000000000000..cf27b28392d8 --- /dev/null +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiverRegistrar.java @@ -0,0 +1,49 @@ +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 BroadcastReceiverRegistrar used for the plugin. + */ +public class ConnectivityBroadcastReceiverRegistrar implements BroadcastReceiverRegistrar { + private Context context; + private ConnectivityChecker checker; + + /** + * + * @param context used to register and unregister the broadcastReceiver. + * @param checker used to check connectivity information. + */ + ConnectivityBroadcastReceiverRegistrar(@NonNull Context context, @NonNull ConnectivityChecker checker) { + this.context = context; + this.checker = checker; + } + + @Override + public void readyToRegisterBroadcastReceiver(BroadcastReceiver receiver) { + context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + } + + @Override + public void readyToUnregisterBroadcastReceiver(BroadcastReceiver receiver) { + context.unregisterReceiver(receiver); + } + + @Override + public BroadcastReceiver createReceiver(final EventChannel.EventSink events) { + return new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + events.success(checker.checkNetworkType()); + } + }; + } +} diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityChecker.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityChecker.java new file mode 100644 index 000000000000..b021c2209718 --- /dev/null +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityChecker.java @@ -0,0 +1,73 @@ +package io.flutter.plugins.connectivity; + +import android.net.ConnectivityManager; +import android.net.Network; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; +import android.os.Build; + +/** + * Responsible for checking connectivity information. + */ +public class ConnectivityChecker { + private ConnectivityManager manager; + + /** + * Constructs a ConnectivityChecker + * + * @param manager used o check connectivity information. + */ + ConnectivityChecker(ConnectivityManager manager) { + this.manager = manager; + } + + /** + * Get the network type. + * + * @return a String that is one of the following values: "none", "wifi", "mobile". + */ + String checkNetworkType() { + return getNetworkType(); + } + + private String getNetworkType() { + 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(); + } + + @SuppressWarnings("deprecation") + private String getNetworkTypeLegacy() { + // 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"; + } + } +} diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java new file mode 100644 index 000000000000..d154b5d58d75 --- /dev/null +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java @@ -0,0 +1,34 @@ +package io.flutter.plugins.connectivity; + +import android.content.BroadcastReceiver; +import androidx.annotation.NonNull; + +import io.flutter.plugin.common.EventChannel; + +/** + * Handles the event channel for the plugin. + */ +public class ConnectivityEventChannelHandler implements EventChannel.StreamHandler { + private final BroadcastReceiverRegistrar broadcastReceiverRegistrar; + private BroadcastReceiver broadcastReceiver; + + /** Constructs a ConnectivityEventChannelHandler + * + * @param broadcastReceiverRegistrar handling registration of the broadcastReceiver. + */ + public ConnectivityEventChannelHandler( @NonNull BroadcastReceiverRegistrar broadcastReceiverRegistrar) { + this.broadcastReceiverRegistrar = broadcastReceiverRegistrar; + } + + @Override + public void onListen(Object arguments, EventChannel.EventSink events) { + broadcastReceiver = broadcastReceiverRegistrar.createReceiver(events); + broadcastReceiverRegistrar.readyToRegisterBroadcastReceiver(broadcastReceiver); + } + + @Override + public void onCancel(Object arguments) { + broadcastReceiverRegistrar.readyToUnregisterBroadcastReceiver(broadcastReceiver); + broadcastReceiver = null; + } +} \ No newline at end of file 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 index 1183cc2e6b0a..a1dc633d3731 100644 --- 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 @@ -1,17 +1,11 @@ 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 android.os.Build; -import io.flutter.plugin.common.EventChannel; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -19,50 +13,37 @@ * Handles MethodChannel and EventChannel for the plugin. */ public class ConnectivityMethodChannelHandler - implements MethodChannel.MethodCallHandler, EventChannel.StreamHandler { + implements MethodChannel.MethodCallHandler { - private final Context context; - private ConnectivityManager manager; - private BroadcastReceiver receiver; + private WifiManager wifiManager; + private ConnectivityChecker checker; /** * Construct the ConnectivityMethodChannelHandler * - * @param context The Context used in the handler. It must not be null. + * @param checker The ConnectivityChecker used to check connectivity information. + * @param wifiManager The wifiManager used to access wifi information. */ - public ConnectivityMethodChannelHandler(Context context) { - assert (context != null); - this.context = context; - this.manager = - (ConnectivityManager) - context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); - } - - @Override - public void onListen(Object arguments, EventChannel.EventSink events) { - context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } - - @Override - public void onCancel(Object arguments) { - context.unregisterReceiver(receiver); - receiver = null; + public ConnectivityMethodChannelHandler(@NonNull ConnectivityChecker checker, @Nullable WifiManager wifiManager) { + assert (checker != null); + this.wifiManager = wifiManager; + this.checker = checker; } @Override public void onMethodCall(MethodCall call, MethodChannel.Result result) { switch (call.method) { case "check": - handleCheck(call, result); + handleCheck(result); break; case "wifiName": - handleWifiName(call, result); + handleWifiName(result); break; case "wifiBSSID": - handleBSSID(call, result); + handleBSSID(result); break; case "wifiIPAddress": - handleWifiIPAddress(call, result); + handleWifiIPAddress(result); break; default: result.notImplemented(); @@ -70,71 +51,15 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { } } - 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); - } - - @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"; - } - } - - private BroadcastReceiver createReceiver(final EventChannel.EventSink events) { - return new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - events.success(checkNetworkType()); - } - }; - } - - private String checkNetworkType() { - return getNetworkType(manager); - } - - private void handleCheck(MethodCall call, final MethodChannel.Result result) { - result.success(checkNetworkType()); + private void handleCheck(final MethodChannel.Result result) { + result.success(checker.checkNetworkType()); } private WifiInfo getWifiInfo() { - WifiManager wifiManager = - (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); return wifiManager == null ? null : wifiManager.getConnectionInfo(); } - private void handleWifiName(MethodCall call, final MethodChannel.Result result) { + private void handleWifiName(final MethodChannel.Result result) { WifiInfo wifiInfo = getWifiInfo(); String ssid = null; if (wifiInfo != null) ssid = wifiInfo.getSSID(); @@ -142,17 +67,14 @@ private void handleWifiName(MethodCall call, final MethodChannel.Result result) result.success(ssid); } - private void handleBSSID(MethodCall call, MethodChannel.Result result) { + private void handleBSSID( MethodChannel.Result result) { WifiInfo wifiInfo = getWifiInfo(); String bssid = null; if (wifiInfo != null) bssid = wifiInfo.getBSSID(); result.success(bssid); } - private void handleWifiIPAddress(MethodCall call, final MethodChannel.Result result) { - WifiManager wifiManager = - (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); - + private void handleWifiIPAddress(final MethodChannel.Result result) { WifiInfo wifiInfo = null; if (wifiManager != null) wifiInfo = wifiManager.getConnectionInfo(); 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 aaf9f6a71877..66c21fb1549a 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,6 +4,15 @@ 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.wifi.WifiManager; + +import androidx.annotation.NonNull; + import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry.Registrar; @@ -18,9 +27,20 @@ public static void registerWith(Registrar registrar) { final EventChannel eventChannel = new EventChannel(registrar.messenger(), "plugins.flutter.io/connectivity_status"); + ConnectivityManager connectivityManager = + (ConnectivityManager) + registrar.context().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); + WifiManager wifiManager = + (WifiManager)registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + + ConnectivityChecker checker = new ConnectivityChecker(connectivityManager); + ConnectivityMethodChannelHandler methodChannelHandler = - new ConnectivityMethodChannelHandler(registrar.context()); + new ConnectivityMethodChannelHandler(checker, wifiManager); channel.setMethodCallHandler(methodChannelHandler); - eventChannel.setStreamHandler(methodChannelHandler); + + ConnectivityBroadcastReceiverRegistrar receiverRegistrar = new ConnectivityBroadcastReceiverRegistrar(registrar.context(), checker); + ConnectivityEventChannelHandler eventChannelHandler = new ConnectivityEventChannelHandler(receiverRegistrar); + eventChannel.setStreamHandler(eventChannelHandler); } -} +} \ No newline at end of file diff --git a/packages/connectivity/android/src/test/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandlerTest.java b/packages/connectivity/android/src/test/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandlerTest.java new file mode 100644 index 000000000000..d2f434adada5 --- /dev/null +++ b/packages/connectivity/android/src/test/java/io/flutter/plugins/connectivity/ConnectivityMethodChannelHandlerTest.java @@ -0,0 +1,20 @@ +package io.flutter.plugins.connectivity; + + +import com.google.common.truth.Truth.assertThat; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +public class ConnectivityMethodChannelHandlerTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void onMethodCall() { + assertThai(false); + } +} \ No newline at end of file diff --git a/packages/connectivity/example/android/app/build.gradle b/packages/connectivity/example/android/app/build.gradle index 5d1f138bfe1a..307879dabe4a 100644 --- a/packages/connectivity/example/android/app/build.gradle +++ b/packages/connectivity/example/android/app/build.gradle @@ -53,6 +53,8 @@ flutter { dependencies { testImplementation 'junit:junit:4.12' + testImplementation 'org.mockito:mockito-core:2.17.0' + testImplementation 'org.json:json:20180813' androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } diff --git a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml index 85b9a423ec27..52ed49528365 100644 --- a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml +++ b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml @@ -4,14 +4,14 @@ - - Date: Fri, 4 Oct 2019 13:00:35 -0700 Subject: [PATCH 10/24] add nonnull notation --- .../connectivity/ConnectivityMethodChannelHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 index 1183cc2e6b0a..809395414942 100644 --- 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 @@ -11,6 +11,9 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; + +import androidx.annotation.NonNull; + import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -30,7 +33,7 @@ public class ConnectivityMethodChannelHandler * * @param context The Context used in the handler. It must not be null. */ - public ConnectivityMethodChannelHandler(Context context) { + public ConnectivityMethodChannelHandler(@NonNull Context context) { assert (context != null); this.context = context; this.manager = From 13c60dd3dc757abac9fb104131b5ca838b4098c2 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 4 Oct 2019 13:11:05 -0700 Subject: [PATCH 11/24] remove empty line --- .../dev/flutter/plugins/connectivity/ConnectivityPlugin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index bed3656d2544..49b4ab1f1a9c 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -14,7 +14,6 @@ * *

Instantiate this in an add to app scenario to gracefully handle activity and context changes. */ - public class ConnectivityPlugin implements FlutterPlugin { @Override From 1516b810f715f2837e61f1713d1ba2350265dc20 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 4 Oct 2019 13:11:21 -0700 Subject: [PATCH 12/24] formatting --- .../flutter/plugins/connectivity/ConnectivityPlugin.java | 7 +++---- .../connectivity/ConnectivityMethodChannelHandler.java | 6 +----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index 49b4ab1f1a9c..a4c8162e3950 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -20,11 +20,10 @@ public class ConnectivityPlugin implements FlutterPlugin { public void onAttachedToEngine(FlutterPluginBinding binding) { final MethodChannel channel = new MethodChannel( - binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); final EventChannel eventChannel = new EventChannel( - binding.getFlutterEngine().getDartExecutor(), - "plugins.flutter.io/connectivity_status"); + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); ConnectivityMethodChannelHandler handler = new ConnectivityMethodChannelHandler(binding.getApplicationContext()); @@ -34,5 +33,5 @@ public void onAttachedToEngine(FlutterPluginBinding binding) { } @Override - public void onDetachedFromEngine(FlutterPluginBinding binding){} + public void onDetachedFromEngine(FlutterPluginBinding binding) {} } 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 index 809395414942..3e933f135342 100644 --- 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 @@ -11,16 +11,12 @@ import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; - import androidx.annotation.NonNull; - import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -/** - * Handles MethodChannel and EventChannel for the plugin. - */ +/** Handles MethodChannel and EventChannel for the plugin. */ public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler, EventChannel.StreamHandler { From a212fc9f3fc01c1c7bf2a201ab0c69c3c5c84fa2 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 4 Oct 2019 17:23:26 -0700 Subject: [PATCH 13/24] some javadoc rewrites and update broadcast receiver related structure --- .../connectivity/ConnectivityPlugin.java | 21 ++++---- .../BroadcastReceiverRegistrar.java | 34 ------------- .../BroadcastReceiverRegistrarImpl.java | 45 ----------------- .../plugins/connectivity/Connectivity.java | 9 +--- .../ConnectivityBroadcastReceiver.java | 48 +++++++++++++++++++ .../ConnectivityEventChannelHandler.java | 33 ------------- .../ConnectivityMethodChannelHandler.java | 11 +++-- .../connectivity/ConnectivityPlugin.java | 10 ++-- 8 files changed, 71 insertions(+), 140 deletions(-) delete mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java delete mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrarImpl.java create mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java delete mode 100644 packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index 29ab0546c19a..e9f4fdaec7bb 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -7,18 +7,21 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; +import io.flutter.embedding.engine.FlutterEngine; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugins.connectivity.BroadcastReceiverRegistrarImpl; import io.flutter.plugins.connectivity.Connectivity; -import io.flutter.plugins.connectivity.ConnectivityEventChannelHandler; +import io.flutter.plugins.connectivity.ConnectivityBroadcastReceiver; import io.flutter.plugins.connectivity.ConnectivityMethodChannelHandler; /** - * Plugin implementation that uses the new {@code io.flutter.embedding} package. + * Entry point of the plugin. * - *

Instantiate this in an add to app scenario to gracefully handle activity and context changes. + *

The ConnectivityPlugin links up dependencies and set up the method channel and the event + * channel during {@link #onAttachedToEngine(FlutterPluginBinding)}. Add an instance of this plugin + * class to the {@link FlutterEngine} to register the plugin. See also {@link FlutterPlugin} for + * more details. */ public class ConnectivityPlugin implements FlutterPlugin { @@ -47,13 +50,11 @@ public void onAttachedToEngine(FlutterPluginBinding binding) { ConnectivityMethodChannelHandler methodChannelHandler = new ConnectivityMethodChannelHandler(connectivity); - channel.setMethodCallHandler(methodChannelHandler); + ConnectivityBroadcastReceiver receiver = + new ConnectivityBroadcastReceiver(binding.getApplicationContext(), connectivity); - BroadcastReceiverRegistrarImpl receiverRegistrar = - new BroadcastReceiverRegistrarImpl(binding.getApplicationContext(), connectivity); - ConnectivityEventChannelHandler eventChannelHandler = - new ConnectivityEventChannelHandler(receiverRegistrar); - eventChannel.setStreamHandler(eventChannelHandler); + channel.setMethodCallHandler(methodChannelHandler); + eventChannel.setStreamHandler(receiver); } @Override diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java deleted file mode 100644 index 102940a3d67b..000000000000 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrar.java +++ /dev/null @@ -1,34 +0,0 @@ -package io.flutter.plugins.connectivity; - -import android.content.BroadcastReceiver; -import androidx.annotation.NonNull; -import io.flutter.plugin.common.EventChannel; - -/** Responsible for constructing a BroadcastReceiver as well as registering and unregistering it. */ -public interface BroadcastReceiverRegistrar { - - /** - * Triggered when it is ready for the BroadcastReceiver to be registered. Register the receiver in - * this method body. - * - * @param receiver the receiver is going to be registered. - */ - void readyToRegisterBroadcastReceiver(@NonNull BroadcastReceiver receiver); - - /** - * Triggered when it is ready for the BroadcastReceiver to be unregistered. Unregister the - * receiver in this method body. - * - * @param receiver the receiver is going to be unregistered. - */ - void readyToUnregisterBroadcastReceiver(@NonNull BroadcastReceiver receiver); - - /** - * Creates a Broadcast receiver. - * - * @param events The events helps the broadcast receiver to dump information to the event channel. - * @return A BroadcastReceiver. - */ - @NonNull - BroadcastReceiver createReceiver(@NonNull final EventChannel.EventSink events); -} diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrarImpl.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrarImpl.java deleted file mode 100644 index f500bac19778..000000000000 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/BroadcastReceiverRegistrarImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -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 BroadcastReceiverRegistrar used for the plugin. */ -public class BroadcastReceiverRegistrarImpl implements BroadcastReceiverRegistrar { - private Context context; - private Connectivity connectivity; - - /** - * @param context used to register and unregister the broadcastReceiver. - * @param connectivity used to check connectivity information. - */ - public BroadcastReceiverRegistrarImpl( - @NonNull Context context, @NonNull Connectivity connectivity) { - this.context = context; - this.connectivity = connectivity; - } - - @Override - public void readyToRegisterBroadcastReceiver(BroadcastReceiver receiver) { - context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - } - - @Override - public void readyToUnregisterBroadcastReceiver(BroadcastReceiver receiver) { - context.unregisterReceiver(receiver); - } - - @Override - public BroadcastReceiver createReceiver(final EventChannel.EventSink events) { - return new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - events.success(connectivity.checkNetworkType()); - } - }; - } -} 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 index fc9cb364ffaa..51272a5f9aec 100644 --- 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 @@ -10,18 +10,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; - -/** Responsible for checking connectivity information. */ +/** Reports connectivity related information such as connectivity type and wifi information. */ public class Connectivity { private ConnectivityManager connectivityManager; private WifiManager wifiManager; - /** - * Constructs a ConnectivityChecker - * - * @param connectivityManager used to check connectivity information. - * @param wifiManager used to check wifi information. - */ public Connectivity(ConnectivityManager connectivityManager, WifiManager wifiManager) { this.connectivityManager = connectivityManager; this.wifiManager = wifiManager; 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 new file mode 100644 index 000000000000..5c7c8832cbfd --- /dev/null +++ b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java @@ -0,0 +1,48 @@ +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. + */ +public class ConnectivityBroadcastReceiver extends BroadcastReceiver + implements EventChannel.StreamHandler { + private Context context; + private Connectivity connectivity; + private EventChannel.EventSink events; + + public 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.checkNetworkType()); + } + } +} diff --git a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java b/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java deleted file mode 100644 index d3ce21f6c8c0..000000000000 --- a/packages/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityEventChannelHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.flutter.plugins.connectivity; - -import android.content.BroadcastReceiver; -import androidx.annotation.NonNull; -import io.flutter.plugin.common.EventChannel; - -/** Handles the event channel for the plugin. */ -public class ConnectivityEventChannelHandler implements EventChannel.StreamHandler { - private final BroadcastReceiverRegistrar broadcastReceiverRegistrar; - private BroadcastReceiver broadcastReceiver; - - /** - * Constructs a ConnectivityEventChannelHandler - * - * @param broadcastReceiverRegistrar handling registration of the broadcastReceiver. - */ - public ConnectivityEventChannelHandler( - @NonNull BroadcastReceiverRegistrar broadcastReceiverRegistrar) { - this.broadcastReceiverRegistrar = broadcastReceiverRegistrar; - } - - @Override - public void onListen(Object arguments, EventChannel.EventSink events) { - broadcastReceiver = broadcastReceiverRegistrar.createReceiver(events); - broadcastReceiverRegistrar.readyToRegisterBroadcastReceiver(broadcastReceiver); - } - - @Override - public void onCancel(Object arguments) { - broadcastReceiverRegistrar.readyToUnregisterBroadcastReceiver(broadcastReceiver); - broadcastReceiver = null; - } -} 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 index d2651c6960a2..95dc33ef8d05 100644 --- 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 @@ -4,15 +4,18 @@ import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -/** Handles MethodChannel for the plugin. */ +/** + * The handler receives method channel calls from the UIThread, gets the related information from + * a @{@link Connectivity}, and then send the result back to the UIThread through the method + * channel. + */ public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler { private Connectivity connectivity; /** - * Construct the ConnectivityMethodChannelHandler - * - * @param connectivity The {@link Connectivity} used to check connectivity information. + * Construct the ConnectivityMethodChannelHandler with a {@code connectivity}. The {@code + * connectivity} must not be null. */ public ConnectivityMethodChannelHandler(@NonNull Connectivity connectivity) { assert (connectivity != null); 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 97219aea6758..da2c9e152e2d 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 @@ -35,12 +35,10 @@ public static void registerWith(Registrar registrar) { ConnectivityMethodChannelHandler methodChannelHandler = new ConnectivityMethodChannelHandler(connectivity); - channel.setMethodCallHandler(methodChannelHandler); + ConnectivityBroadcastReceiver receiver = + new ConnectivityBroadcastReceiver(registrar.context(), connectivity); - BroadcastReceiverRegistrarImpl receiverRegistrar = - new BroadcastReceiverRegistrarImpl(registrar.context(), connectivity); - ConnectivityEventChannelHandler eventChannelHandler = - new ConnectivityEventChannelHandler(receiverRegistrar); - eventChannel.setStreamHandler(eventChannelHandler); + channel.setMethodCallHandler(methodChannelHandler); + eventChannel.setStreamHandler(receiver); } } From dfcd8c9fafe4092be044eb99363a39e8bee5267b Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 4 Oct 2019 17:30:24 -0700 Subject: [PATCH 14/24] more javadoc fixes --- .../plugins/connectivity/ConnectivityPlugin.java | 10 ++++++---- .../connectivity/ConnectivityMethodChannelHandler.java | 5 ++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index e9f4fdaec7bb..15bd5ca156a9 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -18,10 +18,12 @@ /** * Entry point of the plugin. * - *

The ConnectivityPlugin links up dependencies and set up the method channel and the event - * channel during {@link #onAttachedToEngine(FlutterPluginBinding)}. Add an instance of this plugin - * class to the {@link FlutterEngine} to register the plugin. See also {@link FlutterPlugin} for - * more details. + *

The ConnectivityPlugin links up dependencies and set up the {@link io.flutter.plugin.common.MethodChannel.MethodCallHandler} and the + * {@link io.flutter.plugin.common.EventChannel.StreamHandler} during {@link #onAttachedToEngine(FlutterPluginBinding)}. + * To register the plugin, add an instance of this class to the {@link FlutterEngine}. + *

+ * + * See also {@link FlutterPlugin} for more details. */ public class ConnectivityPlugin implements FlutterPlugin { 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 index 95dc33ef8d05..9607976db74c 100644 --- 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 @@ -5,9 +5,8 @@ import io.flutter.plugin.common.MethodChannel; /** - * The handler receives method channel calls from the UIThread, gets the related information from - * a @{@link Connectivity}, and then send the result back to the UIThread through the method - * channel. + * 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}. */ public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler { From 98c2d094091b3f5718446b03e9ed810426284a90 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 11:54:55 -0700 Subject: [PATCH 15/24] add lisence header --- .../plugins/connectivity/ConnectivityPlugin.java | 11 +++++------ .../io/flutter/plugins/connectivity/Connectivity.java | 4 ++++ .../connectivity/ConnectivityBroadcastReceiver.java | 4 ++++ .../ConnectivityMethodChannelHandler.java | 7 ++++++- .../plugins/connectivity_exmaple/MainActivity.java | 4 ++++ 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java index 15bd5ca156a9..2602fe7fda99 100644 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -18,12 +18,11 @@ /** * Entry point of the plugin. * - *

The ConnectivityPlugin links up dependencies and set up the {@link io.flutter.plugin.common.MethodChannel.MethodCallHandler} and the - * {@link io.flutter.plugin.common.EventChannel.StreamHandler} during {@link #onAttachedToEngine(FlutterPluginBinding)}. - * To register the plugin, add an instance of this class to the {@link FlutterEngine}. - *

- * - * See also {@link FlutterPlugin} for more details. + *

The ConnectivityPlugin links up dependencies and set up the {@link + * io.flutter.plugin.common.MethodChannel.MethodCallHandler} and the {@link + * io.flutter.plugin.common.EventChannel.StreamHandler} during {@link + * #onAttachedToEngine(FlutterPluginBinding)}. To register the plugin, add an instance of this class + * to the {@link FlutterEngine}. See also {@link FlutterPlugin} for more details. */ public class ConnectivityPlugin implements FlutterPlugin { 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 index 51272a5f9aec..2a9e5f8a6d40 100644 --- 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 @@ -1,3 +1,7 @@ +// 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; 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 index 5c7c8832cbfd..6d7eaed58785 100644 --- 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 @@ -1,3 +1,7 @@ +// 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; 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 index 9607976db74c..768cf7b91e4c 100644 --- 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 @@ -1,3 +1,7 @@ +// 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; @@ -6,7 +10,8 @@ /** * 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}. + * a @{@link Connectivity}, and then send the result back to the UIThread through the {@link + * MethodChannel.Result}. */ public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler { diff --git a/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java index 30c79e562ae1..94cc60f417de 100644 --- a/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java +++ b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java @@ -1,3 +1,7 @@ +// 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 dev.flutter.plugins.connectivity_exmaple; import dev.flutter.plugins.connectivity.ConnectivityPlugin; From a58e3051b628c2af3d11750d0dc8c96da657a18b Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 13:26:31 -0700 Subject: [PATCH 16/24] merge new and old plugins --- .../connectivity/ConnectivityPlugin.java | 63 ------------------- .../connectivity/ConnectivityPlugin.java | 38 ++++++++++- .../connectivity_exmaple/MainActivity.java | 2 +- 3 files changed, 38 insertions(+), 65 deletions(-) delete mode 100644 packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java diff --git a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java deleted file mode 100644 index 2602fe7fda99..000000000000 --- a/packages/connectivity/android/src/main/java/dev/flutter/plugins/connectivity/ConnectivityPlugin.java +++ /dev/null @@ -1,63 +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 dev.flutter.plugins.connectivity; - -import android.content.Context; -import android.net.ConnectivityManager; -import android.net.wifi.WifiManager; -import io.flutter.embedding.engine.FlutterEngine; -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.EventChannel; -import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugins.connectivity.Connectivity; -import io.flutter.plugins.connectivity.ConnectivityBroadcastReceiver; -import io.flutter.plugins.connectivity.ConnectivityMethodChannelHandler; - -/** - * Entry point of the plugin. - * - *

The ConnectivityPlugin links up dependencies and set up the {@link - * io.flutter.plugin.common.MethodChannel.MethodCallHandler} and the {@link - * io.flutter.plugin.common.EventChannel.StreamHandler} during {@link - * #onAttachedToEngine(FlutterPluginBinding)}. To register the plugin, add an instance of this class - * to the {@link FlutterEngine}. See also {@link FlutterPlugin} for more details. - */ -public class ConnectivityPlugin implements FlutterPlugin { - - @Override - public void onAttachedToEngine(FlutterPluginBinding binding) { - final MethodChannel channel = - new MethodChannel( - binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); - final EventChannel eventChannel = - new EventChannel( - binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); - ConnectivityManager connectivityManager = - (ConnectivityManager) - binding - .getApplicationContext() - .getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - WifiManager wifiManager = - (WifiManager) - binding - .getApplicationContext() - .getApplicationContext() - .getSystemService(Context.WIFI_SERVICE); - - Connectivity connectivity = new Connectivity(connectivityManager, wifiManager); - - ConnectivityMethodChannelHandler methodChannelHandler = - new ConnectivityMethodChannelHandler(connectivity); - ConnectivityBroadcastReceiver receiver = - new ConnectivityBroadcastReceiver(binding.getApplicationContext(), connectivity); - - channel.setMethodCallHandler(methodChannelHandler); - eventChannel.setStreamHandler(receiver); - } - - @Override - public void onDetachedFromEngine(FlutterPluginBinding binding) {} -} 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 da2c9e152e2d..c9d32d50ab49 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 @@ -7,12 +7,13 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; +import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry.Registrar; /** ConnectivityPlugin */ -public class ConnectivityPlugin { +public class ConnectivityPlugin implements FlutterPlugin { /** Plugin registration. */ public static void registerWith(Registrar registrar) { @@ -41,4 +42,39 @@ public static void registerWith(Registrar registrar) { channel.setMethodCallHandler(methodChannelHandler); eventChannel.setStreamHandler(receiver); } + + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + final MethodChannel channel = + new MethodChannel( + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); + final EventChannel eventChannel = + new EventChannel( + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); + ConnectivityManager connectivityManager = + (ConnectivityManager) + binding + .getApplicationContext() + .getApplicationContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); + WifiManager wifiManager = + (WifiManager) + binding + .getApplicationContext() + .getApplicationContext() + .getSystemService(Context.WIFI_SERVICE); + + Connectivity connectivity = new Connectivity(connectivityManager, wifiManager); + + ConnectivityMethodChannelHandler methodChannelHandler = + new ConnectivityMethodChannelHandler(connectivity); + ConnectivityBroadcastReceiver receiver = + new ConnectivityBroadcastReceiver(binding.getApplicationContext(), connectivity); + + channel.setMethodCallHandler(methodChannelHandler); + eventChannel.setStreamHandler(receiver); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) {} } diff --git a/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java index 94cc60f417de..89d0f4652c8b 100644 --- a/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java +++ b/packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivity_exmaple/MainActivity.java @@ -4,9 +4,9 @@ package dev.flutter.plugins.connectivity_exmaple; -import dev.flutter.plugins.connectivity.ConnectivityPlugin; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.connectivity.ConnectivityPlugin; public class MainActivity extends FlutterActivity { From ba9a2fb5e13a660b2cb412dabafdab645efa42b9 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 15:26:43 -0700 Subject: [PATCH 17/24] review fixes --- .../plugins/connectivity/Connectivity.java | 38 +++++++++---------- .../ConnectivityBroadcastReceiver.java | 2 +- .../ConnectivityMethodChannelHandler.java | 2 +- .../android/app/src/main/AndroidManifest.xml | 2 +- .../MainActivity.java | 2 +- 5 files changed, 21 insertions(+), 25 deletions(-) rename packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/{connectivity_exmaple => connectivityexmaple}/MainActivity.java (92%) 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 index 2a9e5f8a6d40..d0fb727ae97f 100644 --- 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 @@ -25,8 +25,23 @@ public Connectivity(ConnectivityManager connectivityManager, WifiManager wifiMan } @NonNull - String checkNetworkType() { - return getNetworkType(); + 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 @@ -71,25 +86,6 @@ private WifiInfo getWifiInfo() { return wifiManager == null ? null : wifiManager.getConnectionInfo(); } - private 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(); - } - @SuppressWarnings("deprecation") private String getNetworkTypeLegacy() { // handle type for Android versions less than Android 9 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 index 6d7eaed58785..29ae80928634 100644 --- 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 @@ -46,7 +46,7 @@ public void onCancel(Object arguments) { @Override public void onReceive(Context context, Intent intent) { if (events != null) { - events.success(connectivity.checkNetworkType()); + 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 index 768cf7b91e4c..9340f8e6e54d 100644 --- 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 @@ -30,7 +30,7 @@ public ConnectivityMethodChannelHandler(@NonNull Connectivity connectivity) { public void onMethodCall(MethodCall call, MethodChannel.Result result) { switch (call.method) { case "check": - result.success(connectivity.checkNetworkType()); + result.success(connectivity.getNetworkType()); break; case "wifiName": result.success(connectivity.getWifiName()); diff --git a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml index 85b9a423ec27..854c99d27520 100644 --- a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml +++ b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> - Date: Mon, 7 Oct 2019 16:42:32 -0700 Subject: [PATCH 18/24] refactor --- .../connectivity/ConnectivityPlugin.java | 67 ++++++------------- 1 file changed, 22 insertions(+), 45 deletions(-) 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 c9d32d50ab49..80d669dde92f 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 @@ -8,6 +8,7 @@ import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.EventChannel; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry.Registrar; @@ -15,66 +16,42 @@ /** ConnectivityPlugin */ public class ConnectivityPlugin implements FlutterPlugin { + private MethodChannel methodChannel; + private EventChannel eventChannel; + /** 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"); - - ConnectivityManager connectivityManager = - (ConnectivityManager) - registrar - .context() - .getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - WifiManager wifiManager = - (WifiManager) - registrar.context().getApplicationContext().getSystemService(Context.WIFI_SERVICE); - - Connectivity connectivity = new Connectivity(connectivityManager, wifiManager); - - ConnectivityMethodChannelHandler methodChannelHandler = - new ConnectivityMethodChannelHandler(connectivity); - ConnectivityBroadcastReceiver receiver = - new ConnectivityBroadcastReceiver(registrar.context(), connectivity); - channel.setMethodCallHandler(methodChannelHandler); - eventChannel.setStreamHandler(receiver); + ConnectivityPlugin plugin = new ConnectivityPlugin(); + plugin.setupChannels(registrar.messenger(), registrar.context()); } @Override public void onAttachedToEngine(FlutterPluginBinding binding) { - final MethodChannel channel = - new MethodChannel( - binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity"); - final EventChannel eventChannel = - new EventChannel( - binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/connectivity_status"); + setupChannels(binding.getFlutterEngine().getDartExecutor(), binding.getApplicationContext()); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + methodChannel.setMethodCallHandler(null); + eventChannel.setStreamHandler(null); + } + + 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) - binding - .getApplicationContext() - .getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - WifiManager wifiManager = - (WifiManager) - binding - .getApplicationContext() - .getApplicationContext() - .getSystemService(Context.WIFI_SERVICE); + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); Connectivity connectivity = new Connectivity(connectivityManager, wifiManager); ConnectivityMethodChannelHandler methodChannelHandler = new ConnectivityMethodChannelHandler(connectivity); ConnectivityBroadcastReceiver receiver = - new ConnectivityBroadcastReceiver(binding.getApplicationContext(), connectivity); + new ConnectivityBroadcastReceiver(context, connectivity); - channel.setMethodCallHandler(methodChannelHandler); + methodChannel.setMethodCallHandler(methodChannelHandler); eventChannel.setStreamHandler(receiver); } - - @Override - public void onDetachedFromEngine(FlutterPluginBinding binding) {} } From ba0bb22364cd34781bc763a9279fc9526a37c032 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 8 Oct 2019 12:50:32 -0700 Subject: [PATCH 19/24] rename activities --- .../android/app/src/main/AndroidManifest.xml | 5 +++-- .../connectivityexmaple/MainActivity.java | 18 ------------------ .../EmbeddingV1Activity.java | 17 +++++++++++++++++ .../connectivity_example/MainActivity.java | 15 ++++++++------- 4 files changed, 28 insertions(+), 27 deletions(-) delete mode 100644 packages/connectivity/example/android/app/src/main/java/dev/flutter/plugins/connectivityexmaple/MainActivity.java create mode 100644 packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/EmbeddingV1Activity.java diff --git a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml index 854c99d27520..3bf2ca03bc33 100644 --- a/packages/connectivity/example/android/app/src/main/AndroidManifest.xml +++ b/packages/connectivity/example/android/app/src/main/AndroidManifest.xml @@ -4,14 +4,15 @@ - - Date: Tue, 8 Oct 2019 15:25:14 -0700 Subject: [PATCH 20/24] non public --- .../java/io/flutter/plugins/connectivity/Connectivity.java | 4 ++-- .../plugins/connectivity/ConnectivityBroadcastReceiver.java | 5 ++--- .../connectivity/ConnectivityMethodChannelHandler.java | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) 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 index d0fb727ae97f..605acdb73948 100644 --- 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 @@ -15,11 +15,11 @@ import androidx.annotation.Nullable; /** Reports connectivity related information such as connectivity type and wifi information. */ -public class Connectivity { +class Connectivity { private ConnectivityManager connectivityManager; private WifiManager wifiManager; - public Connectivity(ConnectivityManager connectivityManager, WifiManager wifiManager) { + Connectivity(ConnectivityManager connectivityManager, WifiManager wifiManager) { this.connectivityManager = connectivityManager; this.wifiManager = wifiManager; } 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 index 29ae80928634..d046eceb0fa6 100644 --- 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 @@ -20,14 +20,13 @@ * io.flutter.plugin.common.EventChannel#setStreamHandler(io.flutter.plugin.common.EventChannel.StreamHandler)} * to set up the receiver. */ -public class ConnectivityBroadcastReceiver extends BroadcastReceiver +class ConnectivityBroadcastReceiver extends BroadcastReceiver implements EventChannel.StreamHandler { private Context context; private Connectivity connectivity; private EventChannel.EventSink events; - public ConnectivityBroadcastReceiver( - @NonNull Context context, @NonNull Connectivity connectivity) { + ConnectivityBroadcastReceiver(@NonNull Context context, @NonNull Connectivity connectivity) { this.context = context; this.connectivity = connectivity; } 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 index 9340f8e6e54d..488c8efdd15f 100644 --- 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 @@ -13,7 +13,7 @@ * a @{@link Connectivity}, and then send the result back to the UIThread through the {@link * MethodChannel.Result}. */ -public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler { +class ConnectivityMethodChannelHandler implements MethodChannel.MethodCallHandler { private Connectivity connectivity; @@ -21,7 +21,7 @@ public class ConnectivityMethodChannelHandler implements MethodChannel.MethodCal * Construct the ConnectivityMethodChannelHandler with a {@code connectivity}. The {@code * connectivity} must not be null. */ - public ConnectivityMethodChannelHandler(@NonNull Connectivity connectivity) { + ConnectivityMethodChannelHandler(@NonNull Connectivity connectivity) { assert (connectivity != null); this.connectivity = connectivity; } From e118ec6fb7e0132dd3231938fdcb83e7be06a8d3 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 11 Oct 2019 13:51:45 -0700 Subject: [PATCH 21/24] fix gradle script --- packages/connectivity/android/build.gradle | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/connectivity/android/build.gradle b/packages/connectivity/android/build.gradle index 681eb0438b75..80c6196e56a6 100644 --- a/packages/connectivity/android/build.gradle +++ b/packages/connectivity/android/build.gradle @@ -45,3 +45,27 @@ android { disable 'InvalidPackage' } } + +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" + } + } + } +} From 5194df37c5e3581cde0fd3ea80a1192e4af035da Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 14 Oct 2019 15:57:11 -0700 Subject: [PATCH 22/24] version, e2e and more --- packages/connectivity/CHANGELOG.md | 4 +++ packages/connectivity/android/build.gradle | 25 +++++++++++++++++++ .../connectivity/ConnectivityPlugin.java | 10 ++++++-- .../EmbeddingV1Activity.java | 0 .../EmbeddingV1ActivityTest.java | 17 +++++++++++++ .../MainActivity.java | 0 .../connectivityexample/MainActivityTest.java | 15 +++++++++++ packages/connectivity/example/pubspec.yaml | 1 + .../test_driver/connectivity_test.dart | 10 -------- .../test/connectivity_e2e_test.dart | 14 +++++++++++ packages/connectivity/pubspec.yaml | 3 ++- .../connectivity_e2e.dart} | 16 ++++++------ 12 files changed, 94 insertions(+), 21 deletions(-) rename packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/{connectivity_example => connectivityexample}/EmbeddingV1Activity.java (100%) create mode 100644 packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java rename packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/{connectivity_example => connectivityexample}/MainActivity.java (100%) create mode 100644 packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java delete mode 100644 packages/connectivity/example/test_driver/connectivity_test.dart create mode 100644 packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart rename packages/connectivity/{example/test_driver/connectivity.dart => test/connectivity_e2e.dart} (68%) diff --git a/packages/connectivity/CHANGELOG.md b/packages/connectivity/CHANGELOG.md index e28fcd744805..3165ea93afab 100644 --- a/packages/connectivity/CHANGELOG.md +++ b/packages/connectivity/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.5 + +* Support the v2 Android embedder. + ## 0.4.4+1 * Update and migrate iOS example project. diff --git a/packages/connectivity/android/build.gradle b/packages/connectivity/android/build.gradle index 681eb0438b75..2d54affe1376 100644 --- a/packages/connectivity/android/build.gradle +++ b/packages/connectivity/android/build.gradle @@ -45,3 +45,28 @@ 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" + } + } + } +} \ No newline at end of file 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 80d669dde92f..ef8f7861d8e0 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 @@ -33,8 +33,7 @@ public void onAttachedToEngine(FlutterPluginBinding binding) { @Override public void onDetachedFromEngine(FlutterPluginBinding binding) { - methodChannel.setMethodCallHandler(null); - eventChannel.setStreamHandler(null); + teardownChannels(); } private void setupChannels(BinaryMessenger messenger, Context context) { @@ -54,4 +53,11 @@ private void setupChannels(BinaryMessenger messenger, Context context) { methodChannel.setMethodCallHandler(methodChannelHandler); eventChannel.setStreamHandler(receiver); } + + private void teardownChannels() { + methodChannel.setMethodCallHandler(null); + eventChannel.setStreamHandler(null); + methodChannel = null; + eventChannel = null; + } } diff --git a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/EmbeddingV1Activity.java b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1Activity.java similarity index 100% rename from packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/EmbeddingV1Activity.java rename to packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1Activity.java diff --git a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java new file mode 100644 index 000000000000..aff4294b9602 --- /dev/null +++ b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java @@ -0,0 +1,17 @@ +// 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.connectivityexample; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class EmbeddingV1ActivityTest { + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(EmbeddingV1Activity.class); +} \ No newline at end of file diff --git a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/MainActivity.java b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivity.java similarity index 100% rename from packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivity_example/MainActivity.java rename to packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivity.java diff --git a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java new file mode 100644 index 000000000000..1b2d2a1c5c9b --- /dev/null +++ b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java @@ -0,0 +1,15 @@ +// 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.connectivityexample; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import org.junit.Rule; +import org.junit.runner.RunWith; + +@RunWith(FlutterRunner.class) +public class MainActivityTest { + @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); +} \ No newline at end of file diff --git a/packages/connectivity/example/pubspec.yaml b/packages/connectivity/example/pubspec.yaml index c364782e786c..2f2b6eb68fca 100644 --- a/packages/connectivity/example/pubspec.yaml +++ b/packages/connectivity/example/pubspec.yaml @@ -11,6 +11,7 @@ dev_dependencies: flutter_driver: sdk: flutter test: any + e2e: ^0.2.0 flutter: uses-material-design: true diff --git a/packages/connectivity/example/test_driver/connectivity_test.dart b/packages/connectivity/example/test_driver/connectivity_test.dart deleted file mode 100644 index 2b89c8f2f7bb..000000000000 --- a/packages/connectivity/example/test_driver/connectivity_test.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter_driver/flutter_driver.dart'; -import 'package:test/test.dart'; - -void main() { - test('connectivity', () async { - final FlutterDriver driver = await FlutterDriver.connect(); - await driver.requestData(null, timeout: const Duration(minutes: 1)); - driver.close(); - }); -} diff --git a/packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart b/packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart new file mode 100644 index 000000000000..a40f62f38dc5 --- /dev/null +++ b/packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart @@ -0,0 +1,14 @@ +// 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. + +import 'dart:io'; +import 'package:flutter_driver/flutter_driver.dart'; + +Future main() async { + final FlutterDriver driver = await FlutterDriver.connect(); + final String result = + await driver.requestData(null, timeout: const Duration(minutes: 1)); + driver.close(); + exit(result == 'pass'?0:1); +} diff --git a/packages/connectivity/pubspec.yaml b/packages/connectivity/pubspec.yaml index 10a01988db5c..8ef4cc624fce 100644 --- a/packages/connectivity/pubspec.yaml +++ b/packages/connectivity/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for discovering the state of the network (WiFi & mobile/cellular) connectivity on Android and iOS. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/connectivity -version: 0.4.4+1 +version: 0.4.5 flutter: plugin: @@ -22,6 +22,7 @@ dev_dependencies: flutter_driver: sdk: flutter test: any + e2e: ^0.2.0 environment: sdk: ">=2.0.0-dev.28.0 <3.0.0" diff --git a/packages/connectivity/example/test_driver/connectivity.dart b/packages/connectivity/test/connectivity_e2e.dart similarity index 68% rename from packages/connectivity/example/test_driver/connectivity.dart rename to packages/connectivity/test/connectivity_e2e.dart index 685f69efb1c8..10c4bda34e0d 100644 --- a/packages/connectivity/example/test_driver/connectivity.dart +++ b/packages/connectivity/test/connectivity_e2e.dart @@ -1,13 +1,14 @@ -import 'dart:async'; +// 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. + import 'dart:io'; -import 'package:flutter_driver/driver_extension.dart'; +import 'package:e2e/e2e.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:connectivity/connectivity.dart'; void main() { - final Completer completer = Completer(); - enableFlutterDriverExtension(handler: (_) => completer.future); - tearDownAll(() => completer.complete(null)); + E2EWidgetsFlutterBinding.ensureInitialized(); group('Connectivity test driver', () { Connectivity _connectivity; @@ -16,7 +17,7 @@ void main() { _connectivity = Connectivity(); }); - test('test connectivity result', () async { + testWidgets('test connectivity result', (WidgetTester tester) async { final ConnectivityResult result = await _connectivity.checkConnectivity(); expect(result, isNotNull); switch (result) { @@ -30,8 +31,7 @@ void main() { } }); - test('test location methods, iOS only', () async { - print(Platform.isIOS); + testWidgets('test location methods, iOS only', (WidgetTester tester) async { if (Platform.isIOS) { expect((await _connectivity.getLocationServiceAuthorization()), LocationAuthorizationStatus.notDetermined); From 1ee15d84f8b63bc56460d8f2de19b28019d2c62f Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 14 Oct 2019 16:44:46 -0700 Subject: [PATCH 23/24] formatting --- .../connectivityexample/EmbeddingV1ActivityTest.java | 8 ++++---- .../plugins/connectivityexample/MainActivityTest.java | 4 ++-- .../example/test_driver/test/connectivity_e2e_test.dart | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java index aff4294b9602..a34755399117 100644 --- a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java +++ b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/EmbeddingV1ActivityTest.java @@ -11,7 +11,7 @@ @RunWith(FlutterRunner.class) public class EmbeddingV1ActivityTest { - @Rule - public ActivityTestRule rule = - new ActivityTestRule<>(EmbeddingV1Activity.class); -} \ No newline at end of file + @Rule + public ActivityTestRule rule = + new ActivityTestRule<>(EmbeddingV1Activity.class); +} diff --git a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java index 1b2d2a1c5c9b..0c33d6a92f46 100644 --- a/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java +++ b/packages/connectivity/example/android/app/src/main/java/io/flutter/plugins/connectivityexample/MainActivityTest.java @@ -11,5 +11,5 @@ @RunWith(FlutterRunner.class) public class MainActivityTest { - @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); -} \ No newline at end of file + @Rule public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class); +} diff --git a/packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart b/packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart index a40f62f38dc5..d4586bdc7127 100644 --- a/packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart +++ b/packages/connectivity/example/test_driver/test/connectivity_e2e_test.dart @@ -6,9 +6,9 @@ import 'dart:io'; import 'package:flutter_driver/flutter_driver.dart'; Future main() async { - final FlutterDriver driver = await FlutterDriver.connect(); - final String result = + final FlutterDriver driver = await FlutterDriver.connect(); + final String result = await driver.requestData(null, timeout: const Duration(minutes: 1)); - driver.close(); - exit(result == 'pass'?0:1); + driver.close(); + exit(result == 'pass' ? 0 : 1); } From 114435dbb06c02237058be59384028e2d57c0d22 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 15 Oct 2019 10:45:45 -0700 Subject: [PATCH 24/24] Update pubspec.yaml --- packages/connectivity/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/connectivity/pubspec.yaml b/packages/connectivity/pubspec.yaml index 8ef4cc624fce..636c43af2fae 100644 --- a/packages/connectivity/pubspec.yaml +++ b/packages/connectivity/pubspec.yaml @@ -26,4 +26,4 @@ dev_dependencies: environment: sdk: ">=2.0.0-dev.28.0 <3.0.0" - flutter: ">=1.2.0 <2.0.0" + flutter: ">=1.6.7 <2.0.0"