diff --git a/android/src/main/kotlin/com/linusu/flutter_web_auth/FlutterWebAuthPlugin.kt b/android/src/main/kotlin/com/linusu/flutter_web_auth/FlutterWebAuthPlugin.kt index b1c3d073..0bdc1a93 100644 --- a/android/src/main/kotlin/com/linusu/flutter_web_auth/FlutterWebAuthPlugin.kt +++ b/android/src/main/kotlin/com/linusu/flutter_web_auth/FlutterWebAuthPlugin.kt @@ -3,72 +3,61 @@ package com.linusu.flutter_web_auth import android.content.Context import android.content.Intent import android.net.Uri - import androidx.browser.customtabs.CustomTabsIntent - import io.flutter.embedding.engine.plugins.FlutterPlugin -import io.flutter.plugin.common.BinaryMessenger import io.flutter.plugin.common.MethodCall 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 -class FlutterWebAuthPlugin(private var context: Context? = null, private var channel: MethodChannel? = null): MethodCallHandler, FlutterPlugin { - companion object { - val callbacks = mutableMapOf() +class FlutterWebAuthPlugin : MethodCallHandler, FlutterPlugin { + private var context: Context? = null + private lateinit var channel: MethodChannel - @JvmStatic - fun registerWith(registrar: Registrar) { - val plugin = FlutterWebAuthPlugin() - plugin.initInstance(registrar.messenger(), registrar.context()) + companion object { + val callbacks = mutableMapOf() } - } - - fun initInstance(messenger: BinaryMessenger, context: Context) { - this.context = context - channel = MethodChannel(messenger, "flutter_web_auth") - channel?.setMethodCallHandler(this) - } - - override public fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { - initInstance(binding.getBinaryMessenger(), binding.getApplicationContext()) - } - - override public fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { - context = null - channel = null - } - - override fun onMethodCall(call: MethodCall, resultCallback: Result) { - when (call.method) { - "authenticate" -> { - val url = Uri.parse(call.argument("url")) - val callbackUrlScheme = call.argument("callbackUrlScheme")!! - val preferEphemeral = call.argument("preferEphemeral")!! - - callbacks[callbackUrlScheme] = resultCallback - - val intent = CustomTabsIntent.Builder().build() - val keepAliveIntent = Intent(context, KeepAliveService::class.java) + override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { + context = binding.applicationContext + channel = MethodChannel(binding.binaryMessenger, "flutter_web_auth") + channel.setMethodCallHandler(this) + } - intent.intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) - if (preferEphemeral) { - intent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) - } - intent.intent.putExtra("android.support.customtabs.extra.KEEP_ALIVE", keepAliveIntent) + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { + channel.setMethodCallHandler(null) + channel = null as MethodChannel + context = null + } - intent.launchUrl(context!!, url) - } - "cleanUpDanglingCalls" -> { - callbacks.forEach{ (_, danglingResultCallback) -> - danglingResultCallback.error("CANCELED", "User canceled login", null) - } - callbacks.clear() - resultCallback.success(null) + override fun onMethodCall(call: MethodCall, resultCallback: Result) { + when (call.method) { + "authenticate" -> { + val url = Uri.parse(call.argument("url")) + val callbackUrlScheme = call.argument("callbackUrlScheme")!! + val preferEphemeral = call.argument("preferEphemeral") ?: false + + callbacks[callbackUrlScheme] = resultCallback + + val intent = CustomTabsIntent.Builder().build() + val keepAliveIntent = Intent(context, KeepAliveService::class.java) + + intent.intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) + if (preferEphemeral) { + intent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) + } + intent.intent.putExtra("android.support.customtabs.extra.KEEP_ALIVE", keepAliveIntent) + + intent.launchUrl(context!!, url) + } + "cleanUpDanglingCalls" -> { + callbacks.forEach { (_, danglingResultCallback) -> + danglingResultCallback.error("CANCELED", "User canceled login", null) + } + callbacks.clear() + resultCallback.success(null) + } + else -> resultCallback.notImplemented() } - else -> resultCallback.notImplemented() } - } } diff --git a/pubspec.yaml b/pubspec.yaml index 6a9925cc..ee0d0acd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_web_auth description: Flutter plugin for authenticating a user with a web service. -version: 0.6.0 +version: 0.7.0 homepage: https://github.com/LinusU/flutter_web_auth environment: