From d6bc0daf29fcfa3d40f2fce3c4c9cd6836d7e1ed Mon Sep 17 00:00:00 2001 From: Marten Rebane Date: Fri, 12 Jun 2026 15:01:54 +0300 Subject: [PATCH 1/2] Fix showing entered PIN codes when changing device orientation --- .../myeid/pinandcertificate/MyEidPinScreen.kt | 12 +++++----- .../viewmodel/shared/SharedMyEidViewModel.kt | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/myeid/pinandcertificate/MyEidPinScreen.kt b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/myeid/pinandcertificate/MyEidPinScreen.kt index 5cba4bfd..c27a8b43 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/myeid/pinandcertificate/MyEidPinScreen.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/myeid/pinandcertificate/MyEidPinScreen.kt @@ -133,13 +133,13 @@ fun MyEidPinScreen( val content by sharedMyEidViewModel.pinScreenContent.collectAsState() - val currentPinState = remember { mutableStateOf(byteArrayOf()) } - val newPinState = remember { mutableStateOf(byteArrayOf()) } - val newPinRepeatedState = remember { mutableStateOf(byteArrayOf()) } + val currentPinState = sharedMyEidViewModel.currentPinState + val newPinState = sharedMyEidViewModel.newPinState + val newPinRepeatedState = sharedMyEidViewModel.newPinRepeatedState - val showCurrentPinField = rememberSaveable { mutableStateOf(true) } - val showNewPinField = rememberSaveable { mutableStateOf(false) } - val showNewRepeatPinField = rememberSaveable { mutableStateOf(false) } + val showCurrentPinField = sharedMyEidViewModel.showCurrentPinField + val showNewPinField = sharedMyEidViewModel.showNewPinField + val showNewRepeatPinField = sharedMyEidViewModel.showNewRepeatPinField val pinErrorText = rememberSaveable { mutableStateOf("") } diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/shared/SharedMyEidViewModel.kt b/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/shared/SharedMyEidViewModel.kt index d2273764..85475e8c 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/shared/SharedMyEidViewModel.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/shared/SharedMyEidViewModel.kt @@ -22,6 +22,8 @@ package ee.ria.DigiDoc.viewmodel.shared import android.app.Activity +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -79,6 +81,26 @@ class SharedMyEidViewModel private val _isPinBlocked = MutableLiveData(false) val isPinBlocked: LiveData = _isPinBlocked + val currentPinState: MutableState = mutableStateOf(byteArrayOf()) + val newPinState: MutableState = mutableStateOf(byteArrayOf()) + val newPinRepeatedState: MutableState = mutableStateOf(byteArrayOf()) + + val showCurrentPinField: MutableState = mutableStateOf(true) + val showNewPinField: MutableState = mutableStateOf(false) + val showNewRepeatPinField: MutableState = mutableStateOf(false) + + fun resetPinEntryState() { + currentPinState.value.fill(0.toByte()) + newPinState.value.fill(0.toByte()) + newPinRepeatedState.value.fill(0.toByte()) + currentPinState.value = byteArrayOf() + newPinState.value = byteArrayOf() + newPinRepeatedState.value = byteArrayOf() + showCurrentPinField.value = true + showNewPinField.value = false + showNewRepeatPinField.value = false + } + fun setIdCardData(idCardData: IdCardData) { _idCardData.postValue(idCardData) } @@ -213,6 +235,7 @@ class SharedMyEidViewModel } fun setScreenContent(pinVariant: PinChangeVariant) { + resetPinEntryState() _pinScreenContent.value = when (pinVariant) { PinChangeVariant.ChangePin1 -> @@ -388,6 +411,7 @@ class SharedMyEidViewModel resetIsPinBlocked() resetScreenContent() resetPinChangingState() + resetPinEntryState() } fun handleBackButton() { From 32e46e0743972d4fb29b2219f0651854ec6cb986 Mon Sep 17 00:00:00 2001 From: Marten Rebane Date: Sat, 20 Jun 2026 00:21:01 +0300 Subject: [PATCH 2/2] Fix showing entered PIN codes when changing device orientation --- .../ee/ria/DigiDoc/ui/component/signing/NFCView.kt | 9 +++++++-- .../main/kotlin/ee/ria/DigiDoc/viewmodel/NFCViewModel.kt | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/signing/NFCView.kt b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/signing/NFCView.kt index 837b820b..235986a5 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/signing/NFCView.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/signing/NFCView.kt @@ -186,7 +186,7 @@ fun NFCView( val pinNumberFocusRequester = remember { FocusRequester() } val canNumberWithInvisibleSpaces = TextFieldValue(addInvisibleElement(canNumber.text)) - val pinCode = remember { mutableStateOf(byteArrayOf()) } + val pinCode = nfcViewModel.pinCode val pinType = if (identityAction == IdentityAction.SIGN) { @@ -313,8 +313,13 @@ fun NFCView( } } + val isPinReset = rememberSaveable { mutableStateOf(false) } + LaunchedEffect(Unit) { - pinCode.value = byteArrayOf() + if (!isPinReset.value) { + nfcViewModel.resetPinCode() + isPinReset.value = true + } nfcViewModel.checkNFCStatus(nfcViewModel.getNFCStatus(activity)) } diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/NFCViewModel.kt b/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/NFCViewModel.kt index cb131852..ed6c86be 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/NFCViewModel.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/NFCViewModel.kt @@ -24,6 +24,8 @@ package ee.ria.DigiDoc.viewmodel import android.app.Activity import android.content.Context import android.content.pm.ActivityInfo +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -103,6 +105,13 @@ class NFCViewModel private val _dialogError = MutableLiveData(0) val dialogError: LiveData = _dialogError + val pinCode: MutableState = mutableStateOf(byteArrayOf()) + + fun resetPinCode() { + pinCode.value.fill(0) + pinCode.value = byteArrayOf() + } + private val dialogMessages: ImmutableMap = ImmutableMap .builder()