mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-10-31 16:22:49 +00:00
Iterate on the identity confirmation screen
Follow the multi-account design for the "Confirm your digital identity" screen: use the dedicated "Sign out" string for the top bar action and add a leading icon to the "Use another device" button. Add a test to check that clicking on "Sign out" emits the expected event. Part of #7768 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+2
-1
@@ -46,11 +46,12 @@ class ChooseSelfVerificationModeStatePreviewParam :
|
|||||||
fun aChooseSelfVerificationModeState(
|
fun aChooseSelfVerificationModeState(
|
||||||
buttonsState: AsyncData<ChooseSelfVerificationModeState.ButtonsState> = AsyncData.Success(aButtonsState()),
|
buttonsState: AsyncData<ChooseSelfVerificationModeState.ButtonsState> = AsyncData.Success(aButtonsState()),
|
||||||
currentUser: MatrixUser = aMatrixUser(),
|
currentUser: MatrixUser = aMatrixUser(),
|
||||||
|
eventSink: (ChooseSelfVerificationModeEvent) -> Unit = {},
|
||||||
) = ChooseSelfVerificationModeState(
|
) = ChooseSelfVerificationModeState(
|
||||||
currentUser = currentUser,
|
currentUser = currentUser,
|
||||||
buttonsState = buttonsState,
|
buttonsState = buttonsState,
|
||||||
directLogoutState = aDirectLogoutState(),
|
directLogoutState = aDirectLogoutState(),
|
||||||
eventSink = {},
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
|
|
||||||
fun aButtonsState(
|
fun aButtonsState(
|
||||||
|
|||||||
+6
-1
@@ -36,6 +36,7 @@ import io.element.android.libraries.designsystem.components.BigIcon
|
|||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.designsystem.theme.components.Button
|
import io.element.android.libraries.designsystem.theme.components.Button
|
||||||
|
import io.element.android.libraries.designsystem.theme.components.IconSource
|
||||||
import io.element.android.libraries.designsystem.theme.components.OutlinedButton
|
import io.element.android.libraries.designsystem.theme.components.OutlinedButton
|
||||||
import io.element.android.libraries.designsystem.theme.components.Text
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.designsystem.theme.components.TextButton
|
import io.element.android.libraries.designsystem.theme.components.TextButton
|
||||||
@@ -45,6 +46,9 @@ import io.element.android.libraries.matrix.ui.components.accountinfo.AccountInfo
|
|||||||
import io.element.android.libraries.matrix.ui.components.accountinfo.AccountInfoCardState
|
import io.element.android.libraries.matrix.ui.components.accountinfo.AccountInfoCardState
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ref: https://www.figma.com/design/kEAcfun9iSpszeUDvdKZ6b/ER-351--Multi-account-in-EX?node-id=432-31813
|
||||||
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun ChooseSelfVerificationModeView(
|
fun ChooseSelfVerificationModeView(
|
||||||
state: ChooseSelfVerificationModeState,
|
state: ChooseSelfVerificationModeState,
|
||||||
@@ -65,7 +69,7 @@ fun ChooseSelfVerificationModeView(
|
|||||||
title = {},
|
title = {},
|
||||||
actions = {
|
actions = {
|
||||||
TextButton(
|
TextButton(
|
||||||
text = stringResource(CommonStrings.action_signout),
|
text = stringResource(R.string.screen_identity_confirmation_sign_out),
|
||||||
onClick = { state.eventSink(ChooseSelfVerificationModeEvent.SignOut) }
|
onClick = { state.eventSink(ChooseSelfVerificationModeEvent.SignOut) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -141,6 +145,7 @@ private fun ChooseSelfVerificationModeButtons(
|
|||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
text = stringResource(R.string.screen_identity_use_another_device),
|
text = stringResource(R.string.screen_identity_use_another_device),
|
||||||
onClick = onUseAnotherDevice,
|
onClick = onUseAnotherDevice,
|
||||||
|
leadingIcon = IconSource.Vector(CompoundIcons.Devices()),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (state.buttonsState.data.canUseRecoveryKey) {
|
if (state.buttonsState.data.canUseRecoveryKey) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
<string name="screen_identity_confirmation_cannot_confirm">"Can\'t confirm?"</string>
|
<string name="screen_identity_confirmation_cannot_confirm">"Can\'t confirm?"</string>
|
||||||
<string name="screen_identity_confirmation_create_new_recovery_key">"Create a new recovery key"</string>
|
<string name="screen_identity_confirmation_create_new_recovery_key">"Create a new recovery key"</string>
|
||||||
|
<string name="screen_identity_confirmation_sign_out">"Sign out"</string>
|
||||||
<string name="screen_identity_confirmation_subtitle">"Choose how to verify to set up secure messaging."</string>
|
<string name="screen_identity_confirmation_subtitle">"Choose how to verify to set up secure messaging."</string>
|
||||||
<string name="screen_identity_confirmation_title">"Confirm your digital identity"</string>
|
<string name="screen_identity_confirmation_title">"Confirm your digital identity"</string>
|
||||||
<string name="screen_identity_confirmation_use_another_device">"Use another device"</string>
|
<string name="screen_identity_confirmation_use_another_device">"Use another device"</string>
|
||||||
|
|||||||
+11
@@ -18,6 +18,7 @@ import io.element.android.features.ftue.impl.R
|
|||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
import io.element.android.libraries.ui.strings.CommonStrings
|
import io.element.android.libraries.ui.strings.CommonStrings
|
||||||
import io.element.android.tests.testutils.EnsureNeverCalled
|
import io.element.android.tests.testutils.EnsureNeverCalled
|
||||||
|
import io.element.android.tests.testutils.EventsRecorder
|
||||||
import io.element.android.tests.testutils.clickOn
|
import io.element.android.tests.testutils.clickOn
|
||||||
import io.element.android.tests.testutils.ensureCalledOnce
|
import io.element.android.tests.testutils.ensureCalledOnce
|
||||||
import io.element.android.tests.testutils.robolectric.RobolectricTest
|
import io.element.android.tests.testutils.robolectric.RobolectricTest
|
||||||
@@ -73,6 +74,16 @@ class ChooseSessionVerificationModeViewTest : RobolectricTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `clicking on sign out emits the expected event`() = runAndroidComposeUiTest {
|
||||||
|
val eventsRecorder = EventsRecorder<ChooseSelfVerificationModeEvent>()
|
||||||
|
setChooseSelfVerificationModeView(
|
||||||
|
aChooseSelfVerificationModeState(eventSink = eventsRecorder),
|
||||||
|
)
|
||||||
|
clickOn(R.string.screen_identity_confirmation_sign_out)
|
||||||
|
eventsRecorder.assertSingle(ChooseSelfVerificationModeEvent.SignOut)
|
||||||
|
}
|
||||||
|
|
||||||
private fun AndroidComposeUiTest<ComponentActivity>.setChooseSelfVerificationModeView(
|
private fun AndroidComposeUiTest<ComponentActivity>.setChooseSelfVerificationModeView(
|
||||||
state: ChooseSelfVerificationModeState,
|
state: ChooseSelfVerificationModeState,
|
||||||
onLearnMoreClick: () -> Unit = EnsureNeverCalled(),
|
onLearnMoreClick: () -> Unit = EnsureNeverCalled(),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
<string name="screen_identity_confirmation_cannot_confirm">"Can\'t confirm?"</string>
|
<string name="screen_identity_confirmation_cannot_confirm">"Can\'t confirm?"</string>
|
||||||
<string name="screen_identity_confirmation_create_new_recovery_key">"Create a new recovery key"</string>
|
<string name="screen_identity_confirmation_create_new_recovery_key">"Create a new recovery key"</string>
|
||||||
|
<string name="screen_identity_confirmation_sign_out">"Sign out"</string>
|
||||||
<string name="screen_identity_confirmation_subtitle">"Choose how to verify to set up secure messaging."</string>
|
<string name="screen_identity_confirmation_subtitle">"Choose how to verify to set up secure messaging."</string>
|
||||||
<string name="screen_identity_confirmation_title">"Confirm your digital identity"</string>
|
<string name="screen_identity_confirmation_title">"Confirm your digital identity"</string>
|
||||||
<string name="screen_identity_confirmation_use_another_device">"Use another device"</string>
|
<string name="screen_identity_confirmation_use_another_device">"Use another device"</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user