From e18a04ec8056dd86122135c13b10a4161ee147a7 Mon Sep 17 00:00:00 2001 From: Muhammad Usman Date: Fri, 21 Feb 2025 17:21:13 +0500 Subject: [PATCH] Use external app for OIDC fallback instead of webview --- .../io/element/android/features/login/impl/LoginFlowNode.kt | 5 +++-- .../io/element/android/libraries/oidc/api/OidcEntryPoint.kt | 1 + .../android/libraries/oidc/impl/DefaultOidcEntryPoint.kt | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt index 0f2328656e7..ba65457d49c 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt @@ -139,8 +139,9 @@ class LoginFlowNode @AssistedInject constructor( oidcEntryPoint.openUrlInCustomTab(it, darkTheme, oidcDetails.url) } } else { - // Fallback to WebView mode - backstack.push(NavTarget.OidcView(oidcDetails)) + activity?.let { + oidcEntryPoint.openUrlInExternalApp(it, oidcDetails.url) + } } } diff --git a/libraries/oidc/api/src/main/kotlin/io/element/android/libraries/oidc/api/OidcEntryPoint.kt b/libraries/oidc/api/src/main/kotlin/io/element/android/libraries/oidc/api/OidcEntryPoint.kt index d216afc34f4..e194f4d509b 100644 --- a/libraries/oidc/api/src/main/kotlin/io/element/android/libraries/oidc/api/OidcEntryPoint.kt +++ b/libraries/oidc/api/src/main/kotlin/io/element/android/libraries/oidc/api/OidcEntryPoint.kt @@ -14,5 +14,6 @@ import com.bumble.appyx.core.node.Node interface OidcEntryPoint { fun canUseCustomTab(): Boolean fun openUrlInCustomTab(activity: Activity, darkTheme: Boolean, url: String) + fun openUrlInExternalApp(activity: Activity, url: String) fun createFallbackWebViewNode(parentNode: Node, buildContext: BuildContext, url: String): Node } diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcEntryPoint.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcEntryPoint.kt index 00f8838d42f..c4f533fc9cd 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcEntryPoint.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcEntryPoint.kt @@ -12,6 +12,7 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab +import io.element.android.libraries.androidutils.system.openUrlInExternalApp import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails @@ -32,6 +33,10 @@ class DefaultOidcEntryPoint @Inject constructor( activity.openUrlInChromeCustomTab(null, darkTheme, url) } + override fun openUrlInExternalApp(activity: Activity, url: String) { + activity.openUrlInExternalApp(url) + } + override fun createFallbackWebViewNode(parentNode: Node, buildContext: BuildContext, url: String): Node { assert(!canUseCustomTab()) { "Custom tab should be used instead of the fallback node." } val inputs = OidcNode.Inputs(OidcDetails(url))