diff --git a/sdk/src/main/kotlin/com/idme/auth/auth/IDmeAuthManager.kt b/sdk/src/main/kotlin/com/idme/auth/auth/IDmeAuthManager.kt index c7313e1..c0b930f 100644 --- a/sdk/src/main/kotlin/com/idme/auth/auth/IDmeAuthManager.kt +++ b/sdk/src/main/kotlin/com/idme/auth/auth/IDmeAuthManager.kt @@ -5,6 +5,7 @@ import android.net.Uri import androidx.browser.customtabs.CustomTabsIntent import com.idme.auth.errors.IDmeAuthError import java.util.concurrent.ConcurrentHashMap +import java.lang.ref.WeakReference import kotlinx.coroutines.CompletableDeferred /** @@ -21,6 +22,8 @@ import kotlinx.coroutines.CompletableDeferred internal object IDmeAuthManager { private val pending = ConcurrentHashMap>() + internal var callingActivity: WeakReference? = null + /** * Launches the authentication flow in a Chrome Custom Tab and suspends * until the redirect is received. @@ -33,6 +36,7 @@ internal object IDmeAuthManager { suspend fun launchAuth(activity: Activity, authUrl: String, sessionId: String): String { val deferred = CompletableDeferred() pending[sessionId] = deferred + callingActivity = WeakReference(activity) val customTabsIntent = CustomTabsIntent.Builder() .setShowTitle(true) @@ -45,6 +49,7 @@ internal object IDmeAuthManager { } catch (e: kotlinx.coroutines.CancellationException) { throw IDmeAuthError.UserCancelled } finally { + callingActivity = null pending.remove(sessionId) } } diff --git a/sdk/src/main/kotlin/com/idme/auth/auth/IDmeRedirectActivity.kt b/sdk/src/main/kotlin/com/idme/auth/auth/IDmeRedirectActivity.kt index 223bd0d..c829873 100644 --- a/sdk/src/main/kotlin/com/idme/auth/auth/IDmeRedirectActivity.kt +++ b/sdk/src/main/kotlin/com/idme/auth/auth/IDmeRedirectActivity.kt @@ -1,6 +1,7 @@ package com.idme.auth.auth import android.app.Activity +import android.content.Intent import android.os.Bundle /** @@ -47,6 +48,13 @@ class IDmeRedirectActivity : Activity() { } else { IDmeAuthManager.handleCancel() } + IDmeAuthManager.callingActivity?.get()?.let { activity -> + val intent = Intent(this, activity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + } + startActivity(intent) + } + finish() } }