Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -71,6 +72,8 @@ fun AccessibilityScreen(
navController: NavHostController,
sharedMenuViewModel: SharedMenuViewModel,
) {
val screenScrollState = rememberScrollState()

val isSettingsMenuBottomSheetVisible = rememberSaveable { mutableStateOf(false) }

Scaffold(
Expand Down Expand Up @@ -113,7 +116,8 @@ fun AccessibilityScreen(
testTagsAsResourceId = true
}.testTag("scrollView")
.fillMaxWidth()
.verticalScroll(rememberScrollState()),
.verticalScroll(screenScrollState)
.keyboardScrollable(screenScrollState),
horizontalAlignment = Alignment.Start,
) {
DynamicText(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -192,7 +196,8 @@ fun DiagnosticsScreen(
Column(
modifier =
modifier
.verticalScroll(rememberScrollState())
.verticalScroll(screenScrollState)
.keyboardScrollable(screenScrollState)
.fillMaxWidth()
.testTag("scrollView"),
horizontalAlignment = Alignment.Start,
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -113,6 +114,8 @@ fun InfoScreen(
) {
val context = LocalContext.current

val screenScrollState = rememberScrollState()

val isSettingsMenuBottomSheetVisible = rememberSaveable { mutableStateOf(false) }

val isEstonianLanguageUsed = remember { mutableStateOf(false) }
Expand Down Expand Up @@ -177,7 +180,8 @@ fun InfoScreen(
Column(
modifier =
modifier
.verticalScroll(rememberScrollState())
.verticalScroll(screenScrollState)
.keyboardScrollable(screenScrollState)
.fillMaxWidth()
.semantics {
testTagsAsResourceId = true
Expand Down
Original file line number Diff line number Diff line change
@@ -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(),
)
}
}
}
Loading
Loading