diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AccessibilityScreen.kt b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AccessibilityScreen.kt index 9fc12c634..d1312c36e 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AccessibilityScreen.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AccessibilityScreen.kt @@ -58,6 +58,7 @@ import ee.ria.DigiDoc.ui.component.shared.HrefDynamicText import ee.ria.DigiDoc.ui.component.shared.InvisibleElement import ee.ria.DigiDoc.ui.component.shared.StatusSnackbarHost import ee.ria.DigiDoc.ui.component.shared.TopBar +import ee.ria.DigiDoc.ui.component.shared.keyboard.keyboardScrollable import ee.ria.DigiDoc.ui.theme.Dimensions.LINE_HEIGHT import ee.ria.DigiDoc.ui.theme.Dimensions.MPadding import ee.ria.DigiDoc.ui.theme.Dimensions.SPadding @@ -71,6 +72,8 @@ fun AccessibilityScreen( navController: NavHostController, sharedMenuViewModel: SharedMenuViewModel, ) { + val screenScrollState = rememberScrollState() + val isSettingsMenuBottomSheetVisible = rememberSaveable { mutableStateOf(false) } Scaffold( @@ -113,7 +116,8 @@ fun AccessibilityScreen( testTagsAsResourceId = true }.testTag("scrollView") .fillMaxWidth() - .verticalScroll(rememberScrollState()), + .verticalScroll(screenScrollState) + .keyboardScrollable(screenScrollState), horizontalAlignment = Alignment.Start, ) { DynamicText( diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AdvancedSettingsScreen.kt b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AdvancedSettingsScreen.kt index 7a090b720..302d99891 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AdvancedSettingsScreen.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/AdvancedSettingsScreen.kt @@ -23,8 +23,6 @@ package ee.ria.DigiDoc.fragment.screen import android.content.res.Configuration import androidx.activity.compose.LocalActivity -import androidx.compose.foundation.clickable -import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -35,7 +33,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.Checkbox import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold @@ -64,6 +61,7 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.rememberNavController import ee.ria.DigiDoc.R import ee.ria.DigiDoc.ui.component.menu.SettingsMenuBottomSheet +import ee.ria.DigiDoc.ui.component.settings.SettingsCheckboxItem import ee.ria.DigiDoc.ui.component.settings.advanced.AdvancedSettingComponent import ee.ria.DigiDoc.ui.component.settings.advanced.AdvancedSettingComponentItem import ee.ria.DigiDoc.ui.component.shared.InvisibleElement @@ -73,7 +71,6 @@ import ee.ria.DigiDoc.ui.theme.Dimensions.MPadding import ee.ria.DigiDoc.ui.theme.Dimensions.SPadding import ee.ria.DigiDoc.ui.theme.Dimensions.XSPadding import ee.ria.DigiDoc.ui.theme.RIADigiDocTheme -import ee.ria.DigiDoc.utils.extensions.notAccessible import ee.ria.DigiDoc.utils.secure.SecureUtil import ee.ria.DigiDoc.utils.snackbar.SnackBarManager.showMessage import ee.ria.DigiDoc.utils.snackbar.SnackbarType @@ -152,102 +149,37 @@ fun AdvancedSettingsScreen( style = MaterialTheme.typography.titleLarge, ) Spacer(modifier = modifier.height(XSPadding)) - Row( - modifier = - modifier - .fillMaxWidth() - .clickable { - sharedSettingsViewModel.setSettingsAskRoleAndAddress(!checkedAskRoleAndAddress) - }, - verticalAlignment = Alignment.CenterVertically, - ) { - Text( - text = askRoleAndAddressTitleText, - modifier = - modifier - .weight(1f) - .notAccessible(), - style = MaterialTheme.typography.bodyLarge, - ) - Checkbox( - modifier = - modifier - .focusable(true) - .semantics { - contentDescription = askRoleAndAddressTitleText - }, - checked = checkedAskRoleAndAddress, - onCheckedChange = { - sharedSettingsViewModel.setSettingsAskRoleAndAddress(it) - }, - ) - } + SettingsCheckboxItem( + modifier = modifier, + checked = checkedAskRoleAndAddress, + title = askRoleAndAddressTitleText, + contentDescription = askRoleAndAddressTitleText, + onCheckedChange = { + sharedSettingsViewModel.setSettingsAskRoleAndAddress(it) + }, + ) - Row( - modifier = - modifier - .fillMaxWidth() - .clickable { - sharedSettingsViewModel.setAllowScreenshots(!checkedAllowScreenshots) - secureUtil.markAsSecure(activity) - }, - verticalAlignment = Alignment.CenterVertically, - ) { - Text( - text = allowScreenshotsTitleText, - modifier = - modifier - .weight(1f) - .notAccessible(), - style = MaterialTheme.typography.bodyLarge, - ) - Checkbox( - modifier = - modifier - .focusable(true) - .semantics { - contentDescription = allowScreenshotsTitleText - }, - checked = checkedAllowScreenshots, - onCheckedChange = { - sharedSettingsViewModel.setAllowScreenshots(it) - secureUtil.markAsSecure(activity) - }, - ) - } + SettingsCheckboxItem( + modifier = modifier, + checked = checkedAllowScreenshots, + title = allowScreenshotsTitleText, + contentDescription = allowScreenshotsTitleText, + onCheckedChange = { + sharedSettingsViewModel.setAllowScreenshots(it) + secureUtil.markAsSecure(activity) + }, + ) - Row( - modifier = - modifier - .fillMaxWidth() - .clickable { - sharedSettingsViewModel.setSettingsOpenAllFileTypes(!checkedAllowOpeningAllFileTypes) - sharedSettingsViewModel.recreateActivity() - }, - verticalAlignment = Alignment.CenterVertically, - ) { - Text( - text = allowOpeningAllFileTypesButtonText, - modifier = - modifier - .weight(1f) - .notAccessible(), - style = MaterialTheme.typography.bodyLarge, - ) - Checkbox( - modifier = - modifier - .focusable(true) - .semantics { - contentDescription = allowOpeningAllFileTypesButtonText - }, - checked = checkedAllowOpeningAllFileTypes, - onCheckedChange = { - sharedSettingsViewModel.setSettingsOpenAllFileTypes(it) - sharedSettingsViewModel.recreateActivity() - }, - ) - } + SettingsCheckboxItem( + modifier = modifier, + checked = checkedAllowOpeningAllFileTypes, + title = allowOpeningAllFileTypesButtonText, + contentDescription = allowOpeningAllFileTypesButtonText, + onCheckedChange = { + sharedSettingsViewModel.setSettingsOpenAllFileTypes(it) + sharedSettingsViewModel.recreateActivity() + }, + ) HorizontalDivider(modifier = modifier.padding(vertical = MPadding)) diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/DiagnosticsScreen.kt b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/DiagnosticsScreen.kt index 0c6be1506..c3ea4134a 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/DiagnosticsScreen.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/DiagnosticsScreen.kt @@ -78,6 +78,7 @@ import ee.ria.DigiDoc.ui.component.shared.PrimaryOutlinedButton import ee.ria.DigiDoc.ui.component.shared.SpannableBoldText import ee.ria.DigiDoc.ui.component.shared.StatusSnackbarHost import ee.ria.DigiDoc.ui.component.shared.TopBar +import ee.ria.DigiDoc.ui.component.shared.keyboard.keyboardScrollable import ee.ria.DigiDoc.ui.theme.Dimensions.SPadding import ee.ria.DigiDoc.ui.theme.Dimensions.XSPadding import ee.ria.DigiDoc.ui.theme.Dimensions.zeroPadding @@ -108,6 +109,9 @@ fun DiagnosticsScreen( val context = LocalContext.current val scope = rememberCoroutineScope() + val screenScrollState = rememberScrollState() + val loggingDialogScrollState = rememberScrollState() + val isSettingsMenuBottomSheetVisible = rememberSaveable { mutableStateOf(false) } val currentConfiguration by diagnosticsViewModel.updatedConfiguration.asFlow().collectAsState( @@ -192,7 +196,8 @@ fun DiagnosticsScreen( Column( modifier = modifier - .verticalScroll(rememberScrollState()) + .verticalScroll(screenScrollState) + .keyboardScrollable(screenScrollState) .fillMaxWidth() .testTag("scrollView"), horizontalAlignment = Alignment.Start, @@ -592,14 +597,15 @@ fun DiagnosticsScreen( .padding(SPadding) .wrapContentHeight() .wrapContentWidth() - .verticalScroll(rememberScrollState()), + .verticalScroll(loggingDialogScrollState), ) { Column( modifier = modifier .semantics { testTagsAsResourceId = true - }.testTag("diagnosticsActivateLoggingContainer"), + }.keyboardScrollable(loggingDialogScrollState) + .testTag("diagnosticsActivateLoggingContainer"), ) { HrefMessageDialog( text1 = R.string.main_diagnostics_restart_message, diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/InfoScreen.kt b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/InfoScreen.kt index 6787924fd..984158581 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/InfoScreen.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/fragment/screen/InfoScreen.kt @@ -89,6 +89,7 @@ import ee.ria.DigiDoc.ui.component.menu.SettingsMenuBottomSheet import ee.ria.DigiDoc.ui.component.shared.InvisibleElement import ee.ria.DigiDoc.ui.component.shared.StatusSnackbarHost import ee.ria.DigiDoc.ui.component.shared.TopBar +import ee.ria.DigiDoc.ui.component.shared.keyboard.keyboardScrollable import ee.ria.DigiDoc.ui.theme.Dimensions.MCornerRadius import ee.ria.DigiDoc.ui.theme.Dimensions.MPadding import ee.ria.DigiDoc.ui.theme.Dimensions.SPadding @@ -113,6 +114,8 @@ fun InfoScreen( ) { val context = LocalContext.current + val screenScrollState = rememberScrollState() + val isSettingsMenuBottomSheetVisible = rememberSaveable { mutableStateOf(false) } val isEstonianLanguageUsed = remember { mutableStateOf(false) } @@ -177,7 +180,8 @@ fun InfoScreen( Column( modifier = modifier - .verticalScroll(rememberScrollState()) + .verticalScroll(screenScrollState) + .keyboardScrollable(screenScrollState) .fillMaxWidth() .semantics { testTagsAsResourceId = true diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/settings/SettingsCheckboxItem.kt b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/settings/SettingsCheckboxItem.kt new file mode 100644 index 000000000..e810f2be2 --- /dev/null +++ b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/settings/SettingsCheckboxItem.kt @@ -0,0 +1,113 @@ +/* + * Copyright 2017 - 2026 Riigi Infosüsteemi Amet + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +@file:Suppress("PackageName", "FunctionName") + +package ee.ria.DigiDoc.ui.component.settings + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.selection.toggleable +import androidx.compose.material3.Checkbox +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTagsAsResourceId +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import ee.ria.DigiDoc.R +import ee.ria.DigiDoc.ui.theme.Dimensions.MSPadding +import ee.ria.DigiDoc.ui.theme.Dimensions.XSPadding +import ee.ria.DigiDoc.ui.theme.RIADigiDocTheme +import ee.ria.DigiDoc.utils.extensions.notAccessible + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +fun SettingsCheckboxItem( + modifier: Modifier = Modifier, + checked: Boolean, + onCheckedChange: (Boolean) -> Unit = {}, + title: String, + contentDescription: String, + testTag: String = "", +) { + Row( + modifier = + modifier + .wrapContentHeight() + .fillMaxWidth() + .padding(vertical = MSPadding) + .toggleable( + value = checked, + role = Role.Checkbox, + onValueChange = onCheckedChange, + ).semantics(mergeDescendants = true) { + testTagsAsResourceId = true + this.contentDescription = contentDescription + }.testTag(testTag), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = title, + modifier = + Modifier + .weight(1f) + .notAccessible(), + textAlign = TextAlign.Start, + style = MaterialTheme.typography.bodyLarge, + ) + Checkbox( + modifier = Modifier.padding(horizontal = XSPadding), + checked = checked, + onCheckedChange = null, + ) + } +} + +@Preview(showBackground = true) +@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun SettingsCheckboxItemPreview() { + RIADigiDocTheme { + Column { + SettingsCheckboxItem( + checked = false, + title = stringResource(id = R.string.main_settings_open_all_filetypes_title), + contentDescription = stringResource(id = R.string.main_settings_open_all_filetypes_title).lowercase(), + ) + SettingsCheckboxItem( + checked = true, + title = stringResource(id = R.string.main_settings_allow_screenshots_title), + contentDescription = stringResource(id = R.string.main_settings_allow_screenshots_title).lowercase(), + ) + } + } +} diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/PrimaryOutlinedButton.kt b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/PrimaryOutlinedButton.kt index a99929973..8898fc4e0 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/PrimaryOutlinedButton.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/PrimaryOutlinedButton.kt @@ -24,7 +24,6 @@ package ee.ria.DigiDoc.ui.component.shared import android.content.res.Configuration import androidx.annotation.DrawableRes import androidx.annotation.StringRes -import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -40,6 +39,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.focusProperties import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource @@ -86,7 +86,7 @@ fun PrimaryOutlinedButton( }.fillMaxWidth() .padding( horizontal = XSPadding, - ).focusable(enabled = isFocusable), + ).focusProperties { canFocus = isFocusable }, shape = buttonRoundCornerShape, contentPadding = PaddingValues(zeroPadding), enabled = enabled, diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/TopBar.kt b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/TopBar.kt index 9403c1710..33ab05db7 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/TopBar.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/TopBar.kt @@ -46,9 +46,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusProperties import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.focus.focusTarget import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalContext @@ -175,9 +173,6 @@ fun TopBar( modifier .semantics { heading() } .focusRequester(headingFocusRequester) - .focusable(enabled = true) - .focusTarget() - .focusProperties { canFocus = true } .onGloballyPositioned { if (!headingTextLoaded) { CoroutineScope(Main).launch { diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/keyboard/KeyboardScrollable.kt b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/keyboard/KeyboardScrollable.kt new file mode 100644 index 000000000..d43ddf247 --- /dev/null +++ b/app/src/main/kotlin/ee/ria/DigiDoc/ui/component/shared/keyboard/KeyboardScrollable.kt @@ -0,0 +1,103 @@ +/* + * Copyright 2017 - 2026 Riigi Infosüsteemi Amet + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +@file:Suppress("PackageName") + +package ee.ria.DigiDoc.ui.component.shared.keyboard + +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.gestures.scrollBy +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.KeyEventType +import androidx.compose.ui.input.key.key +import androidx.compose.ui.input.key.onPreviewKeyEvent +import androidx.compose.ui.input.key.type +import androidx.compose.ui.layout.onSizeChanged +import kotlinx.coroutines.launch + +fun interface KeyboardScrollAdapter { + suspend fun scrollBy(delta: Float) +} + +fun ScrollState.asKeyboardAdapter() = + KeyboardScrollAdapter { delta -> + scrollBy(delta) + } + +fun LazyListState.asKeyboardAdapter() = + KeyboardScrollAdapter { delta -> + scrollBy(delta) + } + +fun Modifier.keyboardScrollable( + adapter: KeyboardScrollAdapter, + step: Float = 100f, +): Modifier = + composed { + var heightPx by remember { mutableFloatStateOf(0f) } + val scope = rememberCoroutineScope() + + this + .onSizeChanged { heightPx = it.height.toFloat() } + .onPreviewKeyEvent { event -> + if (event.type != KeyEventType.KeyDown) return@onPreviewKeyEvent false + + when (event.key) { + Key.DirectionDown -> { + scope.launch { adapter.scrollBy(step) } + true + } + + Key.DirectionUp -> { + scope.launch { adapter.scrollBy(-step) } + true + } + + Key.PageDown -> { + scope.launch { adapter.scrollBy(heightPx) } + true + } + + Key.PageUp -> { + scope.launch { adapter.scrollBy(-heightPx) } + true + } + + else -> false + } + } + } + +fun Modifier.keyboardScrollable( + scrollState: ScrollState, + step: Float = 100f, +): Modifier = keyboardScrollable(scrollState.asKeyboardAdapter(), step) + +fun Modifier.keyboardScrollable( + listState: LazyListState, + step: Float = 100f, +): Modifier = keyboardScrollable(listState.asKeyboardAdapter(), step) diff --git a/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/EncryptionServicesViewModel.kt b/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/EncryptionServicesViewModel.kt index 061d68564..ef8e8a0e3 100644 --- a/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/EncryptionServicesViewModel.kt +++ b/app/src/main/kotlin/ee/ria/DigiDoc/viewmodel/EncryptionServicesViewModel.kt @@ -1,5 +1,5 @@ /* - * Copyright 2017 - 2025 Riigi Infosüsteemi Amet + * Copyright 2017 - 2026 Riigi Infosüsteemi Amet * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/commons-lib/src/androidTest/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtilTest.kt b/commons-lib/src/androidTest/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtilTest.kt index 7602c660c..06d3974d0 100644 --- a/commons-lib/src/androidTest/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtilTest.kt +++ b/commons-lib/src/androidTest/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtilTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2017 - 2025 Riigi Infosüsteemi Amet + * Copyright 2017 - 2026 Riigi Infosüsteemi Amet * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtil.kt b/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtil.kt index 0f5c3316a..9cd8f97d8 100644 --- a/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtil.kt +++ b/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/certificate/CertificateParsingUtil.kt @@ -1,5 +1,5 @@ /* - * Copyright 2017 - 2025 Riigi Infosüsteemi Amet + * Copyright 2017 - 2026 Riigi Infosüsteemi Amet * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/config-lib/src/main/kotlin/ee/ria/DigiDoc/configuration/deserializer/Cdoc2ConfDeserializer.kt b/config-lib/src/main/kotlin/ee/ria/DigiDoc/configuration/deserializer/Cdoc2ConfDeserializer.kt index 19fb0ae66..59e9b7a15 100644 --- a/config-lib/src/main/kotlin/ee/ria/DigiDoc/configuration/deserializer/Cdoc2ConfDeserializer.kt +++ b/config-lib/src/main/kotlin/ee/ria/DigiDoc/configuration/deserializer/Cdoc2ConfDeserializer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2017 - 2025 Riigi Infosüsteemi Amet + * Copyright 2017 - 2026 Riigi Infosüsteemi Amet * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public