Use extracted OIDC flow to display the reset identity screen

This commit is contained in:
Jorge Martín 2024-08-08 16:37:11 +02:00
parent d5c2e5e436
commit 2283e0e361
2 changed files with 13 additions and 3 deletions

View file

@ -45,6 +45,7 @@ dependencies {
implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrixui) implementation(projects.libraries.matrixui)
implementation(projects.libraries.designsystem) implementation(projects.libraries.designsystem)
implementation(projects.libraries.oidc.api)
implementation(projects.libraries.uiStrings) implementation(projects.libraries.uiStrings)
implementation(projects.libraries.testtags) implementation(projects.libraries.testtags)
api(libs.statemachine) api(libs.statemachine)

View file

@ -41,6 +41,7 @@ import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.matrix.api.encryption.IdentityOidcResetHandle import io.element.android.libraries.matrix.api.encryption.IdentityOidcResetHandle
import io.element.android.libraries.matrix.api.encryption.IdentityPasswordResetHandle import io.element.android.libraries.matrix.api.encryption.IdentityPasswordResetHandle
import io.element.android.libraries.matrix.api.encryption.IdentityResetHandle import io.element.android.libraries.matrix.api.encryption.IdentityResetHandle
import io.element.android.libraries.oidc.api.OidcEntryPoint
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
@ -53,6 +54,7 @@ class ResetIdentityFlowNode @AssistedInject constructor(
@Assisted plugins: List<Plugin>, @Assisted plugins: List<Plugin>,
private val resetIdentityFlowManager: ResetIdentityFlowManager, private val resetIdentityFlowManager: ResetIdentityFlowManager,
private val coroutineScope: CoroutineScope, private val coroutineScope: CoroutineScope,
private val oidcEntryPoint: OidcEntryPoint,
) : BaseFlowNode<ResetIdentityFlowNode.NavTarget>( ) : BaseFlowNode<ResetIdentityFlowNode.NavTarget>(
backstack = BackStack(initialElement = NavTarget.Root, savedStateMap = buildContext.savedStateMap), backstack = BackStack(initialElement = NavTarget.Root, savedStateMap = buildContext.savedStateMap),
buildContext = buildContext, buildContext = buildContext,
@ -69,8 +71,8 @@ class ResetIdentityFlowNode @AssistedInject constructor(
@Parcelize @Parcelize
data object ResetPassword : NavTarget data object ResetPassword : NavTarget
// @Parcelize @Parcelize
// data class ResetOidc(val url: String) : NavTarget data class ResetOidc(val url: String) : NavTarget
} }
private lateinit var activity: Activity private lateinit var activity: Activity
@ -100,6 +102,9 @@ class ResetIdentityFlowNode @AssistedInject constructor(
listOf(ResetKeyPasswordNode.Inputs(resetIdentityFlowManager.currentSessionId(), handle)) listOf(ResetKeyPasswordNode.Inputs(resetIdentityFlowManager.currentSessionId(), handle))
) )
} }
is NavTarget.ResetOidc -> {
oidcEntryPoint.createFallbackWebViewNode(this, buildContext, navTarget.url)
}
} }
} }
@ -111,7 +116,11 @@ class ResetIdentityFlowNode @AssistedInject constructor(
when (handle) { when (handle) {
is IdentityOidcResetHandle -> { is IdentityOidcResetHandle -> {
activity.openUrlInChromeCustomTab(null, false, handle.url) if (oidcEntryPoint.canUseCustomTab()) {
activity.openUrlInChromeCustomTab(null, false, handle.url)
} else {
backstack.push(NavTarget.ResetOidc(handle.url))
}
handle.resetOidc() handle.resetOidc()
} }
is IdentityPasswordResetHandle -> backstack.push(NavTarget.ResetPassword) is IdentityPasswordResetHandle -> backstack.push(NavTarget.ResetPassword)