Create PIN : hopefully fix remaining issues

This commit is contained in:
ganfra 2023-10-20 10:54:59 +02:00
parent a0cde93b1d
commit 0df609cef5
6 changed files with 15 additions and 18 deletions

View file

@ -25,12 +25,14 @@ import io.element.android.features.lockscreen.impl.create.model.PinEntry
import io.element.android.features.lockscreen.impl.create.validation.CreatePinFailure import io.element.android.features.lockscreen.impl.create.validation.CreatePinFailure
import io.element.android.features.lockscreen.impl.create.validation.PinValidator import io.element.android.features.lockscreen.impl.create.validation.PinValidator
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.meta.BuildMeta
import javax.inject.Inject import javax.inject.Inject
private const val PIN_SIZE = 4 private const val PIN_SIZE = 4
class CreatePinPresenter @Inject constructor( class CreatePinPresenter @Inject constructor(
private val pinValidator: PinValidator, private val pinValidator: PinValidator,
private val buildMeta: BuildMeta,
) : Presenter<CreatePinState> { ) : Presenter<CreatePinState> {
@Composable @Composable
@ -94,6 +96,7 @@ class CreatePinPresenter @Inject constructor(
confirmPinEntry = confirmPinEntry, confirmPinEntry = confirmPinEntry,
isConfirmationStep = isConfirmationStep, isConfirmationStep = isConfirmationStep,
createPinFailure = createPinFailure, createPinFailure = createPinFailure,
appName = buildMeta.applicationName,
eventSink = ::handleEvents eventSink = ::handleEvents
) )
} }

View file

@ -24,6 +24,7 @@ data class CreatePinState(
val confirmPinEntry: PinEntry, val confirmPinEntry: PinEntry,
val isConfirmationStep: Boolean, val isConfirmationStep: Boolean,
val createPinFailure: CreatePinFailure?, val createPinFailure: CreatePinFailure?,
val appName: String,
val eventSink: (CreatePinEvents) -> Unit val eventSink: (CreatePinEvents) -> Unit
) { ) {
val pinSize = choosePinEntry.size val pinSize = choosePinEntry.size

View file

@ -55,6 +55,7 @@ fun aCreatePinState(
confirmPinEntry = confirmPinEntry, confirmPinEntry = confirmPinEntry,
isConfirmationStep = isConfirmationStep, isConfirmationStep = isConfirmationStep,
createPinFailure = creationFailure, createPinFailure = creationFailure,
appName = "Element",
eventSink = {} eventSink = {}
) )

View file

@ -25,7 +25,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -38,14 +37,12 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Lock
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.features.lockscreen.impl.R import io.element.android.features.lockscreen.impl.R
@ -89,7 +86,7 @@ fun CreatePinView(
.verticalScroll(state = scrollState) .verticalScroll(state = scrollState)
.padding(vertical = 16.dp, horizontal = 20.dp), .padding(vertical = 16.dp, horizontal = 20.dp),
) { ) {
CreatePinHeader(state.isConfirmationStep, state.pinSize) CreatePinHeader(state.isConfirmationStep, state.appName)
CreatePinContent(state) CreatePinContent(state)
} }
} }
@ -99,7 +96,7 @@ fun CreatePinView(
@Composable @Composable
private fun CreatePinHeader( private fun CreatePinHeader(
isValidationStep: Boolean, isValidationStep: Boolean,
pinSize: Int, appName: String,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
Column( Column(
@ -110,18 +107,11 @@ private fun CreatePinHeader(
title = if (isValidationStep) { title = if (isValidationStep) {
stringResource(id = R.string.screen_app_lock_setup_confirm_pin) stringResource(id = R.string.screen_app_lock_setup_confirm_pin)
} else { } else {
stringResource(id = R.string.screen_app_lock_setup_choose_pin, pinSize) stringResource(id = R.string.screen_app_lock_setup_choose_pin)
}, },
subTitle = stringResource(id = R.string.screen_app_lock_setup_pin_context), subTitle = stringResource(id = R.string.screen_app_lock_setup_pin_context, appName),
iconImageVector = Icons.Filled.Lock, iconImageVector = Icons.Filled.Lock,
) )
Text(
text = stringResource(id = R.string.screen_app_lock_setup_pin_context_warning),
modifier = Modifier.padding(top = 24.dp),
textAlign = TextAlign.Center,
style = ElementTheme.typography.fontBodyMdRegular,
color = MaterialTheme.colorScheme.secondary,
)
} }
} }

View file

@ -10,12 +10,13 @@
<string name="screen_app_lock_settings_remove_pin">"Remove PIN"</string> <string name="screen_app_lock_settings_remove_pin">"Remove PIN"</string>
<string name="screen_app_lock_settings_remove_pin_alert_message">"Are you sure you want to remove PIN?"</string> <string name="screen_app_lock_settings_remove_pin_alert_message">"Are you sure you want to remove PIN?"</string>
<string name="screen_app_lock_settings_remove_pin_alert_title">"Remove PIN?"</string> <string name="screen_app_lock_settings_remove_pin_alert_title">"Remove PIN?"</string>
<string name="screen_app_lock_setup_choose_pin">"Choose %1$d digit PIN"</string> <string name="screen_app_lock_setup_choose_pin">"Choose PIN"</string>
<string name="screen_app_lock_setup_confirm_pin">"Confirm PIN"</string> <string name="screen_app_lock_setup_confirm_pin">"Confirm PIN"</string>
<string name="screen_app_lock_setup_pin_blacklisted_dialog_content">"You cannot choose this as your PIN code for security reasons"</string> <string name="screen_app_lock_setup_pin_blacklisted_dialog_content">"You cannot choose this as your PIN code for security reasons"</string>
<string name="screen_app_lock_setup_pin_blacklisted_dialog_title">"Choose a different PIN"</string> <string name="screen_app_lock_setup_pin_blacklisted_dialog_title">"Choose a different PIN"</string>
<string name="screen_app_lock_setup_pin_context">"Lock Element to add extra security to your chats."</string> <string name="screen_app_lock_setup_pin_context">"Lock %1$s to add extra security to your chats.
<string name="screen_app_lock_setup_pin_context_warning">"Choose something memorable. If you forget this PIN, you will be logged out of the app."</string>
Choose something memorable. If you forget this PIN, you will be logged out of the app."</string>
<string name="screen_app_lock_setup_pin_mismatch_dialog_content">"Please enter the same PIN twice"</string> <string name="screen_app_lock_setup_pin_mismatch_dialog_content">"Please enter the same PIN twice"</string>
<string name="screen_app_lock_setup_pin_mismatch_dialog_title">"PINs don\'t match"</string> <string name="screen_app_lock_setup_pin_mismatch_dialog_title">"PINs don\'t match"</string>
<string name="screen_app_lock_signout_alert_message">"Youll need to re-login and create a new PIN to proceed"</string> <string name="screen_app_lock_signout_alert_message">"Youll need to re-login and create a new PIN to proceed"</string>

View file

@ -24,6 +24,7 @@ import io.element.android.features.lockscreen.impl.create.model.PinDigit
import io.element.android.features.lockscreen.impl.create.model.PinEntry import io.element.android.features.lockscreen.impl.create.model.PinEntry
import io.element.android.features.lockscreen.impl.create.validation.CreatePinFailure import io.element.android.features.lockscreen.impl.create.validation.CreatePinFailure
import io.element.android.features.lockscreen.impl.create.validation.PinValidator import io.element.android.features.lockscreen.impl.create.validation.PinValidator
import io.element.android.libraries.matrix.test.core.aBuildMeta
import io.element.android.tests.testutils.awaitLastSequentialItem import io.element.android.tests.testutils.awaitLastSequentialItem
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Test import org.junit.Test
@ -108,6 +109,6 @@ class CreatePinPresenterTest {
} }
private fun createCreatePinPresenter(): CreatePinPresenter { private fun createCreatePinPresenter(): CreatePinPresenter {
return CreatePinPresenter(PinValidator()) return CreatePinPresenter(PinValidator(), aBuildMeta())
} }
} }