From 952b5d065e72be2e5b752a91be26d7415e4f51a1 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 11:49:58 -0700 Subject: [PATCH 01/14] draft --- .../plugins/deviceinfo/DeviceInfoPlugin.java | 26 ++++ .../plugins/deviceinfo/DeviceInfoPlugin.java | 109 +--------------- .../deviceinfo/MethodCallHandlerImpl.java | 121 ++++++++++++++++++ .../example/android/gradle.properties | 3 + 4 files changed, 154 insertions(+), 105 deletions(-) create mode 100644 packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java create mode 100644 packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java diff --git a/packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java b/packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java new file mode 100644 index 000000000000..68c08b768627 --- /dev/null +++ b/packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java @@ -0,0 +1,26 @@ +package dev.flutter.plugins.deviceinfo; + +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.deviceinfo.MethodCallHandlerImpl; + +/** + * Entry point of the plugin. It sets up the {@link io.flutter.plugin.common.MethodChannel.MethodCallHandler} + * during {@link #onAttachedToEngine(FlutterPluginBinding)}. + */ +public class DeviceInfoPlugin implements FlutterPlugin { + + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + final MethodChannel channel = + new MethodChannel(binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/device_info"); + + final MethodCallHandlerImpl handler = new MethodCallHandlerImpl(binding.getApplicationContext().getContentResolver()); + channel.setMethodCallHandler(handler); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + + } +} diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java index a22009f09ba7..45379b222cd4 100644 --- a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java @@ -4,120 +4,19 @@ package io.flutter.plugins.deviceinfo; -import android.annotation.SuppressLint; -import android.content.Context; -import android.os.Build; -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; -import android.provider.Settings; -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; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -/** DeviceInfoPlugin */ -public class DeviceInfoPlugin implements MethodCallHandler { - private final Context context; - /** Substitute for missing values. */ - private static final String[] EMPTY_STRING_LIST = new String[] {}; +/** DeviceInfoPlugin */ +public class DeviceInfoPlugin { /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/device_info"); - channel.setMethodCallHandler(new DeviceInfoPlugin(registrar.context())); - } - - /** Do not allow direct instantiation. */ - private DeviceInfoPlugin(Context context) { - this.context = context; - } - - @Override - public void onMethodCall(MethodCall call, Result result) { - if (call.method.equals("getAndroidDeviceInfo")) { - Map build = new HashMap<>(); - build.put("board", Build.BOARD); - build.put("bootloader", Build.BOOTLOADER); - build.put("brand", Build.BRAND); - build.put("device", Build.DEVICE); - build.put("display", Build.DISPLAY); - build.put("fingerprint", Build.FINGERPRINT); - build.put("hardware", Build.HARDWARE); - build.put("host", Build.HOST); - build.put("id", Build.ID); - build.put("manufacturer", Build.MANUFACTURER); - build.put("model", Build.MODEL); - build.put("product", Build.PRODUCT); - if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { - build.put("supported32BitAbis", Arrays.asList(Build.SUPPORTED_32_BIT_ABIS)); - build.put("supported64BitAbis", Arrays.asList(Build.SUPPORTED_64_BIT_ABIS)); - build.put("supportedAbis", Arrays.asList(Build.SUPPORTED_ABIS)); - } else { - build.put("supported32BitAbis", Arrays.asList(EMPTY_STRING_LIST)); - build.put("supported64BitAbis", Arrays.asList(EMPTY_STRING_LIST)); - build.put("supportedAbis", Arrays.asList(EMPTY_STRING_LIST)); - } - build.put("tags", Build.TAGS); - build.put("type", Build.TYPE); - build.put("isPhysicalDevice", !isEmulator()); - build.put("androidId", getAndroidId()); - - Map version = new HashMap<>(); - if (VERSION.SDK_INT >= VERSION_CODES.M) { - version.put("baseOS", VERSION.BASE_OS); - version.put("previewSdkInt", VERSION.PREVIEW_SDK_INT); - version.put("securityPatch", VERSION.SECURITY_PATCH); - } - version.put("codename", VERSION.CODENAME); - version.put("incremental", VERSION.INCREMENTAL); - version.put("release", VERSION.RELEASE); - version.put("sdkInt", VERSION.SDK_INT); - build.put("version", version); - - result.success(build); - } else { - result.notImplemented(); - } - } - - /** - * Returns the Android hardware device ID that is unique between the device + user and app - * signing. This key will change if the app is uninstalled or its data is cleared. Device factory - * reset will also result in a value change. - * - * @return The android ID - */ - @SuppressLint("HardwareIds") - private String getAndroidId() { - return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); - } - /** - * A simple emulator-detection based on the flutter tools detection logic and a couple of legacy - * detection systems - */ - private boolean isEmulator() { - return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) - || Build.FINGERPRINT.startsWith("generic") - || Build.FINGERPRINT.startsWith("unknown") - || Build.HARDWARE.contains("goldfish") - || Build.HARDWARE.contains("ranchu") - || Build.MODEL.contains("google_sdk") - || Build.MODEL.contains("Emulator") - || Build.MODEL.contains("Android SDK built for x86") - || Build.MANUFACTURER.contains("Genymotion") - || Build.PRODUCT.contains("sdk_google") - || Build.PRODUCT.contains("google_sdk") - || Build.PRODUCT.contains("sdk") - || Build.PRODUCT.contains("sdk_x86") - || Build.PRODUCT.contains("vbox86p") - || Build.PRODUCT.contains("emulator") - || Build.PRODUCT.contains("simulator"); + final MethodCallHandlerImpl handler = new MethodCallHandlerImpl(registrar.context().getContentResolver()); + channel.setMethodCallHandler(handler); } } diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java new file mode 100644 index 000000000000..bc4665b14745 --- /dev/null +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java @@ -0,0 +1,121 @@ +// Copyright 2017 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.deviceinfo; + +import android.annotation.SuppressLint; +import android.content.ContentResolver; +import android.os.Build; +import android.provider.Settings; + +import androidx.annotation.NonNull; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; + +/** + * The implementation of {@link MethodChannel.MethodCallHandler} for the plugin. + * Responsible for receiving method calls from method channel. + */ +public class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { + + private ContentResolver contentResolver; + + /** Substitute for missing values. */ + private static final String[] EMPTY_STRING_LIST = new String[] {}; + + /** + * Constructs DeviceInfo. The {@code contentResolver} must not be null. + */ + public MethodCallHandlerImpl(@NonNull ContentResolver contentResolver) { + this.contentResolver = contentResolver; + } + + @Override + public void onMethodCall(MethodCall call, MethodChannel.Result result) { + if (call.method.equals("getAndroidDeviceInfo")) { + Map build = new HashMap<>(); + build.put("board", Build.BOARD); + build.put("bootloader", Build.BOOTLOADER); + build.put("brand", Build.BRAND); + build.put("device", Build.DEVICE); + build.put("display", Build.DISPLAY); + build.put("fingerprint", Build.FINGERPRINT); + build.put("hardware", Build.HARDWARE); + build.put("host", Build.HOST); + build.put("id", Build.ID); + build.put("manufacturer", Build.MANUFACTURER); + build.put("model", Build.MODEL); + build.put("product", Build.PRODUCT); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + build.put("supported32BitAbis", Arrays.asList(Build.SUPPORTED_32_BIT_ABIS)); + build.put("supported64BitAbis", Arrays.asList(Build.SUPPORTED_64_BIT_ABIS)); + build.put("supportedAbis", Arrays.asList(Build.SUPPORTED_ABIS)); + } else { + build.put("supported32BitAbis", Arrays.asList(EMPTY_STRING_LIST)); + build.put("supported64BitAbis", Arrays.asList(EMPTY_STRING_LIST)); + build.put("supportedAbis", Arrays.asList(EMPTY_STRING_LIST)); + } + build.put("tags", Build.TAGS); + build.put("type", Build.TYPE); + build.put("isPhysicalDevice", !isEmulator()); + build.put("androidId", getAndroidId()); + + Map version = new HashMap<>(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + version.put("baseOS", Build.VERSION.BASE_OS); + version.put("previewSdkInt", Build.VERSION.PREVIEW_SDK_INT); + version.put("securityPatch", Build.VERSION.SECURITY_PATCH); + } + version.put("codename", Build.VERSION.CODENAME); + version.put("incremental", Build.VERSION.INCREMENTAL); + version.put("release", Build.VERSION.RELEASE); + version.put("sdkInt", Build.VERSION.SDK_INT); + build.put("version", version); + + result.success(build); + } else { + result.notImplemented(); + } + } + + /** + * Returns the Android hardware device ID that is unique between the device + user and app + * signing. This key will change if the app is uninstalled or its data is cleared. Device factory + * reset will also result in a value change. + * + * @return The android ID + */ + @SuppressLint("HardwareIds") + private String getAndroidId() { + return Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID); + } + + /** + * A simple emulator-detection based on the flutter tools detection logic and a couple of legacy + * detection systems + */ + private boolean isEmulator() { + return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) + || Build.FINGERPRINT.startsWith("generic") + || Build.FINGERPRINT.startsWith("unknown") + || Build.HARDWARE.contains("goldfish") + || Build.HARDWARE.contains("ranchu") + || Build.MODEL.contains("google_sdk") + || Build.MODEL.contains("Emulator") + || Build.MODEL.contains("Android SDK built for x86") + || Build.MANUFACTURER.contains("Genymotion") + || Build.PRODUCT.contains("sdk_google") + || Build.PRODUCT.contains("google_sdk") + || Build.PRODUCT.contains("sdk") + || Build.PRODUCT.contains("sdk_x86") + || Build.PRODUCT.contains("vbox86p") + || Build.PRODUCT.contains("emulator") + || Build.PRODUCT.contains("simulator"); + } +} diff --git a/packages/device_info/example/android/gradle.properties b/packages/device_info/example/android/gradle.properties index 8bd86f680510..38c8d4544ff1 100644 --- a/packages/device_info/example/android/gradle.properties +++ b/packages/device_info/example/android/gradle.properties @@ -1 +1,4 @@ org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true From ead4e1e197e669cb3dd01e5ef1d2f52b663ea8c9 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 13:53:23 -0700 Subject: [PATCH 02/14] migrate device_info --- .../plugins/deviceinfo/DeviceInfoPlugin.java | 26 --- .../plugins/deviceinfo/DeviceInfoPlugin.java | 21 +- .../deviceinfo/MethodCallHandlerImpl.java | 181 +++++++++--------- .../android/app/src/main/AndroidManifest.xml | 7 + .../deviceinfoexample/MainActivity.java | 13 ++ 5 files changed, 126 insertions(+), 122 deletions(-) delete mode 100644 packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java create mode 100644 packages/device_info/example/android/app/src/main/java/dev/flutter/plugins/deviceinfoexample/MainActivity.java diff --git a/packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java b/packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java deleted file mode 100644 index 68c08b768627..000000000000 --- a/packages/device_info/android/src/main/java/dev/flutter/plugins/deviceinfo/DeviceInfoPlugin.java +++ /dev/null @@ -1,26 +0,0 @@ -package dev.flutter.plugins.deviceinfo; - -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugins.deviceinfo.MethodCallHandlerImpl; - -/** - * Entry point of the plugin. It sets up the {@link io.flutter.plugin.common.MethodChannel.MethodCallHandler} - * during {@link #onAttachedToEngine(FlutterPluginBinding)}. - */ -public class DeviceInfoPlugin implements FlutterPlugin { - - @Override - public void onAttachedToEngine(FlutterPluginBinding binding) { - final MethodChannel channel = - new MethodChannel(binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/device_info"); - - final MethodCallHandlerImpl handler = new MethodCallHandlerImpl(binding.getApplicationContext().getContentResolver()); - channel.setMethodCallHandler(handler); - } - - @Override - public void onDetachedFromEngine(FlutterPluginBinding binding) { - - } -} diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java index 45379b222cd4..9cf6fe785678 100644 --- a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java @@ -4,19 +4,34 @@ package io.flutter.plugins.deviceinfo; +import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry.Registrar; - /** DeviceInfoPlugin */ -public class DeviceInfoPlugin { +public class DeviceInfoPlugin implements FlutterPlugin { /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/device_info"); - final MethodCallHandlerImpl handler = new MethodCallHandlerImpl(registrar.context().getContentResolver()); + final MethodCallHandlerImpl handler = + new MethodCallHandlerImpl(registrar.context().getContentResolver()); channel.setMethodCallHandler(handler); } + + @Override + public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { + final MethodChannel channel = + new MethodChannel( + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/device_info"); + + final MethodCallHandlerImpl handler = + new MethodCallHandlerImpl(binding.getApplicationContext().getContentResolver()); + channel.setMethodCallHandler(handler); + } + + @Override + public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) {} } diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java index bc4665b14745..ae1f86259f43 100644 --- a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java @@ -8,114 +8,109 @@ import android.content.ContentResolver; import android.os.Build; import android.provider.Settings; - import androidx.annotation.NonNull; - +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import io.flutter.plugin.common.MethodCall; -import io.flutter.plugin.common.MethodChannel; - /** - * The implementation of {@link MethodChannel.MethodCallHandler} for the plugin. - * Responsible for receiving method calls from method channel. + * The implementation of {@link MethodChannel.MethodCallHandler} for the plugin. Responsible for + * receiving method calls from method channel. */ public class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { - private ContentResolver contentResolver; + private ContentResolver contentResolver; - /** Substitute for missing values. */ - private static final String[] EMPTY_STRING_LIST = new String[] {}; + /** Substitute for missing values. */ + private static final String[] EMPTY_STRING_LIST = new String[] {}; - /** - * Constructs DeviceInfo. The {@code contentResolver} must not be null. - */ - public MethodCallHandlerImpl(@NonNull ContentResolver contentResolver) { - this.contentResolver = contentResolver; - } + /** Constructs DeviceInfo. The {@code contentResolver} must not be null. */ + public MethodCallHandlerImpl(@NonNull ContentResolver contentResolver) { + this.contentResolver = contentResolver; + } - @Override - public void onMethodCall(MethodCall call, MethodChannel.Result result) { - if (call.method.equals("getAndroidDeviceInfo")) { - Map build = new HashMap<>(); - build.put("board", Build.BOARD); - build.put("bootloader", Build.BOOTLOADER); - build.put("brand", Build.BRAND); - build.put("device", Build.DEVICE); - build.put("display", Build.DISPLAY); - build.put("fingerprint", Build.FINGERPRINT); - build.put("hardware", Build.HARDWARE); - build.put("host", Build.HOST); - build.put("id", Build.ID); - build.put("manufacturer", Build.MANUFACTURER); - build.put("model", Build.MODEL); - build.put("product", Build.PRODUCT); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - build.put("supported32BitAbis", Arrays.asList(Build.SUPPORTED_32_BIT_ABIS)); - build.put("supported64BitAbis", Arrays.asList(Build.SUPPORTED_64_BIT_ABIS)); - build.put("supportedAbis", Arrays.asList(Build.SUPPORTED_ABIS)); - } else { - build.put("supported32BitAbis", Arrays.asList(EMPTY_STRING_LIST)); - build.put("supported64BitAbis", Arrays.asList(EMPTY_STRING_LIST)); - build.put("supportedAbis", Arrays.asList(EMPTY_STRING_LIST)); - } - build.put("tags", Build.TAGS); - build.put("type", Build.TYPE); - build.put("isPhysicalDevice", !isEmulator()); - build.put("androidId", getAndroidId()); + @Override + public void onMethodCall(MethodCall call, MethodChannel.Result result) { + if (call.method.equals("getAndroidDeviceInfo")) { + Map build = new HashMap<>(); + build.put("board", Build.BOARD); + build.put("bootloader", Build.BOOTLOADER); + build.put("brand", Build.BRAND); + build.put("device", Build.DEVICE); + build.put("display", Build.DISPLAY); + build.put("fingerprint", Build.FINGERPRINT); + build.put("hardware", Build.HARDWARE); + build.put("host", Build.HOST); + build.put("id", Build.ID); + build.put("manufacturer", Build.MANUFACTURER); + build.put("model", Build.MODEL); + build.put("product", Build.PRODUCT); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + build.put("supported32BitAbis", Arrays.asList(Build.SUPPORTED_32_BIT_ABIS)); + build.put("supported64BitAbis", Arrays.asList(Build.SUPPORTED_64_BIT_ABIS)); + build.put("supportedAbis", Arrays.asList(Build.SUPPORTED_ABIS)); + } else { + build.put("supported32BitAbis", Arrays.asList(EMPTY_STRING_LIST)); + build.put("supported64BitAbis", Arrays.asList(EMPTY_STRING_LIST)); + build.put("supportedAbis", Arrays.asList(EMPTY_STRING_LIST)); + } + build.put("tags", Build.TAGS); + build.put("type", Build.TYPE); + build.put("isPhysicalDevice", !isEmulator()); + build.put("androidId", getAndroidId()); - Map version = new HashMap<>(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - version.put("baseOS", Build.VERSION.BASE_OS); - version.put("previewSdkInt", Build.VERSION.PREVIEW_SDK_INT); - version.put("securityPatch", Build.VERSION.SECURITY_PATCH); - } - version.put("codename", Build.VERSION.CODENAME); - version.put("incremental", Build.VERSION.INCREMENTAL); - version.put("release", Build.VERSION.RELEASE); - version.put("sdkInt", Build.VERSION.SDK_INT); - build.put("version", version); + Map version = new HashMap<>(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + version.put("baseOS", Build.VERSION.BASE_OS); + version.put("previewSdkInt", Build.VERSION.PREVIEW_SDK_INT); + version.put("securityPatch", Build.VERSION.SECURITY_PATCH); + } + version.put("codename", Build.VERSION.CODENAME); + version.put("incremental", Build.VERSION.INCREMENTAL); + version.put("release", Build.VERSION.RELEASE); + version.put("sdkInt", Build.VERSION.SDK_INT); + build.put("version", version); - result.success(build); - } else { - result.notImplemented(); - } + result.success(build); + } else { + result.notImplemented(); } + } - /** - * Returns the Android hardware device ID that is unique between the device + user and app - * signing. This key will change if the app is uninstalled or its data is cleared. Device factory - * reset will also result in a value change. - * - * @return The android ID - */ - @SuppressLint("HardwareIds") - private String getAndroidId() { - return Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID); - } + /** + * Returns the Android hardware device ID that is unique between the device + user and app + * signing. This key will change if the app is uninstalled or its data is cleared. Device factory + * reset will also result in a value change. + * + * @return The android ID + */ + @SuppressLint("HardwareIds") + private String getAndroidId() { + return Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID); + } - /** - * A simple emulator-detection based on the flutter tools detection logic and a couple of legacy - * detection systems - */ - private boolean isEmulator() { - return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) - || Build.FINGERPRINT.startsWith("generic") - || Build.FINGERPRINT.startsWith("unknown") - || Build.HARDWARE.contains("goldfish") - || Build.HARDWARE.contains("ranchu") - || Build.MODEL.contains("google_sdk") - || Build.MODEL.contains("Emulator") - || Build.MODEL.contains("Android SDK built for x86") - || Build.MANUFACTURER.contains("Genymotion") - || Build.PRODUCT.contains("sdk_google") - || Build.PRODUCT.contains("google_sdk") - || Build.PRODUCT.contains("sdk") - || Build.PRODUCT.contains("sdk_x86") - || Build.PRODUCT.contains("vbox86p") - || Build.PRODUCT.contains("emulator") - || Build.PRODUCT.contains("simulator"); - } + /** + * A simple emulator-detection based on the flutter tools detection logic and a couple of legacy + * detection systems + */ + private boolean isEmulator() { + return (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) + || Build.FINGERPRINT.startsWith("generic") + || Build.FINGERPRINT.startsWith("unknown") + || Build.HARDWARE.contains("goldfish") + || Build.HARDWARE.contains("ranchu") + || Build.MODEL.contains("google_sdk") + || Build.MODEL.contains("Emulator") + || Build.MODEL.contains("Android SDK built for x86") + || Build.MANUFACTURER.contains("Genymotion") + || Build.PRODUCT.contains("sdk_google") + || Build.PRODUCT.contains("google_sdk") + || Build.PRODUCT.contains("sdk") + || Build.PRODUCT.contains("sdk_x86") + || Build.PRODUCT.contains("vbox86p") + || Build.PRODUCT.contains("emulator") + || Build.PRODUCT.contains("simulator"); + } } diff --git a/packages/device_info/example/android/app/src/main/AndroidManifest.xml b/packages/device_info/example/android/app/src/main/AndroidManifest.xml index b46ebe843677..e199688ec383 100644 --- a/packages/device_info/example/android/app/src/main/AndroidManifest.xml +++ b/packages/device_info/example/android/app/src/main/AndroidManifest.xml @@ -10,6 +10,13 @@ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> + + diff --git a/packages/device_info/example/android/app/src/main/java/dev/flutter/plugins/deviceinfoexample/MainActivity.java b/packages/device_info/example/android/app/src/main/java/dev/flutter/plugins/deviceinfoexample/MainActivity.java new file mode 100644 index 000000000000..dc385f2241aa --- /dev/null +++ b/packages/device_info/example/android/app/src/main/java/dev/flutter/plugins/deviceinfoexample/MainActivity.java @@ -0,0 +1,13 @@ +package dev.flutter.plugins.deviceinfoexample; + +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.deviceinfo.DeviceInfoPlugin; + +public class MainActivity extends FlutterActivity { + @Override + public void configureFlutterEngine(FlutterEngine flutterEngine) { + super.configureFlutterEngine(flutterEngine); + flutterEngine.getPlugins().add(new DeviceInfoPlugin()); + } +} From 5c8ebe7d7089ead9da01b0b6806ce462de8da452 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 7 Oct 2019 16:50:03 -0700 Subject: [PATCH 03/14] refactor --- .../plugins/deviceinfo/DeviceInfoPlugin.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java index 9cf6fe785678..d58af6c713e2 100644 --- a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java @@ -4,34 +4,38 @@ package io.flutter.plugins.deviceinfo; +import android.content.ContentResolver; import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry.Registrar; /** DeviceInfoPlugin */ public class DeviceInfoPlugin implements FlutterPlugin { + MethodChannel channel; + /** Plugin registration. */ public static void registerWith(Registrar registrar) { - final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/device_info"); - - final MethodCallHandlerImpl handler = - new MethodCallHandlerImpl(registrar.context().getContentResolver()); - channel.setMethodCallHandler(handler); + DeviceInfoPlugin plugin = new DeviceInfoPlugin(); + plugin.setupMethodChannel(registrar.messenger(), registrar.context().getContentResolver()); } @Override public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { - final MethodChannel channel = - new MethodChannel( - binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/device_info"); - - final MethodCallHandlerImpl handler = - new MethodCallHandlerImpl(binding.getApplicationContext().getContentResolver()); - channel.setMethodCallHandler(handler); + setupMethodChannel( + binding.getFlutterEngine().getDartExecutor(), + binding.getApplicationContext().getContentResolver()); } @Override - public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) {} + public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + } + + private void setupMethodChannel(BinaryMessenger messenger, ContentResolver contentResolver) { + channel = new MethodChannel(messenger, "plugins.flutter.io/device_info"); + final MethodCallHandlerImpl handler = new MethodCallHandlerImpl(contentResolver); + channel.setMethodCallHandler(handler); + } } From 6c96b7a29c7fe728501c44e5895521004a766871 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 8 Oct 2019 12:54:15 -0700 Subject: [PATCH 04/14] rename activities --- .../android/app/src/main/AndroidManifest.xml | 5 +++-- .../plugins/deviceinfoexample/MainActivity.java | 13 ------------- .../deviceinfoexample/EmbeddingV1Activity.java | 17 +++++++++++++++++ .../plugins/deviceinfoexample/MainActivity.java | 16 ++++++---------- 4 files changed, 26 insertions(+), 25 deletions(-) delete mode 100644 packages/device_info/example/android/app/src/main/java/dev/flutter/plugins/deviceinfoexample/MainActivity.java create mode 100644 packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1Activity.java diff --git a/packages/device_info/example/android/app/src/main/AndroidManifest.xml b/packages/device_info/example/android/app/src/main/AndroidManifest.xml index e199688ec383..bfbb205f82cd 100644 --- a/packages/device_info/example/android/app/src/main/AndroidManifest.xml +++ b/packages/device_info/example/android/app/src/main/AndroidManifest.xml @@ -4,14 +4,15 @@ - - Date: Tue, 8 Oct 2019 15:20:01 -0700 Subject: [PATCH 05/14] move handler non-publick --- .../io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java index ae1f86259f43..c54de5d5fb94 100644 --- a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java @@ -19,7 +19,7 @@ * The implementation of {@link MethodChannel.MethodCallHandler} for the plugin. Responsible for * receiving method calls from method channel. */ -public class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { +class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private ContentResolver contentResolver; @@ -27,7 +27,7 @@ public class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private static final String[] EMPTY_STRING_LIST = new String[] {}; /** Constructs DeviceInfo. The {@code contentResolver} must not be null. */ - public MethodCallHandlerImpl(@NonNull ContentResolver contentResolver) { + MethodCallHandlerImpl(@NonNull ContentResolver contentResolver) { this.contentResolver = contentResolver; } From 5597833a9040619eaad5dc1686d84367d17e80cc Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 8 Oct 2019 16:11:40 -0700 Subject: [PATCH 06/14] Update MainActivity.java --- .../io/flutter/plugins/deviceinfoexample/MainActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java index d6db76dd5e08..dc35ae389de3 100644 --- a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java +++ b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/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 io.flutter.plugins.deviceinfoexample; import io.flutter.embedding.android.FlutterActivity; From af6f3454a5077ec31263c169c4f562ba1001ca25 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Fri, 11 Oct 2019 13:59:48 -0700 Subject: [PATCH 07/14] fix gradle --- packages/device_info/android/build.gradle | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/device_info/android/build.gradle b/packages/device_info/android/build.gradle index df08280c0b1b..b52d7f0fc58d 100644 --- a/packages/device_info/android/build.gradle +++ b/packages/device_info/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 05d9709510bfa076064a47f69888376fa6e04204 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 14 Oct 2019 09:22:29 -0700 Subject: [PATCH 08/14] review fixes --- .../io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java | 7 ++++++- .../example/android/app/src/main/AndroidManifest.xml | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java index d58af6c713e2..8ad0f5db1851 100644 --- a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/DeviceInfoPlugin.java @@ -30,7 +30,7 @@ public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) { @Override public void onDetachedFromEngine(FlutterPlugin.FlutterPluginBinding binding) { - channel.setMethodCallHandler(null); + tearDownChannel(); } private void setupMethodChannel(BinaryMessenger messenger, ContentResolver contentResolver) { @@ -38,4 +38,9 @@ private void setupMethodChannel(BinaryMessenger messenger, ContentResolver conte final MethodCallHandlerImpl handler = new MethodCallHandlerImpl(contentResolver); channel.setMethodCallHandler(handler); } + + private void tearDownChannel() { + channel.setMethodCallHandler(null); + channel = null; + } } diff --git a/packages/device_info/example/android/app/src/main/AndroidManifest.xml b/packages/device_info/example/android/app/src/main/AndroidManifest.xml index bfbb205f82cd..45242ab08b69 100644 --- a/packages/device_info/example/android/app/src/main/AndroidManifest.xml +++ b/packages/device_info/example/android/app/src/main/AndroidManifest.xml @@ -13,7 +13,6 @@ android:windowSoftInputMode="adjustResize"> Date: Tue, 15 Oct 2019 15:06:04 -0700 Subject: [PATCH 09/14] e2e tests --- packages/device_info/CHANGELOG.md | 8 +++++ packages/device_info/android/build.gradle | 1 + .../EmbeddingV1ActivityTest.java | 13 ++++++++ .../deviceinfoexample/MainActivityTest.java | 15 +++++++++ packages/device_info/example/pubspec.yaml | 10 ++++++ .../test/device_info_e2e_test.dart | 15 +++++++++ packages/device_info/pubspec.yaml | 10 ++++-- .../device_info/test/device_info_e2e.dart | 32 +++++++++++++++++++ 8 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java create mode 100644 packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivityTest.java create mode 100644 packages/device_info/example/test_driver/test/device_info_e2e_test.dart create mode 100644 packages/device_info/test/device_info_e2e.dart diff --git a/packages/device_info/CHANGELOG.md b/packages/device_info/CHANGELOG.md index 62d4960dc73b..a07adeb8324a 100644 --- a/packages/device_info/CHANGELOG.md +++ b/packages/device_info/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0/4/1 + +* Support the v2 Android embedder. +* Update to AndroidX. +* Migrate to using the new e2e test binding. +* Add a e2e test. + + ## 0.4.0+4 * Define clang module for iOS. diff --git a/packages/device_info/android/build.gradle b/packages/device_info/android/build.gradle index b52d7f0fc58d..47c75d50b064 100644 --- a/packages/device_info/android/build.gradle +++ b/packages/device_info/android/build.gradle @@ -46,6 +46,7 @@ android { } } +// TODO(cyanglaz): 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) { diff --git a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java new file mode 100644 index 000000000000..2bec9fb8e254 --- /dev/null +++ b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/EmbeddingV1ActivityTest.java @@ -0,0 +1,13 @@ +package io.flutter.plugins.deviceinfoexample; + +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); +} diff --git a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivityTest.java b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivityTest.java new file mode 100644 index 000000000000..36967ebf4564 --- /dev/null +++ b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/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.deviceinfoexample; + +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); +} diff --git a/packages/device_info/example/pubspec.yaml b/packages/device_info/example/pubspec.yaml index 65b7bf8a4ef6..148b7b9ed286 100644 --- a/packages/device_info/example/pubspec.yaml +++ b/packages/device_info/example/pubspec.yaml @@ -7,5 +7,15 @@ dependencies: device_info: path: ../ +dev_dependencies: + flutter_driver: + sdk: flutter + e2e: ^0.2.0 + flutter: uses-material-design: true + +environment: + sdk: ">=2.0.0-dev.28.0 <3.0.0" + flutter: ">=1.9.1+hotfix.2 <2.0.0" + diff --git a/packages/device_info/example/test_driver/test/device_info_e2e_test.dart b/packages/device_info/example/test_driver/test/device_info_e2e_test.dart new file mode 100644 index 000000000000..ff6e9ce74ad9 --- /dev/null +++ b/packages/device_info/example/test_driver/test/device_info_e2e_test.dart @@ -0,0 +1,15 @@ +// Copyright 2019, the Chromium project authors. Please see the AUTHORS file +// for details. 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:async'; +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/device_info/pubspec.yaml b/packages/device_info/pubspec.yaml index bc192a87c96e..580df1452ff1 100644 --- a/packages/device_info/pubspec.yaml +++ b/packages/device_info/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin providing detailed information about the device (make, model, etc.), and Android or iOS version the app is running on. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/device_info -version: 0.4.0+4 +version: 0.4.1 flutter: plugin: @@ -15,6 +15,12 @@ dependencies: flutter: sdk: flutter +dev_dependencies: + test: ^1.3.0 + flutter_test: + sdk: flutter + e2e: ^0.2.0 + environment: sdk: ">=2.0.0-dev.28.0 <3.0.0" - flutter: ">=1.5.0 <2.0.0" + flutter: ">=1.6.7 <2.0.0" diff --git a/packages/device_info/test/device_info_e2e.dart b/packages/device_info/test/device_info_e2e.dart new file mode 100644 index 000000000000..db8a73f579c1 --- /dev/null +++ b/packages/device_info/test/device_info_e2e.dart @@ -0,0 +1,32 @@ +// Copyright 2019, the Chromium project authors. Please see the AUTHORS file +// for details. 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_test/flutter_test.dart'; +import 'package:device_info/device_info.dart'; +import 'package:e2e/e2e.dart'; + +void main() { + E2EWidgetsFlutterBinding.ensureInitialized(); + + IosDeviceInfo iosInfo; + AndroidDeviceInfo androidInfo; + + setUpAll(() async { + final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); + if (Platform.isIOS) { + iosInfo = await deviceInfoPlugin.iosInfo; + } else if (Platform.isAndroid) { + androidInfo = await deviceInfoPlugin.androidInfo; + } + }); + + testWidgets('Can get non-null device model', (WidgetTester tester) async { + if (Platform.isIOS) { + expect(iosInfo.model, isNotNull); + } else if (Platform.isAndroid) { + expect(androidInfo.model, isNotNull); + } + }); +} From 5fee11657b9d46855f8f9594432a140b4fcd94ca Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 15 Oct 2019 15:17:36 -0700 Subject: [PATCH 10/14] Update CHANGELOG.md --- packages/device_info/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/device_info/CHANGELOG.md b/packages/device_info/CHANGELOG.md index a07adeb8324a..2bdb81c04e87 100644 --- a/packages/device_info/CHANGELOG.md +++ b/packages/device_info/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0/4/1 +## 0.4.1 * Support the v2 Android embedder. * Update to AndroidX. From 727a3b63622a6763b5d1a7200e952bd4cb290c25 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Tue, 15 Oct 2019 16:10:40 -0700 Subject: [PATCH 11/14] Update MainActivity.java --- .../io/flutter/plugins/deviceinfoexample/MainActivity.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java index dc35ae389de3..2c265c3116d0 100644 --- a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java +++ b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java @@ -9,6 +9,9 @@ import io.flutter.plugins.deviceinfo.DeviceInfoPlugin; public class MainActivity extends FlutterActivity { + + // TODO(cyanglaz): Remove this once v2 of GeneratedPluginRegistrant rolls to stable. + // https://github.com/flutter/flutter/issues/42694 @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); From 835793a0b5fba24550ccc1686ca56b08a75669ea Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 21 Oct 2019 13:43:28 -0700 Subject: [PATCH 12/14] remove android x --- packages/device_info/android/build.gradle | 7 ++++--- .../flutter/plugins/deviceinfo/MethodCallHandlerImpl.java | 3 +-- .../io/flutter/plugins/deviceinfoexample/MainActivity.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/device_info/android/build.gradle b/packages/device_info/android/build.gradle index 47c75d50b064..7dfea2df5dac 100644 --- a/packages/device_info/android/build.gradle +++ b/packages/device_info/android/build.gradle @@ -63,9 +63,10 @@ afterEvaluate { 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" + def lifecycle_version = "1.1.1" + api "android.arch.lifecycle:runtime:$lifecycle_version" + api "android.arch.lifecycle:common:$lifecycle_version" + api "android.arch.lifecycle:common-java8:$lifecycle_version" } } } diff --git a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java index c54de5d5fb94..22ea1f0ec85e 100644 --- a/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java +++ b/packages/device_info/android/src/main/java/io/flutter/plugins/deviceinfo/MethodCallHandlerImpl.java @@ -8,7 +8,6 @@ import android.content.ContentResolver; import android.os.Build; import android.provider.Settings; -import androidx.annotation.NonNull; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import java.util.Arrays; @@ -27,7 +26,7 @@ class MethodCallHandlerImpl implements MethodChannel.MethodCallHandler { private static final String[] EMPTY_STRING_LIST = new String[] {}; /** Constructs DeviceInfo. The {@code contentResolver} must not be null. */ - MethodCallHandlerImpl(@NonNull ContentResolver contentResolver) { + MethodCallHandlerImpl(ContentResolver contentResolver) { this.contentResolver = contentResolver; } diff --git a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java index 2c265c3116d0..b820542706e0 100644 --- a/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java +++ b/packages/device_info/example/android/app/src/main/java/io/flutter/plugins/deviceinfoexample/MainActivity.java @@ -9,7 +9,7 @@ import io.flutter.plugins.deviceinfo.DeviceInfoPlugin; public class MainActivity extends FlutterActivity { - + // TODO(cyanglaz): Remove this once v2 of GeneratedPluginRegistrant rolls to stable. // https://github.com/flutter/flutter/issues/42694 @Override From b7e025aef9352c18fc0e95eda3cb26d7f6d6e1b7 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 21 Oct 2019 13:54:57 -0700 Subject: [PATCH 13/14] Update CHANGELOG.md --- packages/device_info/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/device_info/CHANGELOG.md b/packages/device_info/CHANGELOG.md index 2bdb81c04e87..1fff8c7020df 100644 --- a/packages/device_info/CHANGELOG.md +++ b/packages/device_info/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.4.1 -* Support the v2 Android embedder. +* Support the v2 Android embedding. * Update to AndroidX. * Migrate to using the new e2e test binding. * Add a e2e test. From f3dc369380fff3fdff52ef4cade393d9f12d7f7d Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 21 Oct 2019 14:03:37 -0700 Subject: [PATCH 14/14] place test files at the corret place --- .../{test => example/test_driver}/device_info_e2e.dart | 0 .../example/test_driver/{test => }/device_info_e2e_test.dart | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/device_info/{test => example/test_driver}/device_info_e2e.dart (100%) rename packages/device_info/example/test_driver/{test => }/device_info_e2e_test.dart (100%) diff --git a/packages/device_info/test/device_info_e2e.dart b/packages/device_info/example/test_driver/device_info_e2e.dart similarity index 100% rename from packages/device_info/test/device_info_e2e.dart rename to packages/device_info/example/test_driver/device_info_e2e.dart diff --git a/packages/device_info/example/test_driver/test/device_info_e2e_test.dart b/packages/device_info/example/test_driver/device_info_e2e_test.dart similarity index 100% rename from packages/device_info/example/test_driver/test/device_info_e2e_test.dart rename to packages/device_info/example/test_driver/device_info_e2e_test.dart