diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a521ed..33c06fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 2.3.2 + +* Update Android plugin to use V2 embedding. + ## 2.3.1 * Full null safety diff --git a/android/build.gradle b/android/build.gradle index c729cbc..ac4e2af 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.5.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -25,7 +25,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 28 + compileSdkVersion 31 sourceSets { main.java.srcDirs += 'src/main/kotlin' diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index fa0e686..d1c2b22 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/android/src/main/kotlin/com/example/flutter_sms/FlutterSmsPlugin.kt b/android/src/main/kotlin/com/example/flutter_sms/FlutterSmsPlugin.kt index 709ffdc..c9f4a7f 100644 --- a/android/src/main/kotlin/com/example/flutter_sms/FlutterSmsPlugin.kt +++ b/android/src/main/kotlin/com/example/flutter_sms/FlutterSmsPlugin.kt @@ -6,36 +6,69 @@ import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result import io.flutter.plugin.common.PluginRegistry.Registrar -import io.flutter.plugin.common.PluginRegistry.ActivityResultListener import android.app.Activity import android.net.Uri import android.content.Intent import android.content.pm.PackageManager import android.os.Build +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 -class FlutterSmsPlugin(registrar: Registrar) : MethodCallHandler { +class FlutterSmsPlugin: FlutterPlugin, MethodCallHandler, ActivityAware { + private lateinit var mChannel: MethodChannel + private var activity: Activity? = null private val REQUEST_CODE_SEND_SMS = 205 - var activity: Activity? = null - private var result: Result? = null + override fun onAttachedToActivity(binding: ActivityPluginBinding) { + activity = binding.activity + } + override fun onDetachedFromActivity() { + activity = null + } + + override fun onDetachedFromActivityForConfigChanges() { + activity = null + } + + override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { + activity = binding.activity + } + + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + setupCallbackChannels(flutterPluginBinding.binaryMessenger) + } + + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + teardown() + } + + private fun setupCallbackChannels(messenger: BinaryMessenger) { + mChannel = MethodChannel(messenger, "flutter_sms") + mChannel.setMethodCallHandler(this) + } + + private fun teardown() { + mChannel.setMethodCallHandler(null) + } + + // V1 embedding entry point. This is deprecated and will be removed in a future Flutter + // release but we leave it here in case someone's app does not utilize the V2 embedding yet. companion object { @JvmStatic fun registerWith(registrar: Registrar) { - val channel = MethodChannel(registrar.messenger(), "flutter_sms") - channel.setMethodCallHandler(FlutterSmsPlugin(registrar)) + val inst = FlutterSmsPlugin() + inst.activity = registrar.activity() + inst.setupCallbackChannels(registrar.messenger()) } } - init { - this.activity = registrar.activity() -// registrar.addActivityResultListener(this) - } - override fun onMethodCall(call: MethodCall, result: Result) { - this.result = result - when { - call.method == "sendSMS" -> { + when (call.method) { + "sendSMS" -> { if (!canSendSMS()) { result.error( "device_not_capable", @@ -46,9 +79,8 @@ class FlutterSmsPlugin(registrar: Registrar) : MethodCallHandler { val message = call.argument("message") val recipients = call.argument("recipients") sendSMS(result, recipients, message!!) - result.success("SMS Sent!") } - call.method == "canSendSMS" -> result.success(canSendSMS()) + "canSendSMS" -> result.success(canSendSMS()) else -> result.notImplemented() } } @@ -59,9 +91,8 @@ class FlutterSmsPlugin(registrar: Registrar) : MethodCallHandler { return false val intent = Intent(Intent.ACTION_SENDTO) intent.data = Uri.parse("smsto:") - val activityInfo = intent.resolveActivityInfo(activity!!.packageManager, intent.flags) + val activityInfo = intent.resolveActivityInfo(activity!!.packageManager, intent.flags.toInt()) return !(activityInfo == null || !activityInfo.exported) - } private fun sendSMS(result: Result, phones: String?, message: String?) { @@ -69,16 +100,7 @@ class FlutterSmsPlugin(registrar: Registrar) : MethodCallHandler { intent.data = Uri.parse("smsto:$phones") intent.putExtra("sms_body", message) intent.putExtra(Intent.EXTRA_TEXT, message) - // intent.putExtra(Intent.EXTRA_STREAM, attachment); activity?.startActivityForResult(intent, REQUEST_CODE_SEND_SMS) + result.success("SMS Sent!") } - -// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent): Boolean { -// if (requestCode == REQUEST_CODE_SEND_SMS && this.result != null) { -// this.result!!.success("finished") -// this.result = null -// return true -// } -// return false -// } } diff --git a/example/.flutter-plugins-dependencies b/example/.flutter-plugins-dependencies index acbc003..e2226cf 100644 --- a/example/.flutter-plugins-dependencies +++ b/example/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_sms","path":"/Users/rodydavis/Developer/GitHub/plugins/packages/flutter_sms/","dependencies":["url_launcher"]},{"name":"url_launcher","path":"/usr/local/Caskroom/flutter/1.2.1/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.3/","dependencies":[]}],"android":[{"name":"flutter_sms","path":"/Users/rodydavis/Developer/GitHub/plugins/packages/flutter_sms/","dependencies":["url_launcher"]},{"name":"url_launcher","path":"/usr/local/Caskroom/flutter/1.2.1/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.3/","dependencies":[]}],"macos":[{"name":"url_launcher_macos","path":"/usr/local/Caskroom/flutter/1.2.1/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-2.0.0/","dependencies":[]}],"linux":[{"name":"url_launcher_linux","path":"/usr/local/Caskroom/flutter/1.2.1/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-2.0.0/","dependencies":[]}],"windows":[{"name":"url_launcher_windows","path":"/usr/local/Caskroom/flutter/1.2.1/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-2.0.0/","dependencies":[]}],"web":[{"name":"flutter_sms","path":"/Users/rodydavis/Developer/GitHub/plugins/packages/flutter_sms/","dependencies":[]},{"name":"url_launcher_web","path":"/usr/local/Caskroom/flutter/1.2.1/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.0/","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_sms","dependencies":["url_launcher"]},{"name":"url_launcher","dependencies":["url_launcher_linux","url_launcher_macos","url_launcher_windows","url_launcher_web"]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2021-04-05 14:34:03.212116","version":"2.1.0-13.0.pre.206"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_sms","path":"/Users/andrewcoutts/Projects/flutter_sms/","dependencies":["url_launcher"]},{"name":"url_launcher","path":"/Users/andrewcoutts/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.9/","dependencies":[]}],"android":[{"name":"flutter_sms","path":"/Users/andrewcoutts/Projects/flutter_sms/","dependencies":["url_launcher"]},{"name":"url_launcher","path":"/Users/andrewcoutts/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.9/","dependencies":[]}],"macos":[{"name":"url_launcher_macos","path":"/Users/andrewcoutts/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-2.0.1/","dependencies":[]}],"linux":[{"name":"url_launcher_linux","path":"/Users/andrewcoutts/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-2.0.1/","dependencies":[]}],"windows":[{"name":"url_launcher_windows","path":"/Users/andrewcoutts/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-2.0.1/","dependencies":[]}],"web":[{"name":"flutter_sms","path":"/Users/andrewcoutts/Projects/flutter_sms/","dependencies":[]},{"name":"url_launcher_web","path":"/Users/andrewcoutts/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.2/","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_sms","dependencies":["url_launcher"]},{"name":"url_launcher","dependencies":["url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2021-08-13 16:31:57.080699","version":"2.5.0-6.0.pre"} \ No newline at end of file diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 320be22..f95d0d7 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 28 + compileSdkVersion 31 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -40,7 +40,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.example" minSdkVersion 16 - targetSdkVersion 28 + targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } diff --git a/example/android/build.gradle b/example/android/build.gradle index 3100ad2..f05df98 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.5.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 296b146..493072b 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/pubspec.yaml b/pubspec.yaml index 66e008c..91812cb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,13 +1,12 @@ name: flutter_sms description: A Flutter plugin to Send SMS and MMS on iOS and Android. If iMessage is enabled it will send as iMessage on iOS. This plugin must be tested on a real device on iOS. -version: 2.3.1 -author: Rody Davis +version: 2.3.2 homepage: https://github.com/rodydavis/plugins repository: https://github.com/fluttercommunity/flutter_sms maintainer: Rody Davis (@rodydavis) environment: - sdk: ">=2.12.0-259.8.beta <3.0.0" + sdk: ">=2.12.0 <3.0.0" flutter: ^1.10.0 dependencies: