From f92afb56eba6812ba6b730adcd14c8a24d2f7402 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 e35a7daf..ed4823c4 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 @@ -124,13 +124,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 72b421b0c53219f12401886ecba76a42e9b213c9 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 397c5716..2dd9f4e0 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 @@ -239,7 +239,7 @@ fun NFCView( } val canNumberWithInvisibleSpaces = talkBackTextFieldValue(canNumber.text) - val pinCode = remember { mutableStateOf(byteArrayOf()) } + val pinCode = nfcViewModel.pinCode val pinType = if (identityAction == IdentityAction.SIGN) { @@ -445,8 +445,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 c919b7da..42c34e5f 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/NFCViewModel.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/NFCViewModel.kt @@ -26,6 +26,8 @@ import android.content.Context import android.content.pm.ActivityInfo import android.os.Handler import android.os.Looper.getMainLooper +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -122,6 +124,13 @@ class NFCViewModel private val _courierCardDetected = MutableLiveData(null) val courierCardDetected: LiveData = _courierCardDetected + val pinCode: MutableState = mutableStateOf(byteArrayOf()) + + fun resetPinCode() { + pinCode.value.fill(0) + pinCode.value = byteArrayOf() + } + private val dialogMessages: ImmutableMap = ImmutableMap .builder()