Skip to content

Passcode Creation Screen

The Passcode Creation Screen screen creates the passcode that protects the app.

Passcode Creation Screen

Definition

@Composable
fun SetPasscodeScreen(
    rules: List<PasscodeRule> = listOf(PasscodeRule(PasscodeRuleType.MIN_LEN, data = 8)),
    setPasscodeScreenSettings: SetPasscodeScreenSettings? = null,
    currentPasscode: String? = null,
    validate: ((String) -> Boolean)? = null,
    nextButtonClickListener: ((String) -> Unit)
) { ... }

data class SetPasscodeScreenSettings(
    @StringRes val title: Int = R.string.set_passcode_screen_title,
    @StringRes val description: Int = R.string.set_passcode_screen_desc,
    @StringRes val passcodeLabel: Int = R.string.label_passcode,
    @StringRes val passcodePlaceholder: Int = R.string.set_passcode_screen_passcode_placeholder,
    @StringRes val nextButtonCaption: Int = R.string.label_next,
    @StringRes val samePasscodeErrorMessage : Int = R.string.set_passcode_screen_error_same,
    @StringRes val customValidationFailMessage: Int = R.string.set_passcode_screen_error_custom_validation_fail
) : BaseScreenSettings

data class PasscodeRule(
    val type: PasscodeRuleType,
    val valid: Boolean = false,
    val data: Int? = 0
) { ... }

enum class PasscodeRuleType {
    MIN_LEN,
    REQ_LOWER_CASE,
    REQ_UPPER_CASE,
    MIN_UNIQUE_CHARS,
    REQ_DIGITAL,
    REQ_SPECIAL_CHAR
}

PasscodeRuleType defines all the predefined rules. Based on the current passcode policy settings, the rules argument could contain some of the validation rules. For the predefined rules, the screen itself would validate the input while the user types. Use the validate argument for additional validation logic. The Next button will be enabled only if the passcode can pass all the validation rules, including the custom validation logic.

Use currentPasscode in the case of the user changing the passcode and the old passcode should not be used.

Example

val rules = mutableListOf<PasscodeRule>()
    val policy = passcodePolicy
    val currentPasscode = "hello_world"

    rules.add(PasscodeRule(type = PasscodeRuleType.MIN_LEN, data = policy.minLength))
    if (policy.lowerRequired) rules.add(PasscodeRule(type = PasscodeRuleType.REQ_LOWER_CASE))
    if (policy.upperRequired) rules.add(PasscodeRule(type = PasscodeRuleType.REQ_UPPER_CASE))
    if (policy.uniqueCharNumber > 0)
        rules.add(
            PasscodeRule(
                type = PasscodeRuleType.MIN_UNIQUE_CHARS,
                data = policy.uniqueCharNumber
            )
        )
    if (policy.digitRequired) rules.add(PasscodeRule(type = PasscodeRuleType.REQ_DIGITAL))
    if (policy.specialCharRequired) rules.add(PasscodeRule(type = PasscodeRuleType.REQ_SPECIAL_CHAR))
    SetPasscodeScreen(
        rules = rules.toList(),
        currentPasscode = currentPasscode,
        validate = {
            myValidationLogic(it)
        }
    ) { code ->
        //handle the code and navigate to the passcode verification step.
    }

Last update: February 20, 2023