From 94c4904d145798c752c9bd9991f47dcccee8a3ea Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Wed, 26 Jan 2022 14:39:13 +0100 Subject: [PATCH 01/13] Add platform interface for local_auth plugin to prepare for federated architecture --- packages/local_auth/{ => local_auth}/AUTHORS | 0 .../local_auth/{ => local_auth}/CHANGELOG.md | 0 packages/local_auth/{ => local_auth}/LICENSE | 0 .../local_auth/{ => local_auth}/README.md | 0 .../{ => local_auth}/android/build.gradle | 0 .../android/lint-baseline.xml | 0 .../{ => local_auth}/android/settings.gradle | 0 .../android/src/main/AndroidManifest.xml | 0 .../localauth/AuthenticationHelper.java | 0 .../plugins/localauth/LocalAuthPlugin.java | 0 .../res/drawable/fingerprint_initial_icon.xml | 0 .../res/drawable/fingerprint_success_icon.xml | 0 .../res/drawable/fingerprint_warning_icon.xml | 0 .../main/res/drawable/ic_done_white_24dp.xml | 0 .../drawable/ic_fingerprint_white_24dp.xml | 0 .../drawable/ic_priority_high_white_24dp.xml | 0 .../src/main/res/layout/go_to_setting.xml | 0 .../android/src/main/res/layout/scan_fp.xml | 0 .../android/src/main/res/values/colors.xml | 0 .../android/src/main/res/values/dimens.xml | 0 .../android/src/main/res/values/styles.xml | 0 .../plugins/localauth/LocalAuthTest.java | 0 .../{ => local_auth}/example/README.md | 0 .../example/android/app/build.gradle | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 .../flutter/plugins/DartIntegrationTest.java | 0 .../FlutterFragmentActivityTest.java | 0 .../android/app/src/main/AndroidManifest.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../example/android/build.gradle | 0 .../example/android/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 .../example/android/settings.gradle | 0 .../example/android/settings_aar.gradle | 0 .../integration_test/local_auth_test.dart | 0 .../ios/Flutter/AppFrameworkInfo.plist | 0 .../example/ios/Flutter/Debug.xcconfig | 0 .../example/ios/Flutter/Release.xcconfig | 0 .../{ => local_auth}/example/ios/Podfile | 0 .../ios/Runner.xcodeproj/project.pbxproj | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 0 .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../example/ios/Runner/AppDelegate.h | 0 .../example/ios/Runner/AppDelegate.m | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin .../Icon-App-83.5x83.5@2x.png | Bin .../Runner/Base.lproj/LaunchScreen.storyboard | 0 .../ios/Runner/Base.lproj/Main.storyboard | 0 .../example/ios/Runner/Info.plist | 0 .../example/ios/Runner/main.m | 0 .../ios/RunnerTests/FLTLocalAuthPluginTests.m | 0 .../example/ios/RunnerTests/Info.plist | 0 .../{ => local_auth}/example/lib/main.dart | 0 .../{ => local_auth}/example/pubspec.yaml | 0 .../example/test_driver/integration_test.dart | 0 .../{ => local_auth}/ios/Assets/.gitkeep | 0 .../ios/Classes/FLTLocalAuthPlugin.h | 0 .../ios/Classes/FLTLocalAuthPlugin.m | 0 .../{ => local_auth}/ios/local_auth.podspec | 0 .../{ => local_auth}/lib/auth_strings.dart | 0 .../{ => local_auth}/lib/error_codes.dart | 0 .../{ => local_auth}/lib/local_auth.dart | 0 .../local_auth/{ => local_auth}/pubspec.yaml | 0 .../test/local_auth_test.dart | 0 .../local_auth_platform_interface/AUTHORS | 67 ++++++++++ .../CHANGELOG.md | 3 + .../local_auth_platform_interface/LICENSE | 25 ++++ .../local_auth_platform_interface/README.md | 26 ++++ .../analysis_options.yaml | 4 + .../lib/local_auth_platform_interface.dart | 116 ++++++++++++++++++ .../lib/types/auth_strings.dart | 10 ++ .../lib/types/biometric_type.dart | 5 + .../pubspec.yaml | 22 ++++ 92 files changed, 278 insertions(+) rename packages/local_auth/{ => local_auth}/AUTHORS (100%) rename packages/local_auth/{ => local_auth}/CHANGELOG.md (100%) rename packages/local_auth/{ => local_auth}/LICENSE (100%) rename packages/local_auth/{ => local_auth}/README.md (100%) rename packages/local_auth/{ => local_auth}/android/build.gradle (100%) rename packages/local_auth/{ => local_auth}/android/lint-baseline.xml (100%) rename packages/local_auth/{ => local_auth}/android/settings.gradle (100%) rename packages/local_auth/{ => local_auth}/android/src/main/AndroidManifest.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java (100%) rename packages/local_auth/{ => local_auth}/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/fingerprint_initial_icon.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/fingerprint_success_icon.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/fingerprint_warning_icon.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/ic_done_white_24dp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/ic_priority_high_white_24dp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/layout/go_to_setting.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/layout/scan_fp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/values/colors.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/values/dimens.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/values/styles.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java (100%) rename packages/local_auth/{ => local_auth}/example/README.md (100%) rename packages/local_auth/{ => local_auth}/example/android/app/build.gradle (100%) rename packages/local_auth/{ => local_auth}/example/android/app/gradle/wrapper/gradle-wrapper.properties (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/AndroidManifest.xml (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/build.gradle (100%) rename packages/local_auth/{ => local_auth}/example/android/gradle.properties (100%) rename packages/local_auth/{ => local_auth}/example/android/gradle/wrapper/gradle-wrapper.properties (100%) rename packages/local_auth/{ => local_auth}/example/android/settings.gradle (100%) rename packages/local_auth/{ => local_auth}/example/android/settings_aar.gradle (100%) rename packages/local_auth/{ => local_auth}/example/integration_test/local_auth_test.dart (100%) rename packages/local_auth/{ => local_auth}/example/ios/Flutter/AppFrameworkInfo.plist (100%) rename packages/local_auth/{ => local_auth}/example/ios/Flutter/Debug.xcconfig (100%) rename packages/local_auth/{ => local_auth}/example/ios/Flutter/Release.xcconfig (100%) rename packages/local_auth/{ => local_auth}/example/ios/Podfile (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcodeproj/project.pbxproj (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcworkspace/contents.xcworkspacedata (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/AppDelegate.h (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/AppDelegate.m (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Base.lproj/LaunchScreen.storyboard (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Base.lproj/Main.storyboard (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Info.plist (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/main.m (100%) rename packages/local_auth/{ => local_auth}/example/ios/RunnerTests/FLTLocalAuthPluginTests.m (100%) rename packages/local_auth/{ => local_auth}/example/ios/RunnerTests/Info.plist (100%) rename packages/local_auth/{ => local_auth}/example/lib/main.dart (100%) rename packages/local_auth/{ => local_auth}/example/pubspec.yaml (100%) rename packages/local_auth/{ => local_auth}/example/test_driver/integration_test.dart (100%) rename packages/local_auth/{ => local_auth}/ios/Assets/.gitkeep (100%) rename packages/local_auth/{ => local_auth}/ios/Classes/FLTLocalAuthPlugin.h (100%) rename packages/local_auth/{ => local_auth}/ios/Classes/FLTLocalAuthPlugin.m (100%) rename packages/local_auth/{ => local_auth}/ios/local_auth.podspec (100%) rename packages/local_auth/{ => local_auth}/lib/auth_strings.dart (100%) rename packages/local_auth/{ => local_auth}/lib/error_codes.dart (100%) rename packages/local_auth/{ => local_auth}/lib/local_auth.dart (100%) rename packages/local_auth/{ => local_auth}/pubspec.yaml (100%) rename packages/local_auth/{ => local_auth}/test/local_auth_test.dart (100%) create mode 100644 packages/local_auth/local_auth_platform_interface/AUTHORS create mode 100644 packages/local_auth/local_auth_platform_interface/CHANGELOG.md create mode 100644 packages/local_auth/local_auth_platform_interface/LICENSE create mode 100644 packages/local_auth/local_auth_platform_interface/README.md create mode 100644 packages/local_auth/local_auth_platform_interface/analysis_options.yaml create mode 100644 packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart create mode 100644 packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart create mode 100644 packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart create mode 100644 packages/local_auth/local_auth_platform_interface/pubspec.yaml diff --git a/packages/local_auth/AUTHORS b/packages/local_auth/local_auth/AUTHORS similarity index 100% rename from packages/local_auth/AUTHORS rename to packages/local_auth/local_auth/AUTHORS diff --git a/packages/local_auth/CHANGELOG.md b/packages/local_auth/local_auth/CHANGELOG.md similarity index 100% rename from packages/local_auth/CHANGELOG.md rename to packages/local_auth/local_auth/CHANGELOG.md diff --git a/packages/local_auth/LICENSE b/packages/local_auth/local_auth/LICENSE similarity index 100% rename from packages/local_auth/LICENSE rename to packages/local_auth/local_auth/LICENSE diff --git a/packages/local_auth/README.md b/packages/local_auth/local_auth/README.md similarity index 100% rename from packages/local_auth/README.md rename to packages/local_auth/local_auth/README.md diff --git a/packages/local_auth/android/build.gradle b/packages/local_auth/local_auth/android/build.gradle similarity index 100% rename from packages/local_auth/android/build.gradle rename to packages/local_auth/local_auth/android/build.gradle diff --git a/packages/local_auth/android/lint-baseline.xml b/packages/local_auth/local_auth/android/lint-baseline.xml similarity index 100% rename from packages/local_auth/android/lint-baseline.xml rename to packages/local_auth/local_auth/android/lint-baseline.xml diff --git a/packages/local_auth/android/settings.gradle b/packages/local_auth/local_auth/android/settings.gradle similarity index 100% rename from packages/local_auth/android/settings.gradle rename to packages/local_auth/local_auth/android/settings.gradle diff --git a/packages/local_auth/android/src/main/AndroidManifest.xml b/packages/local_auth/local_auth/android/src/main/AndroidManifest.xml similarity index 100% rename from packages/local_auth/android/src/main/AndroidManifest.xml rename to packages/local_auth/local_auth/android/src/main/AndroidManifest.xml diff --git a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java b/packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java similarity index 100% rename from packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java rename to packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java diff --git a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java b/packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java similarity index 100% rename from packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java rename to packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java diff --git a/packages/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml diff --git a/packages/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml diff --git a/packages/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml diff --git a/packages/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml diff --git a/packages/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml diff --git a/packages/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml diff --git a/packages/local_auth/android/src/main/res/layout/go_to_setting.xml b/packages/local_auth/local_auth/android/src/main/res/layout/go_to_setting.xml similarity index 100% rename from packages/local_auth/android/src/main/res/layout/go_to_setting.xml rename to packages/local_auth/local_auth/android/src/main/res/layout/go_to_setting.xml diff --git a/packages/local_auth/android/src/main/res/layout/scan_fp.xml b/packages/local_auth/local_auth/android/src/main/res/layout/scan_fp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/layout/scan_fp.xml rename to packages/local_auth/local_auth/android/src/main/res/layout/scan_fp.xml diff --git a/packages/local_auth/android/src/main/res/values/colors.xml b/packages/local_auth/local_auth/android/src/main/res/values/colors.xml similarity index 100% rename from packages/local_auth/android/src/main/res/values/colors.xml rename to packages/local_auth/local_auth/android/src/main/res/values/colors.xml diff --git a/packages/local_auth/android/src/main/res/values/dimens.xml b/packages/local_auth/local_auth/android/src/main/res/values/dimens.xml similarity index 100% rename from packages/local_auth/android/src/main/res/values/dimens.xml rename to packages/local_auth/local_auth/android/src/main/res/values/dimens.xml diff --git a/packages/local_auth/android/src/main/res/values/styles.xml b/packages/local_auth/local_auth/android/src/main/res/values/styles.xml similarity index 100% rename from packages/local_auth/android/src/main/res/values/styles.xml rename to packages/local_auth/local_auth/android/src/main/res/values/styles.xml diff --git a/packages/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java b/packages/local_auth/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java similarity index 100% rename from packages/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java rename to packages/local_auth/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java diff --git a/packages/local_auth/example/README.md b/packages/local_auth/local_auth/example/README.md similarity index 100% rename from packages/local_auth/example/README.md rename to packages/local_auth/local_auth/example/README.md diff --git a/packages/local_auth/example/android/app/build.gradle b/packages/local_auth/local_auth/example/android/app/build.gradle similarity index 100% rename from packages/local_auth/example/android/app/build.gradle rename to packages/local_auth/local_auth/example/android/app/build.gradle diff --git a/packages/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from packages/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties rename to packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties diff --git a/packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java b/packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java similarity index 100% rename from packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java rename to packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java diff --git a/packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java b/packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java similarity index 100% rename from packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java rename to packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java diff --git a/packages/local_auth/example/android/app/src/main/AndroidManifest.xml b/packages/local_auth/local_auth/example/android/app/src/main/AndroidManifest.xml similarity index 100% rename from packages/local_auth/example/android/app/src/main/AndroidManifest.xml rename to packages/local_auth/local_auth/example/android/app/src/main/AndroidManifest.xml diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/build.gradle b/packages/local_auth/local_auth/example/android/build.gradle similarity index 100% rename from packages/local_auth/example/android/build.gradle rename to packages/local_auth/local_auth/example/android/build.gradle diff --git a/packages/local_auth/example/android/gradle.properties b/packages/local_auth/local_auth/example/android/gradle.properties similarity index 100% rename from packages/local_auth/example/android/gradle.properties rename to packages/local_auth/local_auth/example/android/gradle.properties diff --git a/packages/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from packages/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties rename to packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties diff --git a/packages/local_auth/example/android/settings.gradle b/packages/local_auth/local_auth/example/android/settings.gradle similarity index 100% rename from packages/local_auth/example/android/settings.gradle rename to packages/local_auth/local_auth/example/android/settings.gradle diff --git a/packages/local_auth/example/android/settings_aar.gradle b/packages/local_auth/local_auth/example/android/settings_aar.gradle similarity index 100% rename from packages/local_auth/example/android/settings_aar.gradle rename to packages/local_auth/local_auth/example/android/settings_aar.gradle diff --git a/packages/local_auth/example/integration_test/local_auth_test.dart b/packages/local_auth/local_auth/example/integration_test/local_auth_test.dart similarity index 100% rename from packages/local_auth/example/integration_test/local_auth_test.dart rename to packages/local_auth/local_auth/example/integration_test/local_auth_test.dart diff --git a/packages/local_auth/example/ios/Flutter/AppFrameworkInfo.plist b/packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist similarity index 100% rename from packages/local_auth/example/ios/Flutter/AppFrameworkInfo.plist rename to packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist diff --git a/packages/local_auth/example/ios/Flutter/Debug.xcconfig b/packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig similarity index 100% rename from packages/local_auth/example/ios/Flutter/Debug.xcconfig rename to packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig diff --git a/packages/local_auth/example/ios/Flutter/Release.xcconfig b/packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig similarity index 100% rename from packages/local_auth/example/ios/Flutter/Release.xcconfig rename to packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig diff --git a/packages/local_auth/example/ios/Podfile b/packages/local_auth/local_auth/example/ios/Podfile similarity index 100% rename from packages/local_auth/example/ios/Podfile rename to packages/local_auth/local_auth/example/ios/Podfile diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj similarity index 100% rename from packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj rename to packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from packages/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to packages/local_auth/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/packages/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/local_auth/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from packages/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata rename to packages/local_auth/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/packages/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/local_auth/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from packages/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/local_auth/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/packages/local_auth/example/ios/Runner/AppDelegate.h b/packages/local_auth/local_auth/example/ios/Runner/AppDelegate.h similarity index 100% rename from packages/local_auth/example/ios/Runner/AppDelegate.h rename to packages/local_auth/local_auth/example/ios/Runner/AppDelegate.h diff --git a/packages/local_auth/example/ios/Runner/AppDelegate.m b/packages/local_auth/local_auth/example/ios/Runner/AppDelegate.m similarity index 100% rename from packages/local_auth/example/ios/Runner/AppDelegate.m rename to packages/local_auth/local_auth/example/ios/Runner/AppDelegate.m diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png diff --git a/packages/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/local_auth/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from packages/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard rename to packages/local_auth/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/packages/local_auth/example/ios/Runner/Base.lproj/Main.storyboard b/packages/local_auth/local_auth/example/ios/Runner/Base.lproj/Main.storyboard similarity index 100% rename from packages/local_auth/example/ios/Runner/Base.lproj/Main.storyboard rename to packages/local_auth/local_auth/example/ios/Runner/Base.lproj/Main.storyboard diff --git a/packages/local_auth/example/ios/Runner/Info.plist b/packages/local_auth/local_auth/example/ios/Runner/Info.plist similarity index 100% rename from packages/local_auth/example/ios/Runner/Info.plist rename to packages/local_auth/local_auth/example/ios/Runner/Info.plist diff --git a/packages/local_auth/example/ios/Runner/main.m b/packages/local_auth/local_auth/example/ios/Runner/main.m similarity index 100% rename from packages/local_auth/example/ios/Runner/main.m rename to packages/local_auth/local_auth/example/ios/Runner/main.m diff --git a/packages/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m b/packages/local_auth/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m similarity index 100% rename from packages/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m rename to packages/local_auth/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m diff --git a/packages/local_auth/example/ios/RunnerTests/Info.plist b/packages/local_auth/local_auth/example/ios/RunnerTests/Info.plist similarity index 100% rename from packages/local_auth/example/ios/RunnerTests/Info.plist rename to packages/local_auth/local_auth/example/ios/RunnerTests/Info.plist diff --git a/packages/local_auth/example/lib/main.dart b/packages/local_auth/local_auth/example/lib/main.dart similarity index 100% rename from packages/local_auth/example/lib/main.dart rename to packages/local_auth/local_auth/example/lib/main.dart diff --git a/packages/local_auth/example/pubspec.yaml b/packages/local_auth/local_auth/example/pubspec.yaml similarity index 100% rename from packages/local_auth/example/pubspec.yaml rename to packages/local_auth/local_auth/example/pubspec.yaml diff --git a/packages/local_auth/example/test_driver/integration_test.dart b/packages/local_auth/local_auth/example/test_driver/integration_test.dart similarity index 100% rename from packages/local_auth/example/test_driver/integration_test.dart rename to packages/local_auth/local_auth/example/test_driver/integration_test.dart diff --git a/packages/local_auth/ios/Assets/.gitkeep b/packages/local_auth/local_auth/ios/Assets/.gitkeep similarity index 100% rename from packages/local_auth/ios/Assets/.gitkeep rename to packages/local_auth/local_auth/ios/Assets/.gitkeep diff --git a/packages/local_auth/ios/Classes/FLTLocalAuthPlugin.h b/packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.h similarity index 100% rename from packages/local_auth/ios/Classes/FLTLocalAuthPlugin.h rename to packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.h diff --git a/packages/local_auth/ios/Classes/FLTLocalAuthPlugin.m b/packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.m similarity index 100% rename from packages/local_auth/ios/Classes/FLTLocalAuthPlugin.m rename to packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.m diff --git a/packages/local_auth/ios/local_auth.podspec b/packages/local_auth/local_auth/ios/local_auth.podspec similarity index 100% rename from packages/local_auth/ios/local_auth.podspec rename to packages/local_auth/local_auth/ios/local_auth.podspec diff --git a/packages/local_auth/lib/auth_strings.dart b/packages/local_auth/local_auth/lib/auth_strings.dart similarity index 100% rename from packages/local_auth/lib/auth_strings.dart rename to packages/local_auth/local_auth/lib/auth_strings.dart diff --git a/packages/local_auth/lib/error_codes.dart b/packages/local_auth/local_auth/lib/error_codes.dart similarity index 100% rename from packages/local_auth/lib/error_codes.dart rename to packages/local_auth/local_auth/lib/error_codes.dart diff --git a/packages/local_auth/lib/local_auth.dart b/packages/local_auth/local_auth/lib/local_auth.dart similarity index 100% rename from packages/local_auth/lib/local_auth.dart rename to packages/local_auth/local_auth/lib/local_auth.dart diff --git a/packages/local_auth/pubspec.yaml b/packages/local_auth/local_auth/pubspec.yaml similarity index 100% rename from packages/local_auth/pubspec.yaml rename to packages/local_auth/local_auth/pubspec.yaml diff --git a/packages/local_auth/test/local_auth_test.dart b/packages/local_auth/local_auth/test/local_auth_test.dart similarity index 100% rename from packages/local_auth/test/local_auth_test.dart rename to packages/local_auth/local_auth/test/local_auth_test.dart diff --git a/packages/local_auth/local_auth_platform_interface/AUTHORS b/packages/local_auth/local_auth_platform_interface/AUTHORS new file mode 100644 index 000000000000..d5694690c247 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/AUTHORS @@ -0,0 +1,67 @@ +# Below is a list of people and organizations that have contributed +# to the Flutter project. Names should be added to the list like so: +# +# Name/Organization + +Google Inc. +The Chromium Authors +German Saprykin +Benjamin Sauer +larsenthomasj@gmail.com +Ali Bitek +Pol Batlló +Anatoly Pulyaevskiy +Hayden Flinner +Stefano Rodriguez +Salvatore Giordano +Brian Armstrong +Paul DeMarco +Fabricio Nogueira +Simon Lightfoot +Ashton Thomas +Thomas Danner +Diego Velásquez +Hajime Nakamura +Tuyển Vũ Xuân +Miguel Ruivo +Sarthak Verma +Mike Diarmid +Invertase +Elliot Hesp +Vince Varga +Aawaz Gyawali +EUI Limited +Katarina Sheremet +Thomas Stockx +Sarbagya Dhaubanjar +Ozkan Eksi +Rishab Nayak +ko2ic +Jonathan Younger +Jose Sanchez +Debkanchan Samadder +Audrius Karosevicius +Lukasz Piliszczuk +SoundReply Solutions GmbH +Rafal Wachol +Pau Picas +Christian Weder +Alexandru Tuca +Christian Weder +Rhodes Davis Jr. +Luigi Agosti +Quentin Le Guennec +Koushik Ravikumar +Nissim Dsilva +Giancarlo Rocha +Ryo Miyake +Théo Champion +Kazuki Yamaguchi +Eitan Schwartz +Chris Rutkowski +Juan Alvarez +Aleksandr Yurkovskiy +Anton Borries +Alex Li +Rahul Raj <64.rahulraj@gmail.com> +Bodhi Mulders diff --git a/packages/local_auth/local_auth_platform_interface/CHANGELOG.md b/packages/local_auth/local_auth_platform_interface/CHANGELOG.md new file mode 100644 index 000000000000..0d8803f93540 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/CHANGELOG.md @@ -0,0 +1,3 @@ +## 1.0.0 + +* Initial release. diff --git a/packages/local_auth/local_auth_platform_interface/LICENSE b/packages/local_auth/local_auth_platform_interface/LICENSE new file mode 100644 index 000000000000..c6823b81eb84 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/LICENSE @@ -0,0 +1,25 @@ +Copyright 2013 The Flutter Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/local_auth/local_auth_platform_interface/README.md b/packages/local_auth/local_auth_platform_interface/README.md new file mode 100644 index 000000000000..3b01ced7b93b --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/README.md @@ -0,0 +1,26 @@ +# local_auth_platform_interface + +A common platform interface for the [`local_auth`][1] plugin. + +This interface allows platform-specific implementations of the `local_auth` +plugin, as well as the plugin itself, to ensure they are supporting the +same interface. + +# Usage + +To implement a new platform-specific implementation of `local_auth`, extend +[`LocalAuthPlatform`][2] with an implementation that performs the +platform-specific behavior, and when you register your plugin, set the default +`LocalAuthPlatform` by calling +`LocalAuthPlatform.instance = MyLocalAuthPlatform()`. + +# Note on breaking changes + +Strongly prefer non-breaking changes (such as adding a method to the interface) +over breaking changes for this package. + +See https://flutter.dev/go/platform-interface-breaking-changes for a discussion +on why a less-clean interface is preferable to a breaking change. + +[1]: ../local_auth +[2]: lib/local_auth_platform_interface.dart diff --git a/packages/local_auth/local_auth_platform_interface/analysis_options.yaml b/packages/local_auth/local_auth_platform_interface/analysis_options.yaml new file mode 100644 index 000000000000..a5744c1cfbe7 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart new file mode 100644 index 000000000000..833004b7e032 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart @@ -0,0 +1,116 @@ +// Copyright 2013 The Flutter 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 'package:local_auth_platform_interface/types/biometric_type.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +/// The interface that implementations of local_auth must implement. +/// +/// Platform implementations should extend this class rather than implement it as `local_auth` +/// does not consider newly added methods to be breaking changes. Extending this class +/// (using `extends`) ensures that the subclass will get the default implementation, while +/// platform implementations that `implements` this interface will be broken by newly added +/// [LocalAuthPlatform] methods. +abstract class LocalAuthPlatform extends PlatformInterface { + /// Constructs a LocalAuthPlatform. + LocalAuthPlatform() : super(token: _token); + + static final Object _token = Object(); + + static LocalAuthPlatform _instance = DefaultLocalAuthPlatform(); + + /// The default instance of [LocalAuthPlatform] to use. + /// + /// Defaults to [DefaultLocalAuthPlatform]. + static LocalAuthPlatform get instance => _instance; + + /// Platform-specific plugins should set this with their own platform-specific + /// class that extends [LocalAuthPlatform] when they register themselves. + static set instance(LocalAuthPlatform instance) { + PlatformInterface.verifyToken(instance, _token); + _instance = instance; + } + + /// Authenticates the user with biometrics available on the device while also + /// allowing the user to use device authentication - pin, pattern, passcode. + /// + /// Returns a [Future] holding true, if the user successfully authenticated, + /// false otherwise. + /// + /// [localizedReason] is the message to show to user while prompting them + /// for authentication. This is typically along the lines of: 'Please scan + /// your finger to access MyApp.'. This must not be empty. + /// + /// [useErrorDialogs] = true means the system will attempt to handle user + /// fixable issues encountered while authenticating. For instance, if + /// fingerprint reader exists on the phone but there's no fingerprint + /// registered, the plugin will attempt to take the user to settings to add + /// one. Anything that is not user fixable, such as no biometric sensor on + /// device, will be returned as a [PlatformException]. + /// + /// [stickyAuth] is used when the application goes into background for any + /// reason while the authentication is in progress. Due to security reasons, + /// the authentication has to be stopped at that time. If stickyAuth is set + /// to true, authentication resumes when the app is resumed. If it is set to + /// false (default), then as soon as app is paused a failure message is sent + /// back to Dart and it is up to the client app to restart authentication or + /// do something else. + /// + /// Provide [authStrings] if you want to + /// customize messages in the dialogs. + /// + /// Setting [sensitiveTransaction] to true enables platform specific + /// precautions. For instance, on face unlock, Android opens a confirmation + /// dialog after the face is recognized to make sure the user meant to unlock + /// their phone. + /// + /// Setting [biometricOnly] to true prevents authenticates from using non-biometric + /// local authentication such as pin, passcode, and passcode. + /// + /// Throws an [PlatformException] if there were technical problems with local + /// authentication (e.g. lack of relevant hardware). This might throw + /// [PlatformException] with error code [otherOperatingSystem] on the iOS + /// simulator. + Future authenticate({ + required String localizedReason, + bool useErrorDialogs = true, + bool stickyAuth = false, + required Map authStrings, + bool sensitiveTransaction = true, + bool biometricOnly = false, + }) async { + throw UnimplementedError('authenticate() has not been implemented.'); + } + + /// Returns a list of enrolled biometrics. + /// + /// Returns a [Future] List with the following possibilities: + /// - BiometricType.face + /// - BiometricType.fingerprint + /// - BiometricType.iris (not yet implemented) + Future> getAvailableBiometrics() async { + throw UnimplementedError( + 'getAvailableBiometrics() has not been implemented.'); + } + + /// Returns true if device is capable of checking biometrics or is able to + /// fail over to device credentials. + /// + /// Returns a [Future] bool true or false: + Future isDeviceSupported() async { + throw UnimplementedError('isDeviceSupported() has not been implemented.'); + } + + /// Returns true if auth was cancelled successfully. + /// Returns false if there was some error or no auth in progress. + /// + /// Returns [Future] bool true or false: + Future stopAuthentication() async { + throw UnimplementedError('stopAuthentication() has not been implemented.'); + } +} + +/// The default interface implementation acting as a placeholder for +/// the native implementation to be set. +class DefaultLocalAuthPlatform extends LocalAuthPlatform {} diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart new file mode 100644 index 000000000000..0ad81392edb9 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart @@ -0,0 +1,10 @@ +// Copyright 2013 The Flutter 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 'package:intl/intl.dart'; + +String get goToSettings => Intl.message('Go to settings', + desc: 'Message showed on a button that the user can click to go to ' + 'settings pages from the current dialog. It is used on both Android ' + 'and iOS side. Maximum 30 characters.'); diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart new file mode 100644 index 000000000000..23556ab37caa --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart @@ -0,0 +1,5 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +enum BiometricType { face, fingerprint, iris } diff --git a/packages/local_auth/local_auth_platform_interface/pubspec.yaml b/packages/local_auth/local_auth_platform_interface/pubspec.yaml new file mode 100644 index 000000000000..0f88856bf4ee --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/pubspec.yaml @@ -0,0 +1,22 @@ +name: local_auth_platform_interface +description: A common platform interface for the local_auth plugin. +repository: https://github.com/flutter/plugins/tree/master/packages/local_auth/local_auth_platform_interface +issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 +# NOTE: We strongly prefer non-breaking changes, even at the expense of a +# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes +version: 1.0.0 + +environment: + sdk: ">=2.14.0 <3.0.0" + flutter: ">=2.8.0" + +dependencies: + flutter: + sdk: flutter + plugin_platform_interface: ^2.1.2 + intl: ^0.17.0 + +dev_dependencies: + flutter_test: + sdk: flutter + mockito: ^5.0.0 \ No newline at end of file From 414d74b8147700a4df47deac089f2f96e800ee11 Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Wed, 26 Jan 2022 15:11:37 +0100 Subject: [PATCH 02/13] Fix format --- packages/local_auth/local_auth/pubspec.yaml | 2 +- packages/local_auth/local_auth_platform_interface/pubspec.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/local_auth/local_auth/pubspec.yaml b/packages/local_auth/local_auth/pubspec.yaml index 08215c566040..cd9d0d9760f4 100644 --- a/packages/local_auth/local_auth/pubspec.yaml +++ b/packages/local_auth/local_auth/pubspec.yaml @@ -1,7 +1,7 @@ name: local_auth description: Flutter plugin for Android and iOS devices to allow local authentication via fingerprint, touch ID, face ID, passcode, pin, or pattern. -repository: https://github.com/flutter/plugins/tree/main/packages/local_auth +repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/local_auth issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 version: 1.1.10 diff --git a/packages/local_auth/local_auth_platform_interface/pubspec.yaml b/packages/local_auth/local_auth_platform_interface/pubspec.yaml index 0f88856bf4ee..cdc8f3d31a0c 100644 --- a/packages/local_auth/local_auth_platform_interface/pubspec.yaml +++ b/packages/local_auth/local_auth_platform_interface/pubspec.yaml @@ -1,7 +1,7 @@ name: local_auth_platform_interface description: A common platform interface for the local_auth plugin. repository: https://github.com/flutter/plugins/tree/master/packages/local_auth/local_auth_platform_interface -issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 +issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes version: 1.0.0 From c35fd925c2e1179be3d1197c97cce6a0a86c70f7 Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Wed, 26 Jan 2022 15:20:24 +0100 Subject: [PATCH 03/13] Fix analysis issues --- .../analysis_options.yaml | 4 ---- .../lib/types/auth_strings.dart | 7 +++++-- .../lib/types/biometric_type.dart | 10 +++++++++- .../local_auth_platform_interface/pubspec.yaml | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) delete mode 100644 packages/local_auth/local_auth_platform_interface/analysis_options.yaml diff --git a/packages/local_auth/local_auth_platform_interface/analysis_options.yaml b/packages/local_auth/local_auth_platform_interface/analysis_options.yaml deleted file mode 100644 index a5744c1cfbe7..000000000000 --- a/packages/local_auth/local_auth_platform_interface/analysis_options.yaml +++ /dev/null @@ -1,4 +0,0 @@ -include: package:flutter_lints/flutter.yaml - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart index 0ad81392edb9..be75ea1fe880 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart @@ -4,7 +4,10 @@ import 'package:intl/intl.dart'; +/// Message shown on a button that the user can click to go to settings pages +/// from the current dialog. It is used on both Android and iOS sides. +/// Maximum 30 characters. String get goToSettings => Intl.message('Go to settings', - desc: 'Message showed on a button that the user can click to go to ' + desc: 'Message shown on a button that the user can click to go to ' 'settings pages from the current dialog. It is used on both Android ' - 'and iOS side. Maximum 30 characters.'); + 'and iOS sides. Maximum 30 characters.'); diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart index 23556ab37caa..84a75cc4c3c5 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart @@ -2,4 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -enum BiometricType { face, fingerprint, iris } +/// Various types of biometric authentication. +enum BiometricType { + /// Face authentication. + face, + /// Fingerprint authentication. + fingerprint, + /// Iris authentication. + iris, +} diff --git a/packages/local_auth/local_auth_platform_interface/pubspec.yaml b/packages/local_auth/local_auth_platform_interface/pubspec.yaml index cdc8f3d31a0c..f04268926ebd 100644 --- a/packages/local_auth/local_auth_platform_interface/pubspec.yaml +++ b/packages/local_auth/local_auth_platform_interface/pubspec.yaml @@ -13,8 +13,8 @@ environment: dependencies: flutter: sdk: flutter - plugin_platform_interface: ^2.1.2 intl: ^0.17.0 + plugin_platform_interface: ^2.1.2 dev_dependencies: flutter_test: From 2c6a9a9dec8eb7be78741e63d4228e692a534b6d Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Wed, 26 Jan 2022 15:24:32 +0100 Subject: [PATCH 04/13] Fix format --- .../local_auth_platform_interface/lib/types/biometric_type.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart index 84a75cc4c3c5..4265b5ef9ad1 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart @@ -6,8 +6,10 @@ enum BiometricType { /// Face authentication. face, + /// Fingerprint authentication. fingerprint, + /// Iris authentication. iris, } From bd35a9f9b606fab56ebb03985f2bc967a52d449b Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Thu, 27 Jan 2022 10:00:30 +0100 Subject: [PATCH 05/13] Move local_auth plugin into a subfolder in preparation for federation migration --- packages/local_auth/{ => local_auth}/AUTHORS | 0 packages/local_auth/{ => local_auth}/CHANGELOG.md | 0 packages/local_auth/{ => local_auth}/LICENSE | 0 packages/local_auth/{ => local_auth}/README.md | 0 .../{ => local_auth}/android/build.gradle | 0 .../{ => local_auth}/android/lint-baseline.xml | 0 .../{ => local_auth}/android/settings.gradle | 0 .../android/src/main/AndroidManifest.xml | 0 .../plugins/localauth/AuthenticationHelper.java | 0 .../flutter/plugins/localauth/LocalAuthPlugin.java | 0 .../main/res/drawable/fingerprint_initial_icon.xml | 0 .../main/res/drawable/fingerprint_success_icon.xml | 0 .../main/res/drawable/fingerprint_warning_icon.xml | 0 .../src/main/res/drawable/ic_done_white_24dp.xml | 0 .../main/res/drawable/ic_fingerprint_white_24dp.xml | 0 .../res/drawable/ic_priority_high_white_24dp.xml | 0 .../android/src/main/res/layout/go_to_setting.xml | 0 .../android/src/main/res/layout/scan_fp.xml | 0 .../android/src/main/res/values/colors.xml | 0 .../android/src/main/res/values/dimens.xml | 0 .../android/src/main/res/values/styles.xml | 0 .../io/flutter/plugins/localauth/LocalAuthTest.java | 0 .../local_auth/{ => local_auth}/example/README.md | 0 .../example/android/app/build.gradle | 0 .../app/gradle/wrapper/gradle-wrapper.properties | 0 .../io/flutter/plugins/DartIntegrationTest.java | 0 .../localauth/FlutterFragmentActivityTest.java | 0 .../android/app/src/main/AndroidManifest.xml | 0 .../app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../app/src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../{ => local_auth}/example/android/build.gradle | 0 .../example/android/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 .../example/android/settings.gradle | 0 .../example/android/settings_aar.gradle | 0 .../example/integration_test/local_auth_test.dart | 0 .../example/ios/Flutter/AppFrameworkInfo.plist | 0 .../example/ios/Flutter/Debug.xcconfig | 0 .../example/ios/Flutter/Release.xcconfig | 0 .../local_auth/{ => local_auth}/example/ios/Podfile | 0 .../example/ios/Runner.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../xcshareddata/xcschemes/Runner.xcscheme | 0 .../ios/Runner.xcworkspace/contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../example/ios/Runner/AppDelegate.h | 0 .../example/ios/Runner/AppDelegate.m | 0 .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin .../AppIcon.appiconset/Icon-App-83.5x83.5@2x.png | Bin .../ios/Runner/Base.lproj/LaunchScreen.storyboard | 0 .../example/ios/Runner/Base.lproj/Main.storyboard | 0 .../{ => local_auth}/example/ios/Runner/Info.plist | 0 .../{ => local_auth}/example/ios/Runner/main.m | 0 .../ios/RunnerTests/FLTLocalAuthPluginTests.m | 0 .../example/ios/RunnerTests/Info.plist | 0 .../{ => local_auth}/example/lib/main.dart | 0 .../{ => local_auth}/example/pubspec.yaml | 0 .../example/test_driver/integration_test.dart | 0 .../local_auth/{ => local_auth}/ios/Assets/.gitkeep | 0 .../ios/Classes/FLTLocalAuthPlugin.h | 0 .../ios/Classes/FLTLocalAuthPlugin.m | 0 .../{ => local_auth}/ios/local_auth.podspec | 0 .../{ => local_auth}/lib/auth_strings.dart | 0 .../{ => local_auth}/lib/error_codes.dart | 0 .../local_auth/{ => local_auth}/lib/local_auth.dart | 0 packages/local_auth/{ => local_auth}/pubspec.yaml | 2 +- .../{ => local_auth}/test/local_auth_test.dart | 0 83 files changed, 1 insertion(+), 1 deletion(-) rename packages/local_auth/{ => local_auth}/AUTHORS (100%) rename packages/local_auth/{ => local_auth}/CHANGELOG.md (100%) rename packages/local_auth/{ => local_auth}/LICENSE (100%) rename packages/local_auth/{ => local_auth}/README.md (100%) rename packages/local_auth/{ => local_auth}/android/build.gradle (100%) rename packages/local_auth/{ => local_auth}/android/lint-baseline.xml (100%) rename packages/local_auth/{ => local_auth}/android/settings.gradle (100%) rename packages/local_auth/{ => local_auth}/android/src/main/AndroidManifest.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java (100%) rename packages/local_auth/{ => local_auth}/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/fingerprint_initial_icon.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/fingerprint_success_icon.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/fingerprint_warning_icon.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/ic_done_white_24dp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/drawable/ic_priority_high_white_24dp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/layout/go_to_setting.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/layout/scan_fp.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/values/colors.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/values/dimens.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/main/res/values/styles.xml (100%) rename packages/local_auth/{ => local_auth}/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java (100%) rename packages/local_auth/{ => local_auth}/example/README.md (100%) rename packages/local_auth/{ => local_auth}/example/android/app/build.gradle (100%) rename packages/local_auth/{ => local_auth}/example/android/app/gradle/wrapper/gradle-wrapper.properties (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/AndroidManifest.xml (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename packages/local_auth/{ => local_auth}/example/android/build.gradle (100%) rename packages/local_auth/{ => local_auth}/example/android/gradle.properties (100%) rename packages/local_auth/{ => local_auth}/example/android/gradle/wrapper/gradle-wrapper.properties (100%) rename packages/local_auth/{ => local_auth}/example/android/settings.gradle (100%) rename packages/local_auth/{ => local_auth}/example/android/settings_aar.gradle (100%) rename packages/local_auth/{ => local_auth}/example/integration_test/local_auth_test.dart (100%) rename packages/local_auth/{ => local_auth}/example/ios/Flutter/AppFrameworkInfo.plist (100%) rename packages/local_auth/{ => local_auth}/example/ios/Flutter/Debug.xcconfig (100%) rename packages/local_auth/{ => local_auth}/example/ios/Flutter/Release.xcconfig (100%) rename packages/local_auth/{ => local_auth}/example/ios/Podfile (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcodeproj/project.pbxproj (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcworkspace/contents.xcworkspacedata (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/AppDelegate.h (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/AppDelegate.m (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Base.lproj/LaunchScreen.storyboard (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Base.lproj/Main.storyboard (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/Info.plist (100%) rename packages/local_auth/{ => local_auth}/example/ios/Runner/main.m (100%) rename packages/local_auth/{ => local_auth}/example/ios/RunnerTests/FLTLocalAuthPluginTests.m (100%) rename packages/local_auth/{ => local_auth}/example/ios/RunnerTests/Info.plist (100%) rename packages/local_auth/{ => local_auth}/example/lib/main.dart (100%) rename packages/local_auth/{ => local_auth}/example/pubspec.yaml (100%) rename packages/local_auth/{ => local_auth}/example/test_driver/integration_test.dart (100%) rename packages/local_auth/{ => local_auth}/ios/Assets/.gitkeep (100%) rename packages/local_auth/{ => local_auth}/ios/Classes/FLTLocalAuthPlugin.h (100%) rename packages/local_auth/{ => local_auth}/ios/Classes/FLTLocalAuthPlugin.m (100%) rename packages/local_auth/{ => local_auth}/ios/local_auth.podspec (100%) rename packages/local_auth/{ => local_auth}/lib/auth_strings.dart (100%) rename packages/local_auth/{ => local_auth}/lib/error_codes.dart (100%) rename packages/local_auth/{ => local_auth}/lib/local_auth.dart (100%) rename packages/local_auth/{ => local_auth}/pubspec.yaml (97%) rename packages/local_auth/{ => local_auth}/test/local_auth_test.dart (100%) diff --git a/packages/local_auth/AUTHORS b/packages/local_auth/local_auth/AUTHORS similarity index 100% rename from packages/local_auth/AUTHORS rename to packages/local_auth/local_auth/AUTHORS diff --git a/packages/local_auth/CHANGELOG.md b/packages/local_auth/local_auth/CHANGELOG.md similarity index 100% rename from packages/local_auth/CHANGELOG.md rename to packages/local_auth/local_auth/CHANGELOG.md diff --git a/packages/local_auth/LICENSE b/packages/local_auth/local_auth/LICENSE similarity index 100% rename from packages/local_auth/LICENSE rename to packages/local_auth/local_auth/LICENSE diff --git a/packages/local_auth/README.md b/packages/local_auth/local_auth/README.md similarity index 100% rename from packages/local_auth/README.md rename to packages/local_auth/local_auth/README.md diff --git a/packages/local_auth/android/build.gradle b/packages/local_auth/local_auth/android/build.gradle similarity index 100% rename from packages/local_auth/android/build.gradle rename to packages/local_auth/local_auth/android/build.gradle diff --git a/packages/local_auth/android/lint-baseline.xml b/packages/local_auth/local_auth/android/lint-baseline.xml similarity index 100% rename from packages/local_auth/android/lint-baseline.xml rename to packages/local_auth/local_auth/android/lint-baseline.xml diff --git a/packages/local_auth/android/settings.gradle b/packages/local_auth/local_auth/android/settings.gradle similarity index 100% rename from packages/local_auth/android/settings.gradle rename to packages/local_auth/local_auth/android/settings.gradle diff --git a/packages/local_auth/android/src/main/AndroidManifest.xml b/packages/local_auth/local_auth/android/src/main/AndroidManifest.xml similarity index 100% rename from packages/local_auth/android/src/main/AndroidManifest.xml rename to packages/local_auth/local_auth/android/src/main/AndroidManifest.xml diff --git a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java b/packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java similarity index 100% rename from packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java rename to packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/AuthenticationHelper.java diff --git a/packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java b/packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java similarity index 100% rename from packages/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java rename to packages/local_auth/local_auth/android/src/main/java/io/flutter/plugins/localauth/LocalAuthPlugin.java diff --git a/packages/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_initial_icon.xml diff --git a/packages/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_success_icon.xml diff --git a/packages/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/fingerprint_warning_icon.xml diff --git a/packages/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/ic_done_white_24dp.xml diff --git a/packages/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/ic_fingerprint_white_24dp.xml diff --git a/packages/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml b/packages/local_auth/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml rename to packages/local_auth/local_auth/android/src/main/res/drawable/ic_priority_high_white_24dp.xml diff --git a/packages/local_auth/android/src/main/res/layout/go_to_setting.xml b/packages/local_auth/local_auth/android/src/main/res/layout/go_to_setting.xml similarity index 100% rename from packages/local_auth/android/src/main/res/layout/go_to_setting.xml rename to packages/local_auth/local_auth/android/src/main/res/layout/go_to_setting.xml diff --git a/packages/local_auth/android/src/main/res/layout/scan_fp.xml b/packages/local_auth/local_auth/android/src/main/res/layout/scan_fp.xml similarity index 100% rename from packages/local_auth/android/src/main/res/layout/scan_fp.xml rename to packages/local_auth/local_auth/android/src/main/res/layout/scan_fp.xml diff --git a/packages/local_auth/android/src/main/res/values/colors.xml b/packages/local_auth/local_auth/android/src/main/res/values/colors.xml similarity index 100% rename from packages/local_auth/android/src/main/res/values/colors.xml rename to packages/local_auth/local_auth/android/src/main/res/values/colors.xml diff --git a/packages/local_auth/android/src/main/res/values/dimens.xml b/packages/local_auth/local_auth/android/src/main/res/values/dimens.xml similarity index 100% rename from packages/local_auth/android/src/main/res/values/dimens.xml rename to packages/local_auth/local_auth/android/src/main/res/values/dimens.xml diff --git a/packages/local_auth/android/src/main/res/values/styles.xml b/packages/local_auth/local_auth/android/src/main/res/values/styles.xml similarity index 100% rename from packages/local_auth/android/src/main/res/values/styles.xml rename to packages/local_auth/local_auth/android/src/main/res/values/styles.xml diff --git a/packages/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java b/packages/local_auth/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java similarity index 100% rename from packages/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java rename to packages/local_auth/local_auth/android/src/test/java/io/flutter/plugins/localauth/LocalAuthTest.java diff --git a/packages/local_auth/example/README.md b/packages/local_auth/local_auth/example/README.md similarity index 100% rename from packages/local_auth/example/README.md rename to packages/local_auth/local_auth/example/README.md diff --git a/packages/local_auth/example/android/app/build.gradle b/packages/local_auth/local_auth/example/android/app/build.gradle similarity index 100% rename from packages/local_auth/example/android/app/build.gradle rename to packages/local_auth/local_auth/example/android/app/build.gradle diff --git a/packages/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from packages/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties rename to packages/local_auth/local_auth/example/android/app/gradle/wrapper/gradle-wrapper.properties diff --git a/packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java b/packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java similarity index 100% rename from packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java rename to packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/DartIntegrationTest.java diff --git a/packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java b/packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java similarity index 100% rename from packages/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java rename to packages/local_auth/local_auth/example/android/app/src/androidTest/java/io/flutter/plugins/localauth/FlutterFragmentActivityTest.java diff --git a/packages/local_auth/example/android/app/src/main/AndroidManifest.xml b/packages/local_auth/local_auth/example/android/app/src/main/AndroidManifest.xml similarity index 100% rename from packages/local_auth/example/android/app/src/main/AndroidManifest.xml rename to packages/local_auth/local_auth/example/android/app/src/main/AndroidManifest.xml diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from packages/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to packages/local_auth/local_auth/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/packages/local_auth/example/android/build.gradle b/packages/local_auth/local_auth/example/android/build.gradle similarity index 100% rename from packages/local_auth/example/android/build.gradle rename to packages/local_auth/local_auth/example/android/build.gradle diff --git a/packages/local_auth/example/android/gradle.properties b/packages/local_auth/local_auth/example/android/gradle.properties similarity index 100% rename from packages/local_auth/example/android/gradle.properties rename to packages/local_auth/local_auth/example/android/gradle.properties diff --git a/packages/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from packages/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties rename to packages/local_auth/local_auth/example/android/gradle/wrapper/gradle-wrapper.properties diff --git a/packages/local_auth/example/android/settings.gradle b/packages/local_auth/local_auth/example/android/settings.gradle similarity index 100% rename from packages/local_auth/example/android/settings.gradle rename to packages/local_auth/local_auth/example/android/settings.gradle diff --git a/packages/local_auth/example/android/settings_aar.gradle b/packages/local_auth/local_auth/example/android/settings_aar.gradle similarity index 100% rename from packages/local_auth/example/android/settings_aar.gradle rename to packages/local_auth/local_auth/example/android/settings_aar.gradle diff --git a/packages/local_auth/example/integration_test/local_auth_test.dart b/packages/local_auth/local_auth/example/integration_test/local_auth_test.dart similarity index 100% rename from packages/local_auth/example/integration_test/local_auth_test.dart rename to packages/local_auth/local_auth/example/integration_test/local_auth_test.dart diff --git a/packages/local_auth/example/ios/Flutter/AppFrameworkInfo.plist b/packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist similarity index 100% rename from packages/local_auth/example/ios/Flutter/AppFrameworkInfo.plist rename to packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist diff --git a/packages/local_auth/example/ios/Flutter/Debug.xcconfig b/packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig similarity index 100% rename from packages/local_auth/example/ios/Flutter/Debug.xcconfig rename to packages/local_auth/local_auth/example/ios/Flutter/Debug.xcconfig diff --git a/packages/local_auth/example/ios/Flutter/Release.xcconfig b/packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig similarity index 100% rename from packages/local_auth/example/ios/Flutter/Release.xcconfig rename to packages/local_auth/local_auth/example/ios/Flutter/Release.xcconfig diff --git a/packages/local_auth/example/ios/Podfile b/packages/local_auth/local_auth/example/ios/Podfile similarity index 100% rename from packages/local_auth/example/ios/Podfile rename to packages/local_auth/local_auth/example/ios/Podfile diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj similarity index 100% rename from packages/local_auth/example/ios/Runner.xcodeproj/project.pbxproj rename to packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from packages/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme similarity index 100% rename from packages/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme rename to packages/local_auth/local_auth/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme diff --git a/packages/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/local_auth/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata similarity index 100% rename from packages/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata rename to packages/local_auth/local_auth/example/ios/Runner.xcworkspace/contents.xcworkspacedata diff --git a/packages/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/local_auth/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from packages/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to packages/local_auth/local_auth/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/packages/local_auth/example/ios/Runner/AppDelegate.h b/packages/local_auth/local_auth/example/ios/Runner/AppDelegate.h similarity index 100% rename from packages/local_auth/example/ios/Runner/AppDelegate.h rename to packages/local_auth/local_auth/example/ios/Runner/AppDelegate.h diff --git a/packages/local_auth/example/ios/Runner/AppDelegate.m b/packages/local_auth/local_auth/example/ios/Runner/AppDelegate.m similarity index 100% rename from packages/local_auth/example/ios/Runner/AppDelegate.m rename to packages/local_auth/local_auth/example/ios/Runner/AppDelegate.m diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png diff --git a/packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png similarity index 100% rename from packages/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png rename to packages/local_auth/local_auth/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png diff --git a/packages/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/local_auth/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from packages/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard rename to packages/local_auth/local_auth/example/ios/Runner/Base.lproj/LaunchScreen.storyboard diff --git a/packages/local_auth/example/ios/Runner/Base.lproj/Main.storyboard b/packages/local_auth/local_auth/example/ios/Runner/Base.lproj/Main.storyboard similarity index 100% rename from packages/local_auth/example/ios/Runner/Base.lproj/Main.storyboard rename to packages/local_auth/local_auth/example/ios/Runner/Base.lproj/Main.storyboard diff --git a/packages/local_auth/example/ios/Runner/Info.plist b/packages/local_auth/local_auth/example/ios/Runner/Info.plist similarity index 100% rename from packages/local_auth/example/ios/Runner/Info.plist rename to packages/local_auth/local_auth/example/ios/Runner/Info.plist diff --git a/packages/local_auth/example/ios/Runner/main.m b/packages/local_auth/local_auth/example/ios/Runner/main.m similarity index 100% rename from packages/local_auth/example/ios/Runner/main.m rename to packages/local_auth/local_auth/example/ios/Runner/main.m diff --git a/packages/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m b/packages/local_auth/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m similarity index 100% rename from packages/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m rename to packages/local_auth/local_auth/example/ios/RunnerTests/FLTLocalAuthPluginTests.m diff --git a/packages/local_auth/example/ios/RunnerTests/Info.plist b/packages/local_auth/local_auth/example/ios/RunnerTests/Info.plist similarity index 100% rename from packages/local_auth/example/ios/RunnerTests/Info.plist rename to packages/local_auth/local_auth/example/ios/RunnerTests/Info.plist diff --git a/packages/local_auth/example/lib/main.dart b/packages/local_auth/local_auth/example/lib/main.dart similarity index 100% rename from packages/local_auth/example/lib/main.dart rename to packages/local_auth/local_auth/example/lib/main.dart diff --git a/packages/local_auth/example/pubspec.yaml b/packages/local_auth/local_auth/example/pubspec.yaml similarity index 100% rename from packages/local_auth/example/pubspec.yaml rename to packages/local_auth/local_auth/example/pubspec.yaml diff --git a/packages/local_auth/example/test_driver/integration_test.dart b/packages/local_auth/local_auth/example/test_driver/integration_test.dart similarity index 100% rename from packages/local_auth/example/test_driver/integration_test.dart rename to packages/local_auth/local_auth/example/test_driver/integration_test.dart diff --git a/packages/local_auth/ios/Assets/.gitkeep b/packages/local_auth/local_auth/ios/Assets/.gitkeep similarity index 100% rename from packages/local_auth/ios/Assets/.gitkeep rename to packages/local_auth/local_auth/ios/Assets/.gitkeep diff --git a/packages/local_auth/ios/Classes/FLTLocalAuthPlugin.h b/packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.h similarity index 100% rename from packages/local_auth/ios/Classes/FLTLocalAuthPlugin.h rename to packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.h diff --git a/packages/local_auth/ios/Classes/FLTLocalAuthPlugin.m b/packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.m similarity index 100% rename from packages/local_auth/ios/Classes/FLTLocalAuthPlugin.m rename to packages/local_auth/local_auth/ios/Classes/FLTLocalAuthPlugin.m diff --git a/packages/local_auth/ios/local_auth.podspec b/packages/local_auth/local_auth/ios/local_auth.podspec similarity index 100% rename from packages/local_auth/ios/local_auth.podspec rename to packages/local_auth/local_auth/ios/local_auth.podspec diff --git a/packages/local_auth/lib/auth_strings.dart b/packages/local_auth/local_auth/lib/auth_strings.dart similarity index 100% rename from packages/local_auth/lib/auth_strings.dart rename to packages/local_auth/local_auth/lib/auth_strings.dart diff --git a/packages/local_auth/lib/error_codes.dart b/packages/local_auth/local_auth/lib/error_codes.dart similarity index 100% rename from packages/local_auth/lib/error_codes.dart rename to packages/local_auth/local_auth/lib/error_codes.dart diff --git a/packages/local_auth/lib/local_auth.dart b/packages/local_auth/local_auth/lib/local_auth.dart similarity index 100% rename from packages/local_auth/lib/local_auth.dart rename to packages/local_auth/local_auth/lib/local_auth.dart diff --git a/packages/local_auth/pubspec.yaml b/packages/local_auth/local_auth/pubspec.yaml similarity index 97% rename from packages/local_auth/pubspec.yaml rename to packages/local_auth/local_auth/pubspec.yaml index 08215c566040..cd9d0d9760f4 100644 --- a/packages/local_auth/pubspec.yaml +++ b/packages/local_auth/local_auth/pubspec.yaml @@ -1,7 +1,7 @@ name: local_auth description: Flutter plugin for Android and iOS devices to allow local authentication via fingerprint, touch ID, face ID, passcode, pin, or pattern. -repository: https://github.com/flutter/plugins/tree/main/packages/local_auth +repository: https://github.com/flutter/plugins/tree/main/packages/local_auth/local_auth issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 version: 1.1.10 diff --git a/packages/local_auth/test/local_auth_test.dart b/packages/local_auth/local_auth/test/local_auth_test.dart similarity index 100% rename from packages/local_auth/test/local_auth_test.dart rename to packages/local_auth/local_auth/test/local_auth_test.dart From e10bbb855c694527d353f7f81dda2b5ad0c3e8ae Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Thu, 27 Jan 2022 11:36:10 +0100 Subject: [PATCH 06/13] Process PR Feedback --- .../lib/default_method_channel_platform.dart | 65 +++++++ .../lib/local_auth_platform_interface.dart | 39 +--- .../lib/types/auth_options.dart | 40 ++++ .../lib/types/biometric_type.dart | 10 + ...default_methbod_channel_platform_test.dart | 172 ++++++++++++++++++ 5 files changed, 294 insertions(+), 32 deletions(-) create mode 100644 packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart create mode 100644 packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart create mode 100644 packages/local_auth/local_auth_platform_interface/test/default_methbod_channel_platform_test.dart diff --git a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart new file mode 100644 index 000000000000..5256f3d6070d --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart @@ -0,0 +1,65 @@ +// Copyright 2013 The Flutter 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 'package:flutter/services.dart'; +import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; +import 'package:local_auth_platform_interface/types/auth_options.dart'; +import 'package:local_auth_platform_interface/types/biometric_type.dart'; + +const MethodChannel _channel = MethodChannel('plugins.flutter.io/local_auth'); + +/// The default interface implementation acting as a placeholder for +/// the native implementation to be set. +class DefaultLocalAuthPlatform extends LocalAuthPlatform { + @override + Future authenticate({ + required String localizedReason, + required Map authStrings, + AuthenticationOptions options = const AuthenticationOptions(), + }) async { + assert(localizedReason.isNotEmpty); + final Map args = { + 'localizedReason': localizedReason, + 'useErrorDialogs': options.useErrorDialogs, + 'stickyAuth': options.stickyAuth, + 'sensitiveTransaction': options.sensitiveTransaction, + 'biometricOnly': options.biometricOnly, + }; + args.addAll(authStrings); + return (await _channel.invokeMethod('authenticate', args)) ?? false; + } + + @override + Future> getAvailableBiometrics() async { + final List result = (await _channel.invokeListMethod( + 'getAvailableBiometrics', + )) ?? + []; + final List biometrics = []; + for (final String value in result) { + switch (value) { + case 'face': + biometrics.add(BiometricType.face); + break; + case 'fingerprint': + biometrics.add(BiometricType.fingerprint); + break; + case 'iris': + biometrics.add(BiometricType.iris); + break; + case 'undefined': + break; + } + } + return biometrics; + } + + @override + Future isDeviceSupported() async => + (await _channel.invokeMethod('isDeviceSupported')) ?? false; + + @override + Future stopAuthentication() async => + await _channel.invokeMethod('stopAuthentication') ?? false; +} diff --git a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart index 833004b7e032..32f039e86063 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:local_auth_platform_interface/default_method_channel_platform.dart'; +import 'package:local_auth_platform_interface/types/auth_options.dart'; import 'package:local_auth_platform_interface/types/biometric_type.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; @@ -25,8 +27,9 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// Defaults to [DefaultLocalAuthPlatform]. static LocalAuthPlatform get instance => _instance; - /// Platform-specific plugins should set this with their own platform-specific - /// class that extends [LocalAuthPlatform] when they register themselves. + /// Platform-specific implementations should set this with their own + /// platform-specific class that extends [LocalAuthPlatform] when they + /// register themselves. static set instance(LocalAuthPlatform instance) { PlatformInterface.verifyToken(instance, _token); _instance = instance; @@ -42,31 +45,10 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// for authentication. This is typically along the lines of: 'Please scan /// your finger to access MyApp.'. This must not be empty. /// - /// [useErrorDialogs] = true means the system will attempt to handle user - /// fixable issues encountered while authenticating. For instance, if - /// fingerprint reader exists on the phone but there's no fingerprint - /// registered, the plugin will attempt to take the user to settings to add - /// one. Anything that is not user fixable, such as no biometric sensor on - /// device, will be returned as a [PlatformException]. - /// - /// [stickyAuth] is used when the application goes into background for any - /// reason while the authentication is in progress. Due to security reasons, - /// the authentication has to be stopped at that time. If stickyAuth is set - /// to true, authentication resumes when the app is resumed. If it is set to - /// false (default), then as soon as app is paused a failure message is sent - /// back to Dart and it is up to the client app to restart authentication or - /// do something else. - /// /// Provide [authStrings] if you want to /// customize messages in the dialogs. /// - /// Setting [sensitiveTransaction] to true enables platform specific - /// precautions. For instance, on face unlock, Android opens a confirmation - /// dialog after the face is recognized to make sure the user meant to unlock - /// their phone. - /// - /// Setting [biometricOnly] to true prevents authenticates from using non-biometric - /// local authentication such as pin, passcode, and passcode. + /// Provide [options] for configuring further authentication related options. /// /// Throws an [PlatformException] if there were technical problems with local /// authentication (e.g. lack of relevant hardware). This might throw @@ -74,11 +56,8 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// simulator. Future authenticate({ required String localizedReason, - bool useErrorDialogs = true, - bool stickyAuth = false, required Map authStrings, - bool sensitiveTransaction = true, - bool biometricOnly = false, + AuthenticationOptions options = const AuthenticationOptions(), }) async { throw UnimplementedError('authenticate() has not been implemented.'); } @@ -110,7 +89,3 @@ abstract class LocalAuthPlatform extends PlatformInterface { throw UnimplementedError('stopAuthentication() has not been implemented.'); } } - -/// The default interface implementation acting as a placeholder for -/// the native implementation to be set. -class DefaultLocalAuthPlatform extends LocalAuthPlatform {} diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart new file mode 100644 index 000000000000..8a8efc6c2411 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart @@ -0,0 +1,40 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Options wrapper for [LocalAuthPlatform.authenticate] parameters. +class AuthenticationOptions { + /// Construct a new instance. + const AuthenticationOptions({ + this.useErrorDialogs = true, + this.stickyAuth = false, + this.sensitiveTransaction = true, + this.biometricOnly = false, + }); + + /// Whether the system will attempt to handle user fixable issues encountered + /// while authenticating. For instance, if fingerprint reader exists on the + /// phone but there's no fingerprint registered, the plugin will attempt to + /// take the user to settings to add one. Anything that is not user fixable, + /// such as no biometric sensor on device, will be returned + /// as a [PlatformException]. + final bool useErrorDialogs; + + /// Used when the application goes into background for any reason while the + /// authentication is in progress. Due to security reasons, the + /// authentication has to be stopped at that time. If stickyAuth is set to + /// true, authentication resumes when the app is resumed. If it is set to + /// false (default), then as soon as app is paused a failure message is sent + /// back to Dart and it is up to the client app to restart authentication or + /// do something else. + final bool stickyAuth; + + /// Whether platform specific precautions are enabled. For instance, on face + /// unlock, Android opens a confirmation dialog after the face is recognized + /// to make sure the user meant to unlock their phone. + final bool sensitiveTransaction; + + /// Prevent authentications from using non-biometric local authentication + /// such as pin, passcode, and passcode. + final bool biometricOnly; +} diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart index 4265b5ef9ad1..9c7d2eb8d83e 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart @@ -12,4 +12,14 @@ enum BiometricType { /// Iris authentication. iris, + + /// Any biometric (e.g. fingerprint, iris, or face) on the device that meets + /// or exceeds the requirements for Class 3 (formerly Strong), as defined + /// by the Android CDD. Android only. + strong, + + /// Any biometric (e.g. fingerprint, iris, or face) on the device that meets + /// or exceeds the requirements for Class 2 (formerly Weak), as defined + /// by the Android CDD. Android only. + weak, } diff --git a/packages/local_auth/local_auth_platform_interface/test/default_methbod_channel_platform_test.dart b/packages/local_auth/local_auth_platform_interface/test/default_methbod_channel_platform_test.dart new file mode 100644 index 000000000000..d1ee3c504c40 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/test/default_methbod_channel_platform_test.dart @@ -0,0 +1,172 @@ +// Copyright 2013 The Flutter 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:async'; + +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:local_auth_platform_interface/default_method_channel_platform.dart'; +import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; +import 'package:local_auth_platform_interface/types/auth_options.dart'; +import 'package:local_auth_platform_interface/types/biometric_type.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + const MethodChannel channel = MethodChannel( + 'plugins.flutter.io/local_auth', + ); + + final List log = []; + late LocalAuthPlatform localAuthentication; + + test('getAvailableBiometrics', () async { + channel.setMockMethodCallHandler((MethodCall methodCall) { + log.add(methodCall); + return Future.value([]); + }); + localAuthentication = DefaultLocalAuthPlatform(); + log.clear(); + await localAuthentication.getAvailableBiometrics(); + expect( + log, + [ + isMethodCall('getAvailableBiometrics', arguments: null), + ], + ); + }); + + group('Boolean returning methods', () { + setUp(() { + channel.setMockMethodCallHandler((MethodCall methodCall) { + log.add(methodCall); + return Future.value(true); + }); + localAuthentication = DefaultLocalAuthPlatform(); + log.clear(); + }); + + test('isDeviceSupported', () async { + await localAuthentication.isDeviceSupported(); + expect( + log, + [ + isMethodCall('isDeviceSupported', arguments: null), + ], + ); + }); + + test('stopAuthentication', () async { + await localAuthentication.stopAuthentication(); + expect( + log, + [ + isMethodCall('stopAuthentication', arguments: null), + ], + ); + }); + + group('authenticate with device auth fail over', () { + test('authenticate with no args.', () async { + await localAuthentication.authenticate( + authStrings: {}, + localizedReason: 'Needs secure', + options: const AuthenticationOptions(biometricOnly: true), + ); + expect( + log, + [ + isMethodCall( + 'authenticate', + arguments: { + 'localizedReason': 'Needs secure', + 'useErrorDialogs': true, + 'stickyAuth': false, + 'sensitiveTransaction': true, + 'biometricOnly': true, + }, + ), + ], + ); + }); + + test('authenticate with no sensitive transaction.', () async { + await localAuthentication.authenticate( + authStrings: {}, + localizedReason: 'Insecure', + options: const AuthenticationOptions( + sensitiveTransaction: false, + useErrorDialogs: false, + biometricOnly: true, + ), + ); + expect( + log, + [ + isMethodCall( + 'authenticate', + arguments: { + 'localizedReason': 'Insecure', + 'useErrorDialogs': false, + 'stickyAuth': false, + 'sensitiveTransaction': false, + 'biometricOnly': true, + }, + ), + ], + ); + }); + }); + + group('authenticate with biometrics only', () { + test('authenticate with no args.', () async { + await localAuthentication.authenticate( + authStrings: {}, + localizedReason: 'Needs secure', + ); + expect( + log, + [ + isMethodCall( + 'authenticate', + arguments: { + 'localizedReason': 'Needs secure', + 'useErrorDialogs': true, + 'stickyAuth': false, + 'sensitiveTransaction': true, + 'biometricOnly': false, + }, + ), + ], + ); + }); + + test('authenticate with no sensitive transaction.', () async { + await localAuthentication.authenticate( + authStrings: {}, + localizedReason: 'Insecure', + options: const AuthenticationOptions( + sensitiveTransaction: false, + useErrorDialogs: false, + ), + ); + expect( + log, + [ + isMethodCall( + 'authenticate', + arguments: { + 'localizedReason': 'Insecure', + 'useErrorDialogs': false, + 'stickyAuth': false, + 'sensitiveTransaction': false, + 'biometricOnly': false, + }, + ), + ], + ); + }); + }); + }); +} From c3d5a1b2bacc037287beb2a45d8a9f5c5fa3708f Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Thu, 27 Jan 2022 11:37:42 +0100 Subject: [PATCH 07/13] Fix typo in file name --- ...atform_test.dart => default_method_channel_platform_test.dart} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/local_auth/local_auth_platform_interface/test/{default_methbod_channel_platform_test.dart => default_method_channel_platform_test.dart} (100%) diff --git a/packages/local_auth/local_auth_platform_interface/test/default_methbod_channel_platform_test.dart b/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart similarity index 100% rename from packages/local_auth/local_auth_platform_interface/test/default_methbod_channel_platform_test.dart rename to packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart From 24765b28c105ff667637214e37e3b13e7220e34d Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Mon, 31 Jan 2022 09:42:15 +0100 Subject: [PATCH 08/13] Update doc in default method channel platform --- .../lib/default_method_channel_platform.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart index 5256f3d6070d..1a44fcf2a5ac 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart @@ -11,6 +11,11 @@ const MethodChannel _channel = MethodChannel('plugins.flutter.io/local_auth'); /// The default interface implementation acting as a placeholder for /// the native implementation to be set. +/// +/// This implementation is not used by any of the implementations in this +/// repository, and exists only for backward compatibility with any +/// clients that were relying on internal details of the method channel +/// in the pre-federated plugin. class DefaultLocalAuthPlatform extends LocalAuthPlatform { @override Future authenticate({ From 81ba7e84a15f9daab268e844de21a5de0c97bfb8 Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Mon, 31 Jan 2022 15:09:45 +0100 Subject: [PATCH 09/13] Implement PR feedback --- .../lib/default_method_channel_platform.dart | 5 ++++ .../lib/local_auth_platform_interface.dart | 23 +++++++++++-------- .../lib/types/auth_options.dart | 16 ++++++------- .../lib/types/auth_strings.dart | 2 +- .../lib/types/biometric_type.dart | 14 ++++++----- .../default_method_channel_platform_test.dart | 7 ++++++ 6 files changed, 43 insertions(+), 24 deletions(-) diff --git a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart index 1a44fcf2a5ac..866ae44828e5 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart @@ -60,6 +60,11 @@ class DefaultLocalAuthPlatform extends LocalAuthPlatform { return biometrics; } + @override + Future canCheckBiometrics() async { + return (await getAvailableBiometrics()).isNotEmpty; + } + @override Future isDeviceSupported() async => (await _channel.invokeMethod('isDeviceSupported')) ?? false; diff --git a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart index 32f039e86063..ad363601ee85 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart @@ -38,8 +38,7 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// Authenticates the user with biometrics available on the device while also /// allowing the user to use device authentication - pin, pattern, passcode. /// - /// Returns a [Future] holding true, if the user successfully authenticated, - /// false otherwise. + /// Returns true if the user successfully authenticated, false otherwise. /// /// [localizedReason] is the message to show to user while prompting them /// for authentication. This is typically along the lines of: 'Please scan @@ -50,7 +49,7 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// /// Provide [options] for configuring further authentication related options. /// - /// Throws an [PlatformException] if there were technical problems with local + /// Throws a [PlatformException] if there were technical problems with local /// authentication (e.g. lack of relevant hardware). This might throw /// [PlatformException] with error code [otherOperatingSystem] on the iOS /// simulator. @@ -62,12 +61,19 @@ abstract class LocalAuthPlatform extends PlatformInterface { throw UnimplementedError('authenticate() has not been implemented.'); } + /// Returns true if the device is capable of checking biometrics. + Future canCheckBiometrics() async { + throw UnimplementedError('canCheckBiometrics() has not been implemented.'); + } + /// Returns a list of enrolled biometrics. /// - /// Returns a [Future] List with the following possibilities: + /// Possible values include: /// - BiometricType.face /// - BiometricType.fingerprint /// - BiometricType.iris (not yet implemented) + /// - BiometricType.strong + /// - BiometricType.weak Future> getAvailableBiometrics() async { throw UnimplementedError( 'getAvailableBiometrics() has not been implemented.'); @@ -75,16 +81,15 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// Returns true if device is capable of checking biometrics or is able to /// fail over to device credentials. - /// - /// Returns a [Future] bool true or false: Future isDeviceSupported() async { throw UnimplementedError('isDeviceSupported() has not been implemented.'); } - /// Returns true if auth was cancelled successfully. - /// Returns false if there was some error or no auth in progress. + /// Cancels any authentication currently in progress. /// - /// Returns [Future] bool true or false: + /// Returns true if auth was cancelled successfully. + /// Returns false if there was no authentication in progress, + /// or an error occurred. Future stopAuthentication() async { throw UnimplementedError('stopAuthentication() has not been implemented.'); } diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart index 8a8efc6c2411..f858126dcb63 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart @@ -4,7 +4,7 @@ /// Options wrapper for [LocalAuthPlatform.authenticate] parameters. class AuthenticationOptions { - /// Construct a new instance. + /// Constructs a new instance. const AuthenticationOptions({ this.useErrorDialogs = true, this.stickyAuth = false, @@ -12,12 +12,12 @@ class AuthenticationOptions { this.biometricOnly = false, }); - /// Whether the system will attempt to handle user fixable issues encountered - /// while authenticating. For instance, if fingerprint reader exists on the - /// phone but there's no fingerprint registered, the plugin will attempt to + /// Whether the system will attempt to handle user-fixable issues encountered + /// while authenticating. For instance, if a fingerprint reader exists on the + /// device but there's no fingerprint registered, the plugin might attempt to /// take the user to settings to add one. Anything that is not user fixable, - /// such as no biometric sensor on device, will be returned - /// as a [PlatformException]. + /// such as no biometric sensor on device, will still result in + /// a [PlatformException]. final bool useErrorDialogs; /// Used when the application goes into background for any reason while the @@ -31,10 +31,10 @@ class AuthenticationOptions { /// Whether platform specific precautions are enabled. For instance, on face /// unlock, Android opens a confirmation dialog after the face is recognized - /// to make sure the user meant to unlock their phone. + /// to make sure the user meant to unlock their device. final bool sensitiveTransaction; /// Prevent authentications from using non-biometric local authentication - /// such as pin, passcode, and passcode. + /// such as pin, passcode, or pattern. final bool biometricOnly; } diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart index be75ea1fe880..d1604cb9df1c 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart @@ -5,7 +5,7 @@ import 'package:intl/intl.dart'; /// Message shown on a button that the user can click to go to settings pages -/// from the current dialog. It is used on both Android and iOS sides. +/// from the current dialog. It is used on applicable platforms. /// Maximum 30 characters. String get goToSettings => Intl.message('Go to settings', desc: 'Message shown on a button that the user can click to go to ' diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart index 9c7d2eb8d83e..c4efd0deb3cb 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart @@ -3,6 +3,8 @@ // found in the LICENSE file. /// Various types of biometric authentication. +/// Some platforms report specific biometric types, while others report only +/// classifications like strong and weak. enum BiometricType { /// Face authentication. face, @@ -13,13 +15,13 @@ enum BiometricType { /// Iris authentication. iris, - /// Any biometric (e.g. fingerprint, iris, or face) on the device that meets - /// or exceeds the requirements for Class 3 (formerly Strong), as defined - /// by the Android CDD. Android only. + /// Any biometric (e.g. fingerprint, iris, or face) on the device that the + /// platform API considers to be strong. For example, on Android this + /// corresponds to Class 3. strong, - /// Any biometric (e.g. fingerprint, iris, or face) on the device that meets - /// or exceeds the requirements for Class 2 (formerly Weak), as defined - /// by the Android CDD. Android only. + /// Any biometric (e.g. fingerprint, iris, or face) on the device that the + /// platform API considers to be strong. For example, on Android this + /// corresponds to Class 2. weak, } diff --git a/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart b/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart index d1ee3c504c40..64d8aa0284af 100644 --- a/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart +++ b/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart @@ -21,6 +21,13 @@ void main() { final List log = []; late LocalAuthPlatform localAuthentication; + test( + 'DefaultLocalAuthPlatform is registered as the default platform implementation', + () async { + expect(LocalAuthPlatform.instance, + const TypeMatcher()); + }); + test('getAvailableBiometrics', () async { channel.setMockMethodCallHandler((MethodCall methodCall) { log.add(methodCall); From c4086e8dfd5c848f29c5325dbb9b94671cb6e03b Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Mon, 7 Feb 2022 09:47:33 +0100 Subject: [PATCH 10/13] Remove auth strings from platform interface --- .../lib/types/auth_strings.dart | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart deleted file mode 100644 index d1604cb9df1c..000000000000 --- a/packages/local_auth/local_auth_platform_interface/lib/types/auth_strings.dart +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2013 The Flutter 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 'package:intl/intl.dart'; - -/// Message shown on a button that the user can click to go to settings pages -/// from the current dialog. It is used on applicable platforms. -/// Maximum 30 characters. -String get goToSettings => Intl.message('Go to settings', - desc: 'Message shown on a button that the user can click to go to ' - 'settings pages from the current dialog. It is used on both Android ' - 'and iOS sides. Maximum 30 characters.'); From c0a867efb44ae9961498d63e9fabcf49f5121aaf Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Mon, 7 Feb 2022 10:23:27 +0100 Subject: [PATCH 11/13] Change interface for handing platform specific messages Change interface for handling platform specific messages --- .../lib/default_method_channel_platform.dart | 7 +++++-- .../lib/local_auth_platform_interface.dart | 5 +++-- .../lib/types/auth_messages.dart | 13 +++++++++++++ .../test/default_method_channel_platform_test.dart | 9 +++++---- 4 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart diff --git a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart index 866ae44828e5..b239f2368b83 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart @@ -4,6 +4,7 @@ import 'package:flutter/services.dart'; import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; +import 'package:local_auth_platform_interface/types/auth_messages.dart'; import 'package:local_auth_platform_interface/types/auth_options.dart'; import 'package:local_auth_platform_interface/types/biometric_type.dart'; @@ -20,7 +21,7 @@ class DefaultLocalAuthPlatform extends LocalAuthPlatform { @override Future authenticate({ required String localizedReason, - required Map authStrings, + required Iterable authMessages, AuthenticationOptions options = const AuthenticationOptions(), }) async { assert(localizedReason.isNotEmpty); @@ -31,7 +32,9 @@ class DefaultLocalAuthPlatform extends LocalAuthPlatform { 'sensitiveTransaction': options.sensitiveTransaction, 'biometricOnly': options.biometricOnly, }; - args.addAll(authStrings); + for (final AuthMessages messages in authMessages) { + args.addAll(messages.args); + } return (await _channel.invokeMethod('authenticate', args)) ?? false; } diff --git a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart index ad363601ee85..824725837794 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:local_auth_platform_interface/default_method_channel_platform.dart'; +import 'package:local_auth_platform_interface/types/auth_messages.dart'; import 'package:local_auth_platform_interface/types/auth_options.dart'; import 'package:local_auth_platform_interface/types/biometric_type.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; @@ -44,7 +45,7 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// for authentication. This is typically along the lines of: 'Please scan /// your finger to access MyApp.'. This must not be empty. /// - /// Provide [authStrings] if you want to + /// Provide [authMessages] if you want to /// customize messages in the dialogs. /// /// Provide [options] for configuring further authentication related options. @@ -55,7 +56,7 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// simulator. Future authenticate({ required String localizedReason, - required Map authStrings, + required Iterable authMessages, AuthenticationOptions options = const AuthenticationOptions(), }) async { throw UnimplementedError('authenticate() has not been implemented.'); diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart new file mode 100644 index 000000000000..a08cf10325e5 --- /dev/null +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart @@ -0,0 +1,13 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Abstract class for storing platform specific strings. +abstract class AuthMessages { + + /// Constructs an instance of [AuthMessages]. + const AuthMessages(); + + /// Returns all platform specific messages as a map. + Map get args; +} diff --git a/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart b/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart index 64d8aa0284af..d3a7bda7effc 100644 --- a/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart +++ b/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart @@ -8,6 +8,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:local_auth_platform_interface/default_method_channel_platform.dart'; import 'package:local_auth_platform_interface/local_auth_platform_interface.dart'; +import 'package:local_auth_platform_interface/types/auth_messages.dart'; import 'package:local_auth_platform_interface/types/auth_options.dart'; import 'package:local_auth_platform_interface/types/biometric_type.dart'; @@ -77,7 +78,7 @@ void main() { group('authenticate with device auth fail over', () { test('authenticate with no args.', () async { await localAuthentication.authenticate( - authStrings: {}, + authMessages: [], localizedReason: 'Needs secure', options: const AuthenticationOptions(biometricOnly: true), ); @@ -100,7 +101,7 @@ void main() { test('authenticate with no sensitive transaction.', () async { await localAuthentication.authenticate( - authStrings: {}, + authMessages: [], localizedReason: 'Insecure', options: const AuthenticationOptions( sensitiveTransaction: false, @@ -129,7 +130,7 @@ void main() { group('authenticate with biometrics only', () { test('authenticate with no args.', () async { await localAuthentication.authenticate( - authStrings: {}, + authMessages: [], localizedReason: 'Needs secure', ); expect( @@ -151,7 +152,7 @@ void main() { test('authenticate with no sensitive transaction.', () async { await localAuthentication.authenticate( - authStrings: {}, + authMessages: [], localizedReason: 'Insecure', options: const AuthenticationOptions( sensitiveTransaction: false, From 083689fd2ad44b1c73ecfd7031f36bf9502a8974 Mon Sep 17 00:00:00 2001 From: "Bodhi Mulders (BeMacized)" Date: Mon, 7 Feb 2022 14:43:17 +0100 Subject: [PATCH 12/13] Add equality for AuthenticationOptions --- .../lib/types/auth_messages.dart | 1 - .../lib/types/auth_options.dart | 20 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart index a08cf10325e5..978d2d066421 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart @@ -4,7 +4,6 @@ /// Abstract class for storing platform specific strings. abstract class AuthMessages { - /// Constructs an instance of [AuthMessages]. const AuthMessages(); diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart index f858126dcb63..c4b646c0b97a 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_options.dart @@ -2,7 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/foundation.dart'; + /// Options wrapper for [LocalAuthPlatform.authenticate] parameters. +@immutable class AuthenticationOptions { /// Constructs a new instance. const AuthenticationOptions({ @@ -37,4 +40,21 @@ class AuthenticationOptions { /// Prevent authentications from using non-biometric local authentication /// such as pin, passcode, or pattern. final bool biometricOnly; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is AuthenticationOptions && + runtimeType == other.runtimeType && + useErrorDialogs == other.useErrorDialogs && + stickyAuth == other.stickyAuth && + sensitiveTransaction == other.sensitiveTransaction && + biometricOnly == other.biometricOnly; + + @override + int get hashCode => + useErrorDialogs.hashCode ^ + stickyAuth.hashCode ^ + sensitiveTransaction.hashCode ^ + biometricOnly.hashCode; } From 92ec8bc287bd9c2744dbd8101a98f26b251fa5db Mon Sep 17 00:00:00 2001 From: Bodhi Mulders Date: Fri, 11 Feb 2022 09:36:25 +0100 Subject: [PATCH 13/13] Process PR feedback --- .../lib/default_method_channel_platform.dart | 6 +++--- .../lib/local_auth_platform_interface.dart | 6 ++++-- .../lib/types/auth_messages.dart | 2 +- .../lib/types/biometric_type.dart | 2 +- .../test/default_method_channel_platform_test.dart | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart index b239f2368b83..c68a3bfb8371 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/default_method_channel_platform.dart @@ -39,7 +39,7 @@ class DefaultLocalAuthPlatform extends LocalAuthPlatform { } @override - Future> getAvailableBiometrics() async { + Future> getEnrolledBiometrics() async { final List result = (await _channel.invokeListMethod( 'getAvailableBiometrics', )) ?? @@ -64,8 +64,8 @@ class DefaultLocalAuthPlatform extends LocalAuthPlatform { } @override - Future canCheckBiometrics() async { - return (await getAvailableBiometrics()).isNotEmpty; + Future deviceSupportsBiometrics() async { + return (await getEnrolledBiometrics()).isNotEmpty; } @override diff --git a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart index 824725837794..b909ee90d12b 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/local_auth_platform_interface.dart @@ -63,7 +63,9 @@ abstract class LocalAuthPlatform extends PlatformInterface { } /// Returns true if the device is capable of checking biometrics. - Future canCheckBiometrics() async { + /// + /// This will return true even if there are no biometrics currently enrolled. + Future deviceSupportsBiometrics() async { throw UnimplementedError('canCheckBiometrics() has not been implemented.'); } @@ -75,7 +77,7 @@ abstract class LocalAuthPlatform extends PlatformInterface { /// - BiometricType.iris (not yet implemented) /// - BiometricType.strong /// - BiometricType.weak - Future> getAvailableBiometrics() async { + Future> getEnrolledBiometrics() async { throw UnimplementedError( 'getAvailableBiometrics() has not been implemented.'); } diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart b/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart index 978d2d066421..d51980d575cf 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/auth_messages.dart @@ -7,6 +7,6 @@ abstract class AuthMessages { /// Constructs an instance of [AuthMessages]. const AuthMessages(); - /// Returns all platform specific messages as a map. + /// Returns all platform-specific messages as a map. Map get args; } diff --git a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart index c4efd0deb3cb..9c335e25624a 100644 --- a/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart +++ b/packages/local_auth/local_auth_platform_interface/lib/types/biometric_type.dart @@ -21,7 +21,7 @@ enum BiometricType { strong, /// Any biometric (e.g. fingerprint, iris, or face) on the device that the - /// platform API considers to be strong. For example, on Android this + /// platform API considers to be weak. For example, on Android this /// corresponds to Class 2. weak, } diff --git a/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart b/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart index d3a7bda7effc..3853fd84c6fc 100644 --- a/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart +++ b/packages/local_auth/local_auth_platform_interface/test/default_method_channel_platform_test.dart @@ -36,7 +36,7 @@ void main() { }); localAuthentication = DefaultLocalAuthPlatform(); log.clear(); - await localAuthentication.getAvailableBiometrics(); + await localAuthentication.getEnrolledBiometrics(); expect( log, [