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 @@ -40,6 +40,7 @@ import ee.ria.DigiDoc.network.siva.SivaSetting
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.BeforeClass
Expand Down Expand Up @@ -614,4 +615,107 @@ class DataStoreTest {

assertFalse(result)
}

@Test
fun dataStore_getWebEidBrowserPackage_defaultNull() {
val result = dataStore.getWebEidBrowserPackage()

assertNull(result)
}

@Test
fun dataStore_setWebEidBrowserPackage_success() {
dataStore.setWebEidBrowserPackage("com.android.chrome")

val result = dataStore.getWebEidBrowserPackage()

assertEquals("com.android.chrome", result)
}

@Test
fun dataStore_setWebEidBrowserPackage_nullClearsValue() {
dataStore.setWebEidBrowserPackage("com.android.chrome")
dataStore.setWebEidBrowserPackage(null)

val result = dataStore.getWebEidBrowserPackage()

assertNull(result)
}

@Test
fun dataStore_getTemporaryCanNumber_defaultEmpty() {
val result = dataStore.getTemporaryCanNumber()

assertEquals("", result)
}

@Test
fun dataStore_setTemporaryCanNumber_success() {
dataStore.setTemporaryCanNumber("123456")

val result = dataStore.getTemporaryCanNumber()

assertEquals("123456", result)
}

@Test
fun dataStore_clearTemporaryCanNumber_success() {
dataStore.setTemporaryCanNumber("123456")
dataStore.clearTemporaryCanNumber()

val result = dataStore.getTemporaryCanNumber()

assertEquals("", result)
}

@Test
fun dataStore_getWebEidRememberMe_defaultTrue() {
val result = dataStore.getWebEidRememberMe()

assertTrue(result)
}

@Test
fun dataStore_setWebEidRememberMe_successWithFalse() {
dataStore.setWebEidRememberMe(false)

val result = dataStore.getWebEidRememberMe()

assertFalse(result)
}

@Test
fun dataStore_setWebEidRememberMe_successWithTrue() {
dataStore.setWebEidRememberMe(true)

val result = dataStore.getWebEidRememberMe()

assertTrue(result)
}

@Test
fun dataStore_isWebEidSessionActive_defaultFalse() {
val result = dataStore.isWebEidSessionActive()

assertFalse(result)
}

@Test
fun dataStore_setWebEidSessionActive_successWithTrue() {
dataStore.setWebEidSessionActive(true)

val result = dataStore.isWebEidSessionActive()

assertTrue(result)
}

@Test
fun dataStore_setWebEidSessionActive_successWithFalse() {
dataStore.setWebEidSessionActive(true)
dataStore.setWebEidSessionActive(false)

val result = dataStore.isWebEidSessionActive()

assertFalse(result)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ import android.net.Uri
import android.util.Base64.URL_SAFE
import android.util.Base64.decode
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.test.platform.app.InstrumentationRegistry
import ee.ria.DigiDoc.R
import ee.ria.DigiDoc.domain.preferences.DataStore
import ee.ria.DigiDoc.webEid.WebEidAuthService
import ee.ria.DigiDoc.webEid.WebEidSignService
import kotlinx.coroutines.ExperimentalCoroutinesApi
Expand Down Expand Up @@ -58,6 +60,8 @@ class WebEidViewModelTest {
@Mock
private lateinit var signService: WebEidSignService

private lateinit var dataStore: DataStore

private lateinit var viewModel: WebEidViewModel

private val signingCertBase64Raw =
Expand All @@ -82,7 +86,9 @@ class WebEidViewModelTest {
@Before
fun setup() {
MockitoAnnotations.openMocks(this)
viewModel = WebEidViewModel(authService, signService)
val context = InstrumentationRegistry.getInstrumentation().targetContext
dataStore = DataStore(context)
viewModel = WebEidViewModel(authService, signService, dataStore)
}

@Test
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,11 @@
<action android:name="android.intent.action.SEND" />
<data android:mimeType="application/*" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>

</manifest>
10 changes: 9 additions & 1 deletion app/src/main/kotlin/ee/ria/DigiDoc/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,15 @@ class MainActivity :
val componentClassName = this.javaClass.name

val locale = dataStore.getLocale() ?: getLocale("en")
val webEidUri = intent?.data?.takeIf { it.scheme == "web-eid-mobile" }
val webEidUri = intent.data?.takeIf { it.scheme == "web-eid-mobile" }

if (webEidUri != null) {
val browserPackage =
intent
.getStringExtra("com.android.browser.application_id")
?.takeIf { it.isNotEmpty() }
dataStore.setWebEidBrowserPackage(browserPackage)
}

val externalFileUris =
if (webEidUri != null) {
Expand Down
54 changes: 54 additions & 0 deletions app/src/main/kotlin/ee/ria/DigiDoc/domain/preferences/DataStore.kt
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,60 @@ class DataStore
if (cert.isNotEmpty()) editor.putString(key, cert).commit()
}

fun getTemporaryCanNumber(): String {
val encryptedPrefs = getEncryptedPreferences(context)
return encryptedPrefs?.getString(
resources.getString(R.string.main_settings_temporary_can_key),
"",
) ?: ""
}

fun setTemporaryCanNumber(can: String) {
val encryptedPrefs = getEncryptedPreferences(context)
encryptedPrefs?.edit {
putString(resources.getString(R.string.main_settings_temporary_can_key), can)
}
}

fun clearTemporaryCanNumber() {
val encryptedPrefs = getEncryptedPreferences(context)
encryptedPrefs?.edit {
remove(resources.getString(R.string.main_settings_temporary_can_key))
}
}

fun setWebEidRememberMe(value: Boolean) {
preferences.edit {
putBoolean("web_eid_remember_me", value)
}
}

fun getWebEidRememberMe(): Boolean = preferences.getBoolean("web_eid_remember_me", true)

fun setWebEidBrowserPackage(packageName: String?) {
preferences.edit {
if (packageName.isNullOrEmpty()) {
remove("web_eid_browser_package")
} else {
putString("web_eid_browser_package", packageName)
}
}
}

fun getWebEidBrowserPackage(): String? = preferences.getString("web_eid_browser_package", null)

fun isWebEidSessionActive(): Boolean {
val prefs = getEncryptedPreferences(context)
return prefs?.getBoolean("web_eid_session_active", false) ?: false
}

fun setWebEidSessionActive(active: Boolean) {
val prefs = getEncryptedPreferences(context)
prefs?.edit {
putBoolean("web_eid_session_active", active)
}
}

fun getPhoneNo(): String =
preferences.getString(
resources.getString(R.string.main_settings_phone_no_key),
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/kotlin/ee/ria/DigiDoc/fragment/WebEidFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,13 @@ fun WebEidFragment(

LaunchedEffect(viewModel) {
viewModel.relyingPartyResponseEvents.collect { responseUri ->
val browserPackage = viewModel.getWebEidBrowserPackage()
val browserIntent =
Intent(Intent.ACTION_VIEW, responseUri).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
if (!browserPackage.isNullOrEmpty()) {
setPackage(browserPackage)
}
}
activity.startActivity(browserIntent)
activity.finishAndRemoveTask()
Expand Down
Loading
Loading