From 81d9aec37567f35e134a99cfe0aa05a5c0000caa Mon Sep 17 00:00:00 2001 From: Xiao Yu Date: Fri, 15 Nov 2019 17:13:17 -0800 Subject: [PATCH 1/5] Add v2 embedding support for path_provider --- packages/path_provider/CHANGELOG.md | 4 ++ packages/path_provider/android/build.gradle | 2 +- .../pathprovider/PathProviderPlugin.java | 48 ++++++++++++------- .../example/android/app/build.gradle | 4 ++ .../java/EmbeddingV1ActivityTest.java | 15 ++++++ .../androidTest/java/MainActivityTest.java | 13 +++++ .../android/app/src/main/AndroidManifest.xml | 6 +++ .../EmbeddingV1Activity.java | 14 ++++++ .../pathproviderexample/MainActivity.java | 15 +++--- packages/path_provider/example/pubspec.yaml | 1 + packages/path_provider/pubspec.yaml | 5 +- .../path_provider/test/path_provider_e2e.dart | 13 +++++ 12 files changed, 113 insertions(+), 27 deletions(-) create mode 100644 packages/path_provider/example/android/app/src/androidTest/java/EmbeddingV1ActivityTest.java create mode 100644 packages/path_provider/example/android/app/src/androidTest/java/MainActivityTest.java create mode 100644 packages/path_provider/example/android/app/src/main/java/io/flutter/plugins/pathproviderexample/EmbeddingV1Activity.java create mode 100644 packages/path_provider/test/path_provider_e2e.dart diff --git a/packages/path_provider/CHANGELOG.md b/packages/path_provider/CHANGELOG.md index 27dde4284b77..505977e469cf 100644 --- a/packages/path_provider/CHANGELOG.md +++ b/packages/path_provider/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.5 + +* Add support for v2 plugins APIs. + ## 1.4.4 * Update driver tests in the example app to e2e tests. diff --git a/packages/path_provider/android/build.gradle b/packages/path_provider/android/build.gradle index 71ea49b2fb39..3bc008e63e0c 100644 --- a/packages/path_provider/android/build.gradle +++ b/packages/path_provider/android/build.gradle @@ -62,4 +62,4 @@ afterEvaluate { } } } -} \ No newline at end of file +} diff --git a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java index 30b00d0e5532..e23cd9e53956 100644 --- a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java +++ b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java @@ -4,9 +4,11 @@ package io.flutter.plugins.pathprovider; +import android.support.annotation.NonNull; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import android.content.Context; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; -import androidx.annotation.NonNull; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -17,19 +19,31 @@ import java.util.ArrayList; import java.util.List; -public class PathProviderPlugin implements MethodCallHandler { +public class PathProviderPlugin implements FlutterPlugin, MethodCallHandler { - private final Registrar mRegistrar; + private Context context; + private MethodChannel channel; + + public PathProviderPlugin() { } public static void registerWith(Registrar registrar) { - MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/path_provider"); - PathProviderPlugin instance = new PathProviderPlugin(registrar); - channel.setMethodCallHandler(instance); + PathProviderPlugin instance = new PathProviderPlugin(); + instance.channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/path_provider"); + instance.context = registrar.context(); + instance.channel.setMethodCallHandler(instance); } - private PathProviderPlugin(Registrar registrar) { - this.mRegistrar = registrar; + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + channel = new MethodChannel(binding.getBinaryMessenger(), "plugins.flutter.io/path_provider"); + context = binding.getApplicationContext(); + channel.setMethodCallHandler(this); + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + channel = null; } @Override @@ -61,19 +75,19 @@ public void onMethodCall(MethodCall call, @NonNull Result result) { } private String getPathProviderTemporaryDirectory() { - return mRegistrar.context().getCacheDir().getPath(); + return context.getCacheDir().getPath(); } private String getApplicationSupportDirectory() { - return PathUtils.getFilesDir(mRegistrar.context()); + return PathUtils.getFilesDir(context); } private String getPathProviderApplicationDocumentsDirectory() { - return PathUtils.getDataDirectory(mRegistrar.context()); + return PathUtils.getDataDirectory(context); } private String getPathProviderStorageDirectory() { - final File dir = mRegistrar.context().getExternalFilesDir(null); + final File dir = context.getExternalFilesDir(null); if (dir == null) { return null; } @@ -84,13 +98,13 @@ private List getPathProviderExternalCacheDirectories() { final List paths = new ArrayList<>(); if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { - for (File dir : mRegistrar.context().getExternalCacheDirs()) { + for (File dir : context.getExternalCacheDirs()) { if (dir != null) { paths.add(dir.getAbsolutePath()); } } } else { - File dir = mRegistrar.context().getExternalCacheDir(); + File dir = context.getExternalCacheDir(); if (dir != null) { paths.add(dir.getAbsolutePath()); } @@ -103,13 +117,13 @@ private List getPathProviderExternalStorageDirectories(String type) { final List paths = new ArrayList<>(); if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) { - for (File dir : mRegistrar.context().getExternalFilesDirs(type)) { + for (File dir : context.getExternalFilesDirs(type)) { if (dir != null) { paths.add(dir.getAbsolutePath()); } } } else { - File dir = mRegistrar.context().getExternalFilesDir(type); + File dir = context.getExternalFilesDir(type); if (dir != null) { paths.add(dir.getAbsolutePath()); } diff --git a/packages/path_provider/example/android/app/build.gradle b/packages/path_provider/example/android/app/build.gradle index 2ca6a7a4add3..0404c7203903 100644 --- a/packages/path_provider/example/android/app/build.gradle +++ b/packages/path_provider/example/android/app/build.gradle @@ -54,6 +54,10 @@ flutter { } dependencies { + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.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/path_provider/example/android/app/src/androidTest/java/EmbeddingV1ActivityTest.java b/packages/path_provider/example/android/app/src/androidTest/java/EmbeddingV1ActivityTest.java new file mode 100644 index 000000000000..cce04b79f516 --- /dev/null +++ b/packages/path_provider/example/android/app/src/androidTest/java/EmbeddingV1ActivityTest.java @@ -0,0 +1,15 @@ + +package io.flutter.plugins.pathprovider; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import io.flutter.plugins.pathproviderexample.EmbeddingV1Activity; +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/path_provider/example/android/app/src/androidTest/java/MainActivityTest.java b/packages/path_provider/example/android/app/src/androidTest/java/MainActivityTest.java new file mode 100644 index 000000000000..7bdd449981f5 --- /dev/null +++ b/packages/path_provider/example/android/app/src/androidTest/java/MainActivityTest.java @@ -0,0 +1,13 @@ + +package io.flutter.plugins.pathprovider; + +import androidx.test.rule.ActivityTestRule; +import dev.flutter.plugins.e2e.FlutterRunner; +import io.flutter.plugins.pathproviderexample.MainActivity; +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/path_provider/example/android/app/src/main/AndroidManifest.xml b/packages/path_provider/example/android/app/src/main/AndroidManifest.xml index 793c13b6e612..9e03a9373e33 100644 --- a/packages/path_provider/example/android/app/src/main/AndroidManifest.xml +++ b/packages/path_provider/example/android/app/src/main/AndroidManifest.xml @@ -4,6 +4,12 @@ + + homepage: https://github.com/flutter/plugins/tree/master/packages/path_provider -version: 1.4.4 +version: 1.4.5 flutter: plugin: @@ -18,6 +18,7 @@ dependencies: meta: ^1.0.5 dev_dependencies: + e2e: ^0.2.1 flutter_test: sdk: flutter flutter_driver: @@ -27,4 +28,4 @@ dev_dependencies: environment: sdk: ">=2.0.0-dev.28.0 <3.0.0" - flutter: ">=0.1.4 <2.0.0" + flutter: ">=1.9.1+hotfix.5 <2.0.0" diff --git a/packages/path_provider/test/path_provider_e2e.dart b/packages/path_provider/test/path_provider_e2e.dart new file mode 100644 index 000000000000..f99d08889d4f --- /dev/null +++ b/packages/path_provider/test/path_provider_e2e.dart @@ -0,0 +1,13 @@ + +import 'package:flutter_test/flutter_test.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:e2e/e2e.dart'; + +void main() { + E2EWidgetsFlutterBinding.ensureInitialized(); + + testWidgets('Can get temporary directory', (WidgetTester tester) async { + final String tempPath = (await getTemporaryDirectory()).path; + expect(tempPath, isNotEmpty); + }); +} From 5d350f34280ae05f0abff325ce3bba64ed3e83b0 Mon Sep 17 00:00:00 2001 From: Xiao Yu Date: Fri, 15 Nov 2019 17:16:39 -0800 Subject: [PATCH 2/5] auto-format --- .../plugins/pathprovider/PathProviderPlugin.java | 6 +++--- .../pathproviderexample/EmbeddingV1Activity.java | 10 +++++----- packages/path_provider/test/path_provider_e2e.dart | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java index e23cd9e53956..86fe59d67e76 100644 --- a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java +++ b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java @@ -4,11 +4,11 @@ package io.flutter.plugins.pathprovider; -import android.support.annotation.NonNull; -import io.flutter.embedding.engine.plugins.FlutterPlugin; import android.content.Context; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; +import android.support.annotation.NonNull; +import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; @@ -24,7 +24,7 @@ public class PathProviderPlugin implements FlutterPlugin, MethodCallHandler { private Context context; private MethodChannel channel; - public PathProviderPlugin() { } + public PathProviderPlugin() {} public static void registerWith(Registrar registrar) { PathProviderPlugin instance = new PathProviderPlugin(); diff --git a/packages/path_provider/example/android/app/src/main/java/io/flutter/plugins/pathproviderexample/EmbeddingV1Activity.java b/packages/path_provider/example/android/app/src/main/java/io/flutter/plugins/pathproviderexample/EmbeddingV1Activity.java index 42ebf2037786..a826af36a9d3 100644 --- a/packages/path_provider/example/android/app/src/main/java/io/flutter/plugins/pathproviderexample/EmbeddingV1Activity.java +++ b/packages/path_provider/example/android/app/src/main/java/io/flutter/plugins/pathproviderexample/EmbeddingV1Activity.java @@ -6,9 +6,9 @@ import io.flutter.plugins.GeneratedPluginRegistrant; public class EmbeddingV1Activity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); - } + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + GeneratedPluginRegistrant.registerWith(this); + } } diff --git a/packages/path_provider/test/path_provider_e2e.dart b/packages/path_provider/test/path_provider_e2e.dart index f99d08889d4f..545671e32b01 100644 --- a/packages/path_provider/test/path_provider_e2e.dart +++ b/packages/path_provider/test/path_provider_e2e.dart @@ -1,4 +1,3 @@ - import 'package:flutter_test/flutter_test.dart'; import 'package:path_provider/path_provider.dart'; import 'package:e2e/e2e.dart'; From 18b2df3dde310971f581427e5022761d2c6c9138 Mon Sep 17 00:00:00 2001 From: Xiao Yu Date: Wed, 20 Nov 2019 20:03:46 -0800 Subject: [PATCH 3/5] fix --- .../io/flutter/plugins/pathprovider/PathProviderPlugin.java | 4 ++-- .../example/android/gradle/wrapper/gradle-wrapper.properties | 2 +- packages/path_provider/example/pubspec.yaml | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java index 86fe59d67e76..6db0a8f15b0b 100644 --- a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java +++ b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java @@ -7,7 +7,7 @@ import android.content.Context; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import io.flutter.embedding.engine.plugins.FlutterPlugin; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @@ -35,7 +35,7 @@ public static void registerWith(Registrar registrar) { @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { - channel = new MethodChannel(binding.getBinaryMessenger(), "plugins.flutter.io/path_provider"); + channel = new MethodChannel(binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/path_provider"); context = binding.getApplicationContext(); channel.setMethodCallHandler(this); } diff --git a/packages/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties index 019065d1d650..caf54fa2801c 100644 --- a/packages/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ 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 diff --git a/packages/path_provider/example/pubspec.yaml b/packages/path_provider/example/pubspec.yaml index b7d1eb235af9..bf034a3fc64a 100644 --- a/packages/path_provider/example/pubspec.yaml +++ b/packages/path_provider/example/pubspec.yaml @@ -12,7 +12,6 @@ dev_dependencies: flutter_driver: sdk: flutter test: any - e2e: ^0.2.1 flutter: uses-material-design: true From 8826cf03318a20565446d6b787bd7ef11b8cb09a Mon Sep 17 00:00:00 2001 From: Xiao Yu Date: Thu, 21 Nov 2019 10:45:27 -0800 Subject: [PATCH 4/5] autoformat --- packages/connectivity/ios/Classes/ConnectivityPlugin.m | 4 +++- packages/in_app_purchase/ios/Tests/Stubs.m | 4 ++-- .../io/flutter/plugins/pathprovider/PathProviderPlugin.java | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/connectivity/ios/Classes/ConnectivityPlugin.m b/packages/connectivity/ios/Classes/ConnectivityPlugin.m index 100e70b44ec6..a2405c507b1e 100644 --- a/packages/connectivity/ios/Classes/ConnectivityPlugin.m +++ b/packages/connectivity/ios/Classes/ConnectivityPlugin.m @@ -156,7 +156,9 @@ - (NSString*)convertCLAuthorizationStatusToString:(CLAuthorizationStatus)status case kCLAuthorizationStatusAuthorizedWhenInUse: { return @"authorizedWhenInUse"; } - default: { return @"unknown"; } + default: { + return @"unknown"; + } } } diff --git a/packages/in_app_purchase/ios/Tests/Stubs.m b/packages/in_app_purchase/ios/Tests/Stubs.m index a2c65b88adbe..01a2a754ed80 100644 --- a/packages/in_app_purchase/ios/Tests/Stubs.m +++ b/packages/in_app_purchase/ios/Tests/Stubs.m @@ -180,8 +180,8 @@ - (instancetype)initWithMap:(NSDictionary *)map { if (self) { [self setValue:map[@"transactionIdentifier"] forKey:@"transactionIdentifier"]; [self setValue:map[@"transactionState"] forKey:@"transactionState"]; - if (map[@"originalTransaction"] && ! - [map[@"originalTransaction"] isKindOfClass:[NSNull class]]) { + if (map[@"originalTransaction"] && + ![map[@"originalTransaction"] isKindOfClass:[NSNull class]]) { [self setValue:[[SKPaymentTransactionStub alloc] initWithMap:map[@"originalTransaction"]] forKey:@"originalTransaction"]; } diff --git a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java index 6db0a8f15b0b..0bf9ee4820a3 100644 --- a/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java +++ b/packages/path_provider/android/src/main/java/io/flutter/plugins/pathprovider/PathProviderPlugin.java @@ -35,7 +35,9 @@ public static void registerWith(Registrar registrar) { @Override public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { - channel = new MethodChannel(binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/path_provider"); + channel = + new MethodChannel( + binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/path_provider"); context = binding.getApplicationContext(); channel.setMethodCallHandler(this); } From d6ff8a4b2244cc02a632c1f98c6263c6bf88459a Mon Sep 17 00:00:00 2001 From: Xiao Yu Date: Thu, 21 Nov 2019 15:27:39 -0800 Subject: [PATCH 5/5] apparently the instructions to autoformat produces formatted code that does not pass the autoformat lint --- packages/connectivity/ios/Classes/ConnectivityPlugin.m | 4 +--- packages/in_app_purchase/ios/Tests/Stubs.m | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/connectivity/ios/Classes/ConnectivityPlugin.m b/packages/connectivity/ios/Classes/ConnectivityPlugin.m index a2405c507b1e..100e70b44ec6 100644 --- a/packages/connectivity/ios/Classes/ConnectivityPlugin.m +++ b/packages/connectivity/ios/Classes/ConnectivityPlugin.m @@ -156,9 +156,7 @@ - (NSString*)convertCLAuthorizationStatusToString:(CLAuthorizationStatus)status case kCLAuthorizationStatusAuthorizedWhenInUse: { return @"authorizedWhenInUse"; } - default: { - return @"unknown"; - } + default: { return @"unknown"; } } } diff --git a/packages/in_app_purchase/ios/Tests/Stubs.m b/packages/in_app_purchase/ios/Tests/Stubs.m index 01a2a754ed80..a2c65b88adbe 100644 --- a/packages/in_app_purchase/ios/Tests/Stubs.m +++ b/packages/in_app_purchase/ios/Tests/Stubs.m @@ -180,8 +180,8 @@ - (instancetype)initWithMap:(NSDictionary *)map { if (self) { [self setValue:map[@"transactionIdentifier"] forKey:@"transactionIdentifier"]; [self setValue:map[@"transactionState"] forKey:@"transactionState"]; - if (map[@"originalTransaction"] && - ![map[@"originalTransaction"] isKindOfClass:[NSNull class]]) { + if (map[@"originalTransaction"] && ! + [map[@"originalTransaction"] isKindOfClass:[NSNull class]]) { [self setValue:[[SKPaymentTransactionStub alloc] initWithMap:map[@"originalTransaction"]] forKey:@"originalTransaction"]; }