From 4bbbe62ebda568732a42f6e7738f7b51c25cf23e Mon Sep 17 00:00:00 2001 From: Julian Steenbakker Date: Fri, 8 Oct 2021 11:34:42 +0200 Subject: [PATCH] imp: upgrade compile sdk, fix custom frame --- android/build.gradle | 10 ++-- android/src/main/AndroidManifest.xml | 4 +- .../CustomFramingRectBarcodeView.java | 50 ------------------- .../flutterqr/CustomFramingRectBarcodeView.kt | 45 +++++++++++++++++ .../qr/flutterqr/FlutterQrPlugin.kt | 44 ++++------------ .../net/touchcapture/qr/flutterqr/QRView.kt | 10 ++-- .../net/touchcapture/qr/flutterqr/Shared.kt | 1 - example/android/app/build.gradle | 6 +-- .../android/app/src/main/AndroidManifest.xml | 8 +-- .../qr/flutterqrexample/MainActivity.kt | 6 --- example/android/build.gradle | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 6 +-- example/pubspec.yaml | 2 +- pubspec.yaml | 4 +- 14 files changed, 78 insertions(+), 122 deletions(-) delete mode 100644 android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.java create mode 100644 android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.kt delete mode 100644 example/android/app/src/main/kotlin/net/touchcapture/qr/flutterqrexample/MainActivity.kt diff --git a/android/build.gradle b/android/build.gradle index b5f8a4c..f8a0976 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,14 +2,14 @@ group 'net.touchcapture.qr.flutterqr' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.5.10' + ext.kotlin_version = '1.5.31' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.android.tools.build:gradle:7.0.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -36,9 +36,7 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } - buildFeatures { - viewBinding = true - } + compileOptions { // Flag to enable support for the new language APIs coreLibraryDesugaringEnabled true @@ -51,7 +49,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation('com.journeyapps:zxing-android-embedded:4.1.0') { transitive = false } - implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.zxing:core:3.4.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index ae4f48e..28f2e86 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.java b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.java deleted file mode 100644 index 5203968..0000000 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.java +++ /dev/null @@ -1,50 +0,0 @@ -package net.touchcapture.qr.flutterqr; - -import android.content.Context; -import android.graphics.Rect; -import android.util.AttributeSet; - -import com.journeyapps.barcodescanner.BarcodeView; -import com.journeyapps.barcodescanner.Size; - -public class CustomFramingRectBarcodeView extends BarcodeView { - - private static final int BOTTOM_OFFSET_NOT_SET_VALUE = -1; - - private int bottomOffset = BOTTOM_OFFSET_NOT_SET_VALUE; - - public CustomFramingRectBarcodeView(Context context) { - super(context); - } - - public CustomFramingRectBarcodeView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public CustomFramingRectBarcodeView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - @Override - protected Rect calculateFramingRect(Rect container, Rect surface) { - Rect containerArea = new Rect(container); - boolean intersects = containerArea.intersect(surface);//adjusts the containerArea (code from super.calculateFramingRect) - Rect scanAreaRect = super.calculateFramingRect(container, surface); - if (bottomOffset != BOTTOM_OFFSET_NOT_SET_VALUE) {//if the setFramingRect function was called, then we shift the scan area by Y - Rect scanAreaRectWithOffset = new Rect(scanAreaRect); - scanAreaRectWithOffset.bottom -= bottomOffset; - scanAreaRectWithOffset.top -= bottomOffset; - - boolean belongsToContainer = scanAreaRectWithOffset.intersect(containerArea); - if(belongsToContainer){ - return scanAreaRectWithOffset; - } - } - return scanAreaRect; - } - - public void setFramingRect(int rectWidth, int rectHeight, int bottomOffset) { - this.bottomOffset = bottomOffset; - this.setFramingRectSize(new Size(rectWidth, rectHeight)); - } -} diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.kt new file mode 100644 index 0000000..8a6908d --- /dev/null +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/CustomFramingRectBarcodeView.kt @@ -0,0 +1,45 @@ +package net.touchcapture.qr.flutterqr + +import android.content.Context +import android.graphics.Rect +import android.util.AttributeSet +import com.journeyapps.barcodescanner.BarcodeView +import com.journeyapps.barcodescanner.Size + +class CustomFramingRectBarcodeView : BarcodeView { + private var bottomOffset = BOTTOM_OFFSET_NOT_SET_VALUE + + constructor(context: Context?) : super(context) {} + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {} + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + + override fun calculateFramingRect(container: Rect, surface: Rect): Rect { + val containerArea = Rect(container) + val intersects = + containerArea.intersect(surface) //adjusts the containerArea (code from super.calculateFramingRect) + val scanAreaRect = super.calculateFramingRect(container, surface) + if (bottomOffset != BOTTOM_OFFSET_NOT_SET_VALUE) { //if the setFramingRect function was called, then we shift the scan area by Y + val scanAreaRectWithOffset = Rect(scanAreaRect) + scanAreaRectWithOffset.bottom -= bottomOffset + scanAreaRectWithOffset.top -= bottomOffset + val belongsToContainer = scanAreaRectWithOffset.intersect(containerArea) + if (belongsToContainer) { + return scanAreaRectWithOffset + } + } + return scanAreaRect + } + + fun setFramingRect(rectWidth: Int, rectHeight: Int, bottomOffset: Int) { + this.bottomOffset = bottomOffset + framingRectSize = Size(rectWidth, rectHeight) + } + + companion object { + private const val BOTTOM_OFFSET_NOT_SET_VALUE = -1 + } +} \ No newline at end of file diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt index f096d27..ef37c40 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/FlutterQrPlugin.kt @@ -1,65 +1,43 @@ package net.touchcapture.qr.flutterqr -import android.app.Activity -import android.content.pm.PackageManager import androidx.annotation.NonNull import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.embedding.engine.plugins.activity.ActivityAware import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding -import io.flutter.plugin.common.BinaryMessenger -import io.flutter.plugin.common.PluginRegistry -import io.flutter.plugin.platform.PlatformViewRegistry +import net.touchcapture.qr.flutterqr.Shared.activity class FlutterQrPlugin : FlutterPlugin, ActivityAware { - /** Plugin registration embedding v1 */ - companion object { - @JvmStatic - fun registerWith(registrar: PluginRegistry.Registrar) { - FlutterQrPlugin().onAttachedToV1(registrar) - } - } - - private fun onAttachedToV1(registrar: PluginRegistry.Registrar) { - Shared.registrar = registrar - onAttachedToEngines(registrar.platformViewRegistry(), registrar.messenger(), registrar.activity()) - } - /** Plugin registration embedding v2 */ override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - onAttachedToEngines(flutterPluginBinding.platformViewRegistry, flutterPluginBinding.binaryMessenger, Shared.activity) + if (activity != null) { + activity = activity + } + flutterPluginBinding.platformViewRegistry + .registerViewFactory( + "net.touchcapture.qr.flutterqr/qrview", QRViewFactory(flutterPluginBinding.binaryMessenger)) } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { } - /** Plugin start for both embedding v1 & v2 */ - private fun onAttachedToEngines(platformViewRegistry: PlatformViewRegistry, messenger: BinaryMessenger, activity: Activity?) { - if (activity != null) { - Shared.activity = activity - } - platformViewRegistry - .registerViewFactory( - "net.touchcapture.qr.flutterqr/qrview", QRViewFactory(messenger)) - } - override fun onAttachedToActivity(activityPluginBinding: ActivityPluginBinding) { - Shared.activity = activityPluginBinding.activity + activity = activityPluginBinding.activity Shared.binding = activityPluginBinding } override fun onDetachedFromActivityForConfigChanges() { - Shared.activity = null + activity = null Shared.binding = null } override fun onReattachedToActivityForConfigChanges(activityPluginBinding: ActivityPluginBinding) { - Shared.activity = activityPluginBinding.activity + activity = activityPluginBinding.activity Shared.binding = activityPluginBinding } override fun onDetachedFromActivity() { - Shared.activity = null + activity = null Shared.binding = null } diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt index 8750158..a9b1f64 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt @@ -34,10 +34,6 @@ class QRView(private val context: Context, messenger: BinaryMessenger, private v Shared.binding!!.addRequestPermissionsResultListener(this) } - if (Shared.registrar != null) { - Shared.registrar!!.addRequestPermissionsResultListener(this) - } - channel.setMethodCallHandler(this) Shared.activity?.application?.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { override fun onActivityPaused(p0: Activity) { @@ -304,14 +300,14 @@ class QRView(private val context: Context, messenger: BinaryMessenger, private v permissions: Array?, grantResults: IntArray): Boolean { if(requestCode == Shared.CAMERA_REQUEST_ID + this.id) { - if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + return if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { permissionGranted = true channel.invokeMethod("onPermissionSet", true) - return true + true } else { permissionGranted = false channel.invokeMethod("onPermissionSet", false) - return false + false } } return false diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt index 996df87..df8ed9e 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/Shared.kt @@ -8,5 +8,4 @@ object Shared { const val CAMERA_REQUEST_ID = 513469796 var activity: Activity? = null var binding: ActivityPluginBinding? = null - var registrar: PluginRegistry.Registrar? = null } \ No newline at end of file diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index adb9925..39cfa1f 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -26,7 +26,7 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 30 + compileSdkVersion 31 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -36,7 +36,7 @@ android { applicationId "net.touchcapture.qr.flutterqrexample" // minSdkVersion is determined by Native View. minSdkVersion 20 - targetSdkVersion 30 + targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -56,7 +56,7 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation 'junit:junit:4.13.1' + testImplementation 'junit:junit:4.13.2' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 3407805..d5fb6aa 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -16,17 +16,13 @@ android:label="flutter_qr_example" android:icon="@mipmap/ic_launcher"> - - - =2.12.0 <3.0.0' - flutter: ">=1.10.0" + flutter: ">=1.12.0" dependencies: js: ^0.6.3 @@ -16,7 +16,7 @@ dependencies: sdk: flutter dev_dependencies: - pedantic: ^1.11.0 + flutter_lints: ^1.0.4 flutter: plugin: