mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-03-17 11:48:51 +03:00
binding the indentity server policy urls to the discovery page
This commit is contained in:
parent
04d844b1a9
commit
7ce811c227
4 changed files with 65 additions and 33 deletions
|
@ -26,11 +26,14 @@ import im.vector.app.R
|
|||
import im.vector.app.core.epoxy.attributes.ButtonStyle
|
||||
import im.vector.app.core.epoxy.attributes.ButtonType
|
||||
import im.vector.app.core.epoxy.attributes.IconMode
|
||||
import im.vector.app.core.epoxy.expandableTextItem
|
||||
import im.vector.app.core.epoxy.loadingItem
|
||||
import im.vector.app.core.error.ErrorFormatter
|
||||
import im.vector.app.core.extensions.getFormattedValue
|
||||
import im.vector.app.core.resources.ColorProvider
|
||||
import im.vector.app.core.resources.StringProvider
|
||||
import im.vector.app.core.utils.EvenBetterLinkMovementMethod
|
||||
import org.matrix.android.sdk.api.extensions.appendNl
|
||||
import org.matrix.android.sdk.api.failure.Failure
|
||||
import org.matrix.android.sdk.api.session.identity.SharedState
|
||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
||||
|
@ -105,8 +108,9 @@ class DiscoverySettingsController @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun buildIdentityServerSection(data: DiscoverySettingsState) {
|
||||
val identityServer = data.identityServer()?.serverUrl ?: stringProvider.getString(R.string.none)
|
||||
private fun buildIdentityServerSection(data: DiscoverySettingsState, ) {
|
||||
val identityServer = data.identityServer()
|
||||
val identityServerUrl = identityServer?.serverUrl ?: stringProvider.getString(R.string.none)
|
||||
val host = this
|
||||
|
||||
settingsSectionTitleItem {
|
||||
|
@ -116,28 +120,43 @@ class DiscoverySettingsController @Inject constructor(
|
|||
|
||||
settingsItem {
|
||||
id("idServer")
|
||||
title(identityServer)
|
||||
title(identityServerUrl)
|
||||
}
|
||||
|
||||
if (data.identityServer() != null && data.termsNotSigned) {
|
||||
val policyUrls = identityServer?.policyUrls?.joinToString(separator = "\n") { it }
|
||||
if (policyUrls != null) {
|
||||
val title = stringProvider.getString(R.string.settings_discovery_identity_server_policies_title)
|
||||
expandableTextItem {
|
||||
id("policy-urls")
|
||||
maxLines(1)
|
||||
enableScrollBar(false)
|
||||
content(buildString {
|
||||
append(title)
|
||||
appendNl(policyUrls)
|
||||
})
|
||||
movementMethod(EvenBetterLinkMovementMethod())
|
||||
}
|
||||
}
|
||||
|
||||
if (identityServer != null && data.termsNotSigned) {
|
||||
settingsInfoItem {
|
||||
id("idServerFooter")
|
||||
helperText(host.stringProvider.getString(R.string.settings_agree_to_terms, identityServer))
|
||||
helperText(host.stringProvider.getString(R.string.settings_agree_to_terms, identityServerUrl))
|
||||
showCompoundDrawable(true)
|
||||
itemClickListener { host.listener?.openIdentityServerTerms() }
|
||||
}
|
||||
settingsButtonItem {
|
||||
id("seeTerms")
|
||||
colorProvider(host.colorProvider)
|
||||
buttonTitle(host.stringProvider.getString(R.string.open_terms_of, identityServer))
|
||||
buttonTitle(host.stringProvider.getString(R.string.open_terms_of, identityServerUrl))
|
||||
buttonClickListener { host.listener?.openIdentityServerTerms() }
|
||||
}
|
||||
} else {
|
||||
settingsInfoItem {
|
||||
id("idServerFooter")
|
||||
showCompoundDrawable(false)
|
||||
if (data.identityServer() != null) {
|
||||
helperText(host.stringProvider.getString(R.string.settings_discovery_identity_server_info, identityServer))
|
||||
if (identityServer != null) {
|
||||
helperText(host.stringProvider.getString(R.string.settings_discovery_identity_server_info, identityServerUrl))
|
||||
} else {
|
||||
helperTextResId(R.string.settings_discovery_identity_server_info_none)
|
||||
}
|
||||
|
@ -147,7 +166,7 @@ class DiscoverySettingsController @Inject constructor(
|
|||
settingsButtonItem {
|
||||
id("change")
|
||||
colorProvider(host.colorProvider)
|
||||
if (data.identityServer() == null) {
|
||||
if (identityServer == null) {
|
||||
buttonTitleId(R.string.add_identity_server)
|
||||
} else {
|
||||
buttonTitleId(R.string.change_identity_server)
|
||||
|
@ -155,7 +174,7 @@ class DiscoverySettingsController @Inject constructor(
|
|||
buttonClickListener { host.listener?.onTapChangeIdentityServer() }
|
||||
}
|
||||
|
||||
if (data.identityServer() != null) {
|
||||
if (identityServer != null) {
|
||||
settingsInfoItem {
|
||||
id("removeInfo")
|
||||
helperTextResId(R.string.settings_discovery_disconnect_identity_server_info)
|
||||
|
|
|
@ -31,6 +31,6 @@ data class DiscoverySettingsState(
|
|||
) : MvRxState
|
||||
|
||||
data class IdentityServerWithTerms(
|
||||
val serverUrl: String?,
|
||||
val terms: List<LocalizedFlowDataLoginTerms>
|
||||
val serverUrl: String,
|
||||
val policyUrls: List<String>
|
||||
)
|
||||
|
|
|
@ -67,32 +67,27 @@ class DiscoverySettingsViewModel @AssistedInject constructor(
|
|||
private val identityServerManagerListener = object : IdentityServiceListener {
|
||||
override fun onIdentityServerChange() = withState { state ->
|
||||
viewModelScope.launch {
|
||||
val identityServer = fetchIdentityServerWithTerms()
|
||||
val currentIS = state.identityServer()
|
||||
setState {
|
||||
copy(
|
||||
identityServer = Success(identityServer),
|
||||
userConsent = identityService.getUserConsent()
|
||||
)
|
||||
}
|
||||
if (currentIS != identityServer) retrieveBinding()
|
||||
runCatching { fetchIdentityServerWithTerms() }.fold(
|
||||
onSuccess = {
|
||||
val currentIS = state.identityServer()
|
||||
setState {
|
||||
copy(
|
||||
identityServer = Success(it),
|
||||
userConsent = identityService.getUserConsent()
|
||||
)
|
||||
}
|
||||
if (currentIS != it) retrieveBinding()
|
||||
},
|
||||
onFailure = { _viewEvents.post(DiscoverySettingsViewEvents.Failure(it)) }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchIdentityServerWithTerms(): IdentityServerWithTerms {
|
||||
val identityServerUrl = identityService.getCurrentIdentityServerUrl()
|
||||
val policies = if (identityServerUrl == null) emptyList() else {
|
||||
val terms = termsService.getTerms(TermsService.ServiceType.IdentityService, identityServerUrl.ensureProtocol())
|
||||
terms.serverResponse.getLocalizedTerms(stringProvider.getString(R.string.resources_language))
|
||||
}
|
||||
return IdentityServerWithTerms(identityServerUrl, policies)
|
||||
}
|
||||
|
||||
init {
|
||||
setState {
|
||||
copy(
|
||||
identityServer = Success(IdentityServerWithTerms(identityService.getCurrentIdentityServerUrl(), emptyList())),
|
||||
identityServer = Success(identityService.getCurrentIdentityServerUrl()?.let { IdentityServerWithTerms(it, emptyList()) }),
|
||||
userConsent = identityService.getUserConsent()
|
||||
)
|
||||
}
|
||||
|
@ -116,7 +111,7 @@ class DiscoverySettingsViewModel @AssistedInject constructor(
|
|||
|
||||
override fun handle(action: DiscoverySettingsAction) {
|
||||
when (action) {
|
||||
DiscoverySettingsAction.Refresh -> refreshPendingEmailBindings()
|
||||
DiscoverySettingsAction.Refresh -> fetchContent()
|
||||
DiscoverySettingsAction.RetrieveBinding -> retrieveBinding()
|
||||
DiscoverySettingsAction.DisconnectIdentityServer -> disconnectIdentityServer()
|
||||
is DiscoverySettingsAction.ChangeIdentityServer -> changeIdentityServer(action)
|
||||
|
@ -395,12 +390,29 @@ class DiscoverySettingsViewModel @AssistedInject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun refreshPendingEmailBindings() = withState { state ->
|
||||
private fun fetchContent() = withState { state ->
|
||||
state.emailList()?.forEach { info ->
|
||||
when (info.isShared()) {
|
||||
SharedState.BINDING_IN_PROGRESS -> finalizeBind3pid(DiscoverySettingsAction.FinalizeBind3pid(info.threePid), false)
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
viewModelScope.launch {
|
||||
runCatching { fetchIdentityServerWithTerms() }.fold(
|
||||
onSuccess = { setState { copy(identityServer = Success(it)) } },
|
||||
onFailure = { _viewEvents.post(DiscoverySettingsViewEvents.Failure(it)) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchIdentityServerWithTerms(): IdentityServerWithTerms? {
|
||||
val identityServerUrl = identityService.getCurrentIdentityServerUrl()
|
||||
return identityServerUrl?.let {
|
||||
val terms = termsService.getTerms(TermsService.ServiceType.IdentityService, identityServerUrl.ensureProtocol())
|
||||
.serverResponse
|
||||
.getLocalizedTerms(stringProvider.getString(R.string.resources_language))
|
||||
val policyUrls = terms.mapNotNull { it.localizedUrl }
|
||||
IdentityServerWithTerms(identityServerUrl, policyUrls)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2349,6 +2349,7 @@
|
|||
<string name="add_identity_server">Configure identity server</string>
|
||||
<string name="open_discovery_settings">Open Discovery Settings</string>
|
||||
<string name="change_identity_server">Change identity server</string>
|
||||
<string name="settings_discovery_identity_server_policies_title">Identity server policy</string>
|
||||
<string name="settings_discovery_identity_server_info">You are currently using %1$s to discover and be discoverable by existing contacts you know.</string>
|
||||
<string name="settings_discovery_identity_server_info_none">You are not currently using an identity server. To discover and be discoverable by existing contacts you know, configure one below.</string>
|
||||
<string name="settings_discovery_emails_title">Discoverable email addresses</string>
|
||||
|
|
Loading…
Add table
Reference in a new issue