Skip to content
Open
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 @@ -315,6 +315,32 @@ class DataStoreTest {
assertEquals(false, result)
}

@Test
fun dataStore_getSettingsDefaultLTA_returnFalseByDefault() {
val result = dataStore.getSettingsDefaultLTA()

assertFalse(result)
}

@Test
fun dataStore_setSettingsDefaultLTA_returnTrueWhenEnabled() {
dataStore.setSettingsDefaultLTA(true)

val result = dataStore.getSettingsDefaultLTA()

assertTrue(result)
}

@Test
fun dataStore_setSettingsDefaultLTA_returnFalseWhenDisabled() {
dataStore.setSettingsDefaultLTA(true)
dataStore.setSettingsDefaultLTA(false)

val result = dataStore.getSettingsDefaultLTA()

assertFalse(result)
}

@Test
fun dataStore_getSettingsAllowScreenshots_success() {
val result = dataStore.getSettingsAllowScreenshots()
Expand Down Expand Up @@ -561,7 +587,7 @@ class DataStoreTest {
fun dataStore_getLibdigidocppVersion_success() {
val result = dataStore.getLibdigidocppVersion()

assertEquals("4.3.0.40", result)
assertEquals("4.4.0.48", result)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.atLeastOnce
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import org.mockito.junit.MockitoJUnitRunner
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.atLeastOnce
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
import java.io.File
Expand Down Expand Up @@ -545,6 +545,13 @@ class SigningViewModelTest {
assertFalse(isContainerWithTimestamps)
}

@Test
fun signingViewModel_isContainerWithTimestamps_returnFalseWhenContainerIsNull() {
val isContainerWithTimestamps = viewModel.isContainerWithTimestamps(null)

assertFalse(isContainerWithTimestamps)
}

@Test
fun signingViewModel_getMimetype_success() =
runTest {
Expand Down Expand Up @@ -596,4 +603,50 @@ class SigningViewModelTest {

assertEquals("text/plain", mimetype)
}

@Test
fun signingViewModel_isExtendSignaturesButtonShown_returnTrueWithSignedContainerNotNested() =
runTest {
val file = getResourceFileAsFile(context, "example.asice", R.raw.example)
val container = SignedContainer.openOrCreate(context, file, listOf(file), true)

val isExtendSignaturesButtonShown = viewModel.isExtendSignaturesButtonShown(container, false)

assertTrue(isExtendSignaturesButtonShown)
}

@Test
fun signingViewModel_isExtendSignaturesButtonShown_returnFalseWhenContainerIsNull() {
val isExtendSignaturesButtonShown = viewModel.isExtendSignaturesButtonShown(null, false)

assertFalse(isExtendSignaturesButtonShown)
}

@Test
fun signingViewModel_isExtendSignaturesButtonShown_returnFalseWhenContainerIsUnsigned() =
runTest {
val file =
getResourceFileAsFile(
context,
"example_no_signatures.asice",
R.raw.example_no_signatures,
)
val container = SignedContainer.openOrCreate(context, file, listOf(file), true)

val isExtendSignaturesButtonShown = viewModel.isExtendSignaturesButtonShown(container, false)

assertFalse(isExtendSignaturesButtonShown)
}

@Test
fun signingViewModel_isExtendSignaturesButtonShown_returnFalseWhenContainerIsNested() =
runTest {
val file = getResourceFileAsFile(context, "example.asice", R.raw.example)
val container = SignedContainer.openOrCreate(context, file, listOf(file), true)

val isExtendSignaturesButtonShown = viewModel.isExtendSignaturesButtonShown(container, true)

assertFalse(isExtendSignaturesButtonShown)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ class SharedSettingsViewModelTest {
assertEquals(DEFAULT_UUID_VALUE, dataStore.getSettingsUUID())
assertEquals("", dataStore.getSettingsTSAUrl())
assertFalse(dataStore.getSettingsAskRoleAndAddress())
assertFalse(dataStore.getSettingsDefaultLTA())
assertFalse(dataStore.getIsTsaCertificateViewVisible())

assertEquals("", dataStore.getTSACertName())
Expand All @@ -182,6 +183,15 @@ class SharedSettingsViewModelTest {
assertEquals("", dataStore.getProxyPassword())
}

@Test
fun sharedSettingsViewModel_resetToDefaultSettings_resetsDefaultLTAToFalse() {
dataStore.setSettingsDefaultLTA(true)

viewModel.resetToDefaultSettings()

assertFalse(dataStore.getSettingsDefaultLTA())
}

@Test
fun sharedSettingsViewModel_saveProxySettings_savesManualProxySettings() {
dataStore.setProxySetting(ProxySetting.MANUAL_PROXY)
Expand Down
20 changes: 18 additions & 2 deletions app/src/main/kotlin/ee/ria/DigiDoc/domain/preferences/DataStore.kt
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,21 @@ class DataStore
}
}

fun getSettingsDefaultLTA(): Boolean =
preferences.getBoolean(
resources.getString(R.string.main_settings_default_lta_key),
false,
)

fun setSettingsDefaultLTA(isEnabled: Boolean) {
preferences.edit {
putBoolean(
resources.getString(R.string.main_settings_default_lta_key),
isEnabled,
)
}
}

fun getRoles(): String =
preferences.getString(
resources.getString(R.string.main_settings_role_key),
Expand Down Expand Up @@ -685,13 +700,14 @@ class DataStore
) ?: ""

fun setProxyPassword(password: String) {
getEncryptedPreferences(context)?.edit {
if (getEncryptedPreferences(context)?.edit {
putString(
resources.getString(ee.ria.DigiDoc.network.R.string.main_settings_proxy_password_key),
password,
)
} == null) {
errorLog(logTag, "Unable to set proxy password")
}
errorLog(logTag, "Unable to set proxy password")
}

fun getProxyPassword(): String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,13 @@ package ee.ria.DigiDoc.fragment.screen

import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -43,12 +41,9 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
Expand All @@ -64,10 +59,8 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
Expand All @@ -89,6 +82,7 @@ import ee.ria.DigiDoc.configuration.provider.ConfigurationProvider.CDOC2Conf
import ee.ria.DigiDoc.domain.model.settings.CDOCSetting
import ee.ria.DigiDoc.ui.component.menu.SettingsMenuBottomSheet
import ee.ria.DigiDoc.ui.component.settings.SettingsSwitchItem
import ee.ria.DigiDoc.ui.component.settings.shared.SettingsRadioCard
import ee.ria.DigiDoc.ui.component.shared.InvisibleElement
import ee.ria.DigiDoc.ui.component.shared.PrimaryTextField
import ee.ria.DigiDoc.ui.component.shared.TopBar
Expand All @@ -97,17 +91,13 @@ import ee.ria.DigiDoc.ui.component.support.textFieldValueSaver
import ee.ria.DigiDoc.ui.theme.Dimensions.LPadding
import ee.ria.DigiDoc.ui.theme.Dimensions.MSPadding
import ee.ria.DigiDoc.ui.theme.Dimensions.SPadding
import ee.ria.DigiDoc.ui.theme.Dimensions.XSBorder
import ee.ria.DigiDoc.ui.theme.Dimensions.XSPadding
import ee.ria.DigiDoc.ui.theme.buttonRoundedCornerShape
import ee.ria.DigiDoc.utils.Route
import ee.ria.DigiDoc.utils.extensions.notAccessible
import ee.ria.DigiDoc.utils.snackbar.SnackBarManager
import ee.ria.DigiDoc.viewmodel.EncryptionServicesViewModel
import ee.ria.DigiDoc.viewmodel.shared.SharedCertificateViewModel
import ee.ria.DigiDoc.viewmodel.shared.SharedMenuViewModel
import ee.ria.DigiDoc.viewmodel.shared.SharedSettingsViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch
Expand All @@ -131,6 +121,7 @@ fun EncryptionServicesSettingsScreen(
val context = LocalContext.current
val snackBarHostState = remember { SnackbarHostState() }
val snackBarScope = rememberCoroutineScope()
val scope = rememberCoroutineScope()

val messages by SnackBarManager.messages.collectAsState(emptyList())

Expand Down Expand Up @@ -270,7 +261,7 @@ fun EncryptionServicesSettingsScreen(
navController.popBackStack()
return@rememberLauncherForActivityResult
}
CoroutineScope(Dispatchers.IO).launch {
scope.launch(Dispatchers.IO) {
sharedSettingsViewModel.handleCryptoCertFile(uri)
withContext(Main) {
sharedSettingsViewModel.updateCryptoCertData(context)
Expand Down Expand Up @@ -340,100 +331,24 @@ fun EncryptionServicesSettingsScreen(
.padding(top = SPadding)
.verticalScroll(rememberScrollState()),
) {
Card(
modifier =
modifier
.fillMaxWidth()
.padding(top = XSPadding, bottom = SPadding),
shape = buttonRoundedCornerShape,
border =
BorderStroke(
width = XSBorder,
color = MaterialTheme.colorScheme.onSurface,
),
colors = CardDefaults.cardColors(containerColor = Color.Transparent),
) {
Row(
modifier =
modifier
.fillMaxWidth()
.padding(SPadding)
.clickable {
encryptionServicesViewModel.setCdocSetting(CDOCSetting.CDOC1)
},
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = useCDOC1Label,
modifier =
modifier
.weight(1f)
.notAccessible(),
)
RadioButton(
modifier =
modifier
.semantics {
contentDescription = useCDOC1Label
},
selected = cdocSetting == CDOCSetting.CDOC1,
onClick = {
encryptionServicesViewModel.setCdocSetting(CDOCSetting.CDOC1)
},
)
}
}
SettingsRadioCard(
modifier = modifier,
label = useCDOC1Label,
selected = cdocSetting == CDOCSetting.CDOC1,
onClick = {
encryptionServicesViewModel.setCdocSetting(CDOCSetting.CDOC1)
},
)

Card(
modifier =
modifier
.fillMaxWidth()
.padding(top = XSPadding, bottom = SPadding),
shape = buttonRoundedCornerShape,
border =
BorderStroke(
width = XSBorder,
color = MaterialTheme.colorScheme.onSurface,
),
colors = CardDefaults.cardColors(containerColor = Color.Transparent),
SettingsRadioCard(
modifier = modifier,
label = useCDOC2Label,
selected = cdocSetting == CDOCSetting.CDOC2,
onClick = {
encryptionServicesViewModel.setCdocSetting(CDOCSetting.CDOC2)
},
) {
Column(
modifier =
modifier
.padding(SPadding)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Row(
modifier =
modifier
.clickable {
encryptionServicesViewModel.setCdocSetting(CDOCSetting.CDOC2)
},
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = useCDOC2Label,
style = MaterialTheme.typography.bodyLarge,
modifier =
modifier
.weight(1f)
.notAccessible(),
)
RadioButton(
modifier =
modifier
.semantics {
contentDescription = useCDOC2Label
},
selected = cdocSetting == CDOCSetting.CDOC2,
onClick = {
encryptionServicesViewModel.setCdocSetting(CDOCSetting.CDOC2)
},
)
}

if (cdocSetting == CDOCSetting.CDOC2) {
if (cdocSetting == CDOCSetting.CDOC2) {
Spacer(modifier = modifier.height(LPadding))

SettingsSwitchItem(
Expand Down Expand Up @@ -693,7 +608,6 @@ fun EncryptionServicesSettingsScreen(
}
}
}
}
}
}

Expand Down
Loading
Loading