Adding learn more link in verification status details
This commit is contained in:
parent
fde7072bc7
commit
d12bb09273
@ -21,6 +21,7 @@ import android.util.AttributeSet
|
|||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
|
import im.vector.app.core.extensions.setTextWithColoredPart
|
||||||
import im.vector.app.databinding.ViewSessionInfoBinding
|
import im.vector.app.databinding.ViewSessionInfoBinding
|
||||||
import im.vector.app.features.themes.ThemeUtils
|
import im.vector.app.features.themes.ThemeUtils
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel
|
import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel
|
||||||
@ -33,6 +34,8 @@ class SessionInfoView @JvmOverloads constructor(
|
|||||||
|
|
||||||
private val views: ViewSessionInfoBinding
|
private val views: ViewSessionInfoBinding
|
||||||
|
|
||||||
|
var onLearnMoreClickListener: (() -> Unit)? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
inflate(context, R.layout.view_session_info, this)
|
inflate(context, R.layout.view_session_info, this)
|
||||||
views = ViewSessionInfoBinding.bind(this)
|
views = ViewSessionInfoBinding.bind(this)
|
||||||
@ -42,17 +45,45 @@ class SessionInfoView @JvmOverloads constructor(
|
|||||||
|
|
||||||
fun render(sessionInfoViewState: SessionInfoViewState) {
|
fun render(sessionInfoViewState: SessionInfoViewState) {
|
||||||
renderDeviceInfo(sessionInfoViewState.deviceFullInfo.deviceInfo.displayName.orEmpty())
|
renderDeviceInfo(sessionInfoViewState.deviceFullInfo.deviceInfo.displayName.orEmpty())
|
||||||
renderVerificationStatus(sessionInfoViewState.deviceFullInfo.trustLevelForShield, sessionInfoViewState.isCurrentSession)
|
renderVerificationStatus(
|
||||||
|
sessionInfoViewState.deviceFullInfo.trustLevelForShield,
|
||||||
|
sessionInfoViewState.isCurrentSession,
|
||||||
|
sessionInfoViewState.hasLearnMoreLink
|
||||||
|
)
|
||||||
renderDetailsButton(sessionInfoViewState.isDetailsButtonVisible)
|
renderDetailsButton(sessionInfoViewState.isDetailsButtonVisible)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderVerificationStatus(encryptionTrustLevel: RoomEncryptionTrustLevel, isCurrentSession: Boolean) {
|
private fun renderVerificationStatus(
|
||||||
|
encryptionTrustLevel: RoomEncryptionTrustLevel,
|
||||||
|
isCurrentSession: Boolean,
|
||||||
|
hasLearnMoreLink: Boolean,
|
||||||
|
) {
|
||||||
views.sessionInfoVerificationStatusImageView.render(encryptionTrustLevel)
|
views.sessionInfoVerificationStatusImageView.render(encryptionTrustLevel)
|
||||||
if (encryptionTrustLevel == RoomEncryptionTrustLevel.Trusted) {
|
if (encryptionTrustLevel == RoomEncryptionTrustLevel.Trusted) {
|
||||||
renderCrossSigningVerified(isCurrentSession)
|
renderCrossSigningVerified(isCurrentSession)
|
||||||
} else {
|
} else {
|
||||||
renderCrossSigningUnverified(isCurrentSession)
|
renderCrossSigningUnverified(isCurrentSession)
|
||||||
}
|
}
|
||||||
|
if (hasLearnMoreLink) {
|
||||||
|
appendLearnMoreToVerificationStatus()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun appendLearnMoreToVerificationStatus() {
|
||||||
|
val status = views.sessionInfoVerificationStatusDetailTextView.text
|
||||||
|
val learnMore = context.getString(R.string.action_learn_more)
|
||||||
|
val stringBuilder = StringBuilder()
|
||||||
|
stringBuilder.append(status)
|
||||||
|
stringBuilder.append(" ")
|
||||||
|
stringBuilder.append(learnMore)
|
||||||
|
|
||||||
|
views.sessionInfoVerificationStatusDetailTextView.setTextWithColoredPart(
|
||||||
|
fullText = stringBuilder.toString(),
|
||||||
|
coloredPart = learnMore,
|
||||||
|
underline = false
|
||||||
|
) {
|
||||||
|
onLearnMoreClickListener?.invoke()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderCrossSigningVerified(isCurrentSession: Boolean) {
|
private fun renderCrossSigningVerified(isCurrentSession: Boolean) {
|
||||||
|
@ -22,4 +22,5 @@ data class SessionInfoViewState(
|
|||||||
val isCurrentSession: Boolean,
|
val isCurrentSession: Boolean,
|
||||||
val deviceFullInfo: DeviceFullInfo,
|
val deviceFullInfo: DeviceFullInfo,
|
||||||
val isDetailsButtonVisible: Boolean = true,
|
val isDetailsButtonVisible: Boolean = true,
|
||||||
|
val hasLearnMoreLink: Boolean = false
|
||||||
)
|
)
|
||||||
|
@ -16,8 +16,11 @@
|
|||||||
|
|
||||||
package im.vector.app.features.settings.devices.v2.overview
|
package im.vector.app.features.settings.devices.v2.overview
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
@ -44,6 +47,26 @@ class SessionOverviewFragment :
|
|||||||
return FragmentSessionOverviewBinding.inflate(inflater, container, false)
|
return FragmentSessionOverviewBinding.inflate(inflater, container, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
initSessionInfoView()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initSessionInfoView() {
|
||||||
|
views.sessionOverviewInfo.onLearnMoreClickListener = {
|
||||||
|
Toast.makeText(context, "Learn more verification status", Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
cleanUpSessionInfoView()
|
||||||
|
super.onDestroyView()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun cleanUpSessionInfoView() {
|
||||||
|
views.sessionOverviewInfo.onLearnMoreClickListener = null
|
||||||
|
}
|
||||||
|
|
||||||
override fun invalidate() = withState(viewModel) { state ->
|
override fun invalidate() = withState(viewModel) { state ->
|
||||||
updateToolbar(state.isCurrentSession)
|
updateToolbar(state.isCurrentSession)
|
||||||
if (state.deviceInfo is Success) {
|
if (state.deviceInfo is Success) {
|
||||||
@ -65,7 +88,8 @@ class SessionOverviewFragment :
|
|||||||
val viewState = SessionInfoViewState(
|
val viewState = SessionInfoViewState(
|
||||||
isCurrentSession = isCurrentSession,
|
isCurrentSession = isCurrentSession,
|
||||||
deviceFullInfo = deviceFullInfo,
|
deviceFullInfo = deviceFullInfo,
|
||||||
isDetailsButtonVisible = false
|
isDetailsButtonVisible = false,
|
||||||
|
hasLearnMoreLink = true
|
||||||
)
|
)
|
||||||
views.sessionOverviewInfo.render(viewState)
|
views.sessionOverviewInfo.render(viewState)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user