Add userId in identity change warning banner #3678
This commit is contained in:
parent
56120fc06d
commit
9fc6b01a0c
7 changed files with 53 additions and 10 deletions
|
|
@ -105,13 +105,13 @@ class IdentityChangeStatePresenter @Inject constructor(
|
||||||
|
|
||||||
private fun RoomMember.toIdentityRoomMember() = IdentityRoomMember(
|
private fun RoomMember.toIdentityRoomMember() = IdentityRoomMember(
|
||||||
userId = userId,
|
userId = userId,
|
||||||
disambiguatedDisplayName = disambiguatedDisplayName,
|
displayNameOrDefault = displayNameOrDefault,
|
||||||
avatarData = getAvatarData(AvatarSize.ComposerAlert),
|
avatarData = getAvatarData(AvatarSize.ComposerAlert),
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun createDefaultRoomMemberForIdentityChange(userId: UserId) = IdentityRoomMember(
|
private fun createDefaultRoomMemberForIdentityChange(userId: UserId) = IdentityRoomMember(
|
||||||
userId = userId,
|
userId = userId,
|
||||||
disambiguatedDisplayName = userId.value,
|
displayNameOrDefault = userId.extractedDisplayName,
|
||||||
avatarData = AvatarData(
|
avatarData = AvatarData(
|
||||||
id = userId.value,
|
id = userId.value,
|
||||||
name = null,
|
name = null,
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,16 @@ class IdentityChangeStateProvider : PreviewParameterProvider<IdentityChangeState
|
||||||
anIdentityChangeState(),
|
anIdentityChangeState(),
|
||||||
anIdentityChangeState(
|
anIdentityChangeState(
|
||||||
roomMemberIdentityStateChanges = listOf(
|
roomMemberIdentityStateChanges = listOf(
|
||||||
RoomMemberIdentityStateChange(
|
aRoomMemberIdentityStateChange(
|
||||||
identityRoomMember = anIdentityRoomMember(disambiguatedDisplayName = "Alice"),
|
identityRoomMember = anIdentityRoomMember(),
|
||||||
|
identityState = IdentityState.PinViolation,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
anIdentityChangeState(
|
||||||
|
roomMemberIdentityStateChanges = listOf(
|
||||||
|
aRoomMemberIdentityStateChange(
|
||||||
|
identityRoomMember = anIdentityRoomMember(displayNameOrDefault = "Alice"),
|
||||||
identityState = IdentityState.PinViolation,
|
identityState = IdentityState.PinViolation,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
@ -29,6 +37,14 @@ class IdentityChangeStateProvider : PreviewParameterProvider<IdentityChangeState
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun aRoomMemberIdentityStateChange(
|
||||||
|
identityRoomMember: IdentityRoomMember = anIdentityRoomMember(),
|
||||||
|
identityState: IdentityState = IdentityState.PinViolation,
|
||||||
|
) = RoomMemberIdentityStateChange(
|
||||||
|
identityRoomMember = identityRoomMember,
|
||||||
|
identityState = identityState,
|
||||||
|
)
|
||||||
|
|
||||||
internal fun anIdentityChangeState(
|
internal fun anIdentityChangeState(
|
||||||
roomMemberIdentityStateChanges: List<RoomMemberIdentityStateChange> = emptyList(),
|
roomMemberIdentityStateChanges: List<RoomMemberIdentityStateChange> = emptyList(),
|
||||||
) = IdentityChangeState(
|
) = IdentityChangeState(
|
||||||
|
|
@ -38,7 +54,7 @@ internal fun anIdentityChangeState(
|
||||||
|
|
||||||
internal fun anIdentityRoomMember(
|
internal fun anIdentityRoomMember(
|
||||||
userId: UserId = UserId("@alice:example.com"),
|
userId: UserId = UserId("@alice:example.com"),
|
||||||
disambiguatedDisplayName: String = userId.value,
|
displayNameOrDefault: String = userId.extractedDisplayName,
|
||||||
avatarData: AvatarData = AvatarData(
|
avatarData: AvatarData = AvatarData(
|
||||||
id = userId.value,
|
id = userId.value,
|
||||||
name = null,
|
name = null,
|
||||||
|
|
@ -47,6 +63,6 @@ internal fun anIdentityRoomMember(
|
||||||
),
|
),
|
||||||
) = IdentityRoomMember(
|
) = IdentityRoomMember(
|
||||||
userId = userId,
|
userId = userId,
|
||||||
disambiguatedDisplayName = disambiguatedDisplayName,
|
displayNameOrDefault = displayNameOrDefault,
|
||||||
avatarData = avatarData,
|
avatarData = avatarData,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -40,13 +40,27 @@ fun IdentityChangeStateView(
|
||||||
avatar = pinViolationIdentityChange.identityRoomMember.avatarData,
|
avatar = pinViolationIdentityChange.identityRoomMember.avatarData,
|
||||||
content = buildAnnotatedString {
|
content = buildAnnotatedString {
|
||||||
val learnMoreStr = stringResource(CommonStrings.action_learn_more)
|
val learnMoreStr = stringResource(CommonStrings.action_learn_more)
|
||||||
|
val displayName = pinViolationIdentityChange.identityRoomMember.displayNameOrDefault
|
||||||
|
val userIdStr = stringResource(
|
||||||
|
CommonStrings.crypto_identity_change_pin_violation_new_user_id,
|
||||||
|
pinViolationIdentityChange.identityRoomMember.userId,
|
||||||
|
)
|
||||||
val fullText = stringResource(
|
val fullText = stringResource(
|
||||||
id = CommonStrings.crypto_identity_change_pin_violation,
|
id = CommonStrings.crypto_identity_change_pin_violation_new,
|
||||||
pinViolationIdentityChange.identityRoomMember.disambiguatedDisplayName,
|
displayName,
|
||||||
|
userIdStr,
|
||||||
learnMoreStr,
|
learnMoreStr,
|
||||||
)
|
)
|
||||||
val learnMoreStartIndex = fullText.indexOf(learnMoreStr)
|
|
||||||
append(fullText)
|
append(fullText)
|
||||||
|
val userIdStartIndex = fullText.indexOf(userIdStr)
|
||||||
|
addStyle(
|
||||||
|
style = SpanStyle(
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
),
|
||||||
|
start = userIdStartIndex,
|
||||||
|
end = userIdStartIndex + userIdStr.length,
|
||||||
|
)
|
||||||
|
val learnMoreStartIndex = fullText.lastIndexOf(learnMoreStr)
|
||||||
addStyle(
|
addStyle(
|
||||||
style = SpanStyle(
|
style = SpanStyle(
|
||||||
textDecoration = TextDecoration.Underline,
|
textDecoration = TextDecoration.Underline,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,6 @@ import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
|
||||||
data class IdentityRoomMember(
|
data class IdentityRoomMember(
|
||||||
val userId: UserId,
|
val userId: UserId,
|
||||||
val disambiguatedDisplayName: String,
|
val displayNameOrDefault: String,
|
||||||
val avatarData: AvatarData,
|
val avatarData: AvatarData,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -24,4 +24,9 @@ value class UserId(val value: String) : Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String = value
|
override fun toString(): String = value
|
||||||
|
|
||||||
|
val extractedDisplayName: String
|
||||||
|
get() = value
|
||||||
|
.removePrefix("@")
|
||||||
|
.substringBefore(":")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,12 @@ data class RoomMember(
|
||||||
isNameAmbiguous -> "$displayName ($userId)"
|
isNameAmbiguous -> "$displayName ($userId)"
|
||||||
else -> displayName
|
else -> displayName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val displayNameOrDefault: String
|
||||||
|
get() = when {
|
||||||
|
displayName == null -> userId.extractedDisplayName
|
||||||
|
else -> displayName
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class RoomMembershipState {
|
enum class RoomMembershipState {
|
||||||
|
|
|
||||||
|
|
@ -252,6 +252,8 @@ Reason: %1$s."</string>
|
||||||
<string name="common_waiting_for_decryption_key">"Waiting for this message"</string>
|
<string name="common_waiting_for_decryption_key">"Waiting for this message"</string>
|
||||||
<string name="common_you">"You"</string>
|
<string name="common_you">"You"</string>
|
||||||
<string name="crypto_identity_change_pin_violation">"%1$s\'s identity appears to have changed. %2$s"</string>
|
<string name="crypto_identity_change_pin_violation">"%1$s\'s identity appears to have changed. %2$s"</string>
|
||||||
|
<string name="crypto_identity_change_pin_violation_new">"%1$s’s %2$s identity appears to have changed. %3$s"</string>
|
||||||
|
<string name="crypto_identity_change_pin_violation_new_user_id">"(%1$s)"</string>
|
||||||
<string name="dialog_title_confirmation">"Confirmation"</string>
|
<string name="dialog_title_confirmation">"Confirmation"</string>
|
||||||
<string name="dialog_title_error">"Error"</string>
|
<string name="dialog_title_error">"Error"</string>
|
||||||
<string name="dialog_title_success">"Success"</string>
|
<string name="dialog_title_success">"Success"</string>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue