From c445f89fc9d65f51ad19d25aabbfd65de9cb3e39 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Mon, 22 Apr 2024 13:40:04 +0200 Subject: [PATCH 1/4] do not explicitly depend on the Kotlin Standard Library --- android/build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 2733a2905..b717a16e7 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,7 +2,6 @@ group 'dev.steenbakker.mobile_scanner' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.7.22' repositories { google() mavenCentral() @@ -10,7 +9,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:8.3.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.22" } } @@ -64,8 +63,6 @@ android { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - def useUnbundled = project.findProperty('dev.steenbakker.mobile_scanner.useUnbundled') ?: false if (useUnbundled.toBoolean()) { // Dynamically downloaded model via Google Play Services From e48a67f0acf38919083fb1e5fd0ec914f5e34a54 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Mon, 22 Apr 2024 14:22:06 +0200 Subject: [PATCH 2/4] fix facing mode check on Safari --- lib/src/web/media_track_constraints_delegate.dart | 4 +++- lib/src/web/media_track_extension.dart | 10 ++++++++++ lib/src/web/mobile_scanner_web.dart | 6 ++++-- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 lib/src/web/media_track_extension.dart diff --git a/lib/src/web/media_track_constraints_delegate.dart b/lib/src/web/media_track_constraints_delegate.dart index 8c5749200..3484ae1c3 100644 --- a/lib/src/web/media_track_constraints_delegate.dart +++ b/lib/src/web/media_track_constraints_delegate.dart @@ -1,5 +1,6 @@ import 'dart:js_interop'; +import 'package:mobile_scanner/src/web/media_track_extension.dart'; import 'package:web/web.dart'; /// This class represents a delegate that manages the constraints for a [MediaStreamTrack]. @@ -19,8 +20,9 @@ final class MediaTrackConstraintsDelegate { final MediaTrackCapabilities capabilities = track.getCapabilities(); final MediaTrackSettings settings = track.getSettings(); + final JSArray? facingModes = capabilities.facingModeNullable; - if (capabilities.facingMode.toDart.isEmpty) { + if (facingModes == null || facingModes.toDart.isEmpty) { return MediaTrackSettings( width: settings.width, height: settings.height, diff --git a/lib/src/web/media_track_extension.dart b/lib/src/web/media_track_extension.dart new file mode 100644 index 000000000..4aafe7ca3 --- /dev/null +++ b/lib/src/web/media_track_extension.dart @@ -0,0 +1,10 @@ +import 'dart:js_interop'; +import 'package:web/web.dart'; + +/// This extension provides nullable properties for [MediaTrackCapabilities], +/// for cases where the properties are not supported by all browsers. +extension NullableMediaTrackCapabilities on MediaTrackCapabilities { + /// The `facingMode` property is not supported on Safari. + @JS('facingMode') + external JSArray? get facingModeNullable; +} diff --git a/lib/src/web/mobile_scanner_web.dart b/lib/src/web/mobile_scanner_web.dart index ab77313f3..fd82acb19 100644 --- a/lib/src/web/mobile_scanner_web.dart +++ b/lib/src/web/mobile_scanner_web.dart @@ -13,6 +13,7 @@ import 'package:mobile_scanner/src/mobile_scanner_view_attributes.dart'; import 'package:mobile_scanner/src/objects/barcode_capture.dart'; import 'package:mobile_scanner/src/objects/start_options.dart'; import 'package:mobile_scanner/src/web/barcode_reader.dart'; +import 'package:mobile_scanner/src/web/media_track_extension.dart'; import 'package:mobile_scanner/src/web/zxing/zxing_barcode_reader.dart'; import 'package:web/web.dart'; @@ -125,10 +126,11 @@ class MobileScannerWeb extends MobileScannerPlatform { final MediaStreamTrack videoTrack = tracks.first; final MediaTrackCapabilities capabilities = videoTrack.getCapabilities(); + final JSArray? facingModes = capabilities.facingModeNullable; - // TODO: this is empty on MacOS, where there is no facing mode, but one, user facing camera. + // TODO: this is an empty array on MacOS Chrome, where there is no facing mode, but one, user facing camera. // Facing mode is not supported by this track, do nothing. - if (capabilities.facingMode.toDart.isEmpty) { + if (facingModes == null || facingModes.toDart.isEmpty) { return; } From cb4fdc5d61a990b41deecf39d4b9c7a67fb143c3 Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Mon, 22 Apr 2024 14:36:11 +0200 Subject: [PATCH 3/4] fix getCapabilities for Firefox --- lib/src/web/media_track_constraints_delegate.dart | 9 ++++++++- lib/src/web/media_track_extension.dart | 8 ++++++++ lib/src/web/mobile_scanner_web.dart | 9 ++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/src/web/media_track_constraints_delegate.dart b/lib/src/web/media_track_constraints_delegate.dart index 3484ae1c3..721dd7f5a 100644 --- a/lib/src/web/media_track_constraints_delegate.dart +++ b/lib/src/web/media_track_constraints_delegate.dart @@ -18,7 +18,14 @@ final class MediaTrackConstraintsDelegate { final MediaStreamTrack track = tracks.first; - final MediaTrackCapabilities capabilities = track.getCapabilities(); + final MediaTrackCapabilities capabilities; + + if (track.getCapabilitiesNullable != null) { + capabilities = track.getCapabilities(); + } else { + capabilities = MediaTrackCapabilities(); + } + final MediaTrackSettings settings = track.getSettings(); final JSArray? facingModes = capabilities.facingModeNullable; diff --git a/lib/src/web/media_track_extension.dart b/lib/src/web/media_track_extension.dart index 4aafe7ca3..2b8743249 100644 --- a/lib/src/web/media_track_extension.dart +++ b/lib/src/web/media_track_extension.dart @@ -1,6 +1,14 @@ import 'dart:js_interop'; import 'package:web/web.dart'; +/// This extension provides nullable properties for [MediaStreamTrack], +/// for cases where the properties are not supported by all browsers. +extension NullableMediaStreamTrackCapabilities on MediaStreamTrack { + /// The `getCapabilities` function is not supported on Firefox. + @JS('getCapabilities') + external JSFunction? get getCapabilitiesNullable; +} + /// This extension provides nullable properties for [MediaTrackCapabilities], /// for cases where the properties are not supported by all browsers. extension NullableMediaTrackCapabilities on MediaTrackCapabilities { diff --git a/lib/src/web/mobile_scanner_web.dart b/lib/src/web/mobile_scanner_web.dart index fd82acb19..cee84d6b8 100644 --- a/lib/src/web/mobile_scanner_web.dart +++ b/lib/src/web/mobile_scanner_web.dart @@ -125,7 +125,14 @@ class MobileScannerWeb extends MobileScannerPlatform { } final MediaStreamTrack videoTrack = tracks.first; - final MediaTrackCapabilities capabilities = videoTrack.getCapabilities(); + final MediaTrackCapabilities capabilities; + + if (videoTrack.getCapabilitiesNullable != null) { + capabilities = videoTrack.getCapabilities(); + } else { + capabilities = MediaTrackCapabilities(); + } + final JSArray? facingModes = capabilities.facingModeNullable; // TODO: this is an empty array on MacOS Chrome, where there is no facing mode, but one, user facing camera. From 0c784cfe740503a0b042e926adbfd779705d985b Mon Sep 17 00:00:00 2001 From: Navaron Bracke Date: Mon, 22 Apr 2024 15:11:02 +0200 Subject: [PATCH 4/4] bump version to 5.0.0 --- CHANGELOG.md | 7 +++++++ pubspec.yaml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2622377a5..1c2954aa2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 5.0.0 + +This major release contains all the changes from the 5.0.0 beta releases, along with the following changes: + +Improvements: +- [Android] Remove the Kotlin Standard Library from the dependencies, as it is automatically included in Kotlin 1.4+ + ## 5.0.0-beta.3 **BREAKING CHANGES:** diff --git a/pubspec.yaml b/pubspec.yaml index 33b425138..d834e2d63 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: mobile_scanner description: A universal barcode and QR code scanner for Flutter based on MLKit. Uses CameraX on Android, AVFoundation on iOS and Apple Vision & AVFoundation on macOS. -version: 5.0.0-beta.3 +version: 5.0.0 repository: https://github.com/juliansteenbakker/mobile_scanner screenshots: