diff --git a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/debug/res/mipmap-anydpi/ic_launcher.xml
similarity index 100%
rename from app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml
rename to app/src/debug/res/mipmap-anydpi/ic_launcher.xml
diff --git a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/debug/res/mipmap-anydpi/ic_launcher_round.xml
similarity index 100%
rename from app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to app/src/debug/res/mipmap-anydpi/ic_launcher_round.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4e0cbb26f..02839ccb3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,13 +4,10 @@
-
-
-
= 34) {
- TYPE_VIEW_ACCESSIBILITY_FOCUSED
- } else {
- TYPE_ANNOUNCEMENT
- }
+ fun getAccessibilityEventType(): Int = TYPE_VIEW_ACCESSIBILITY_FOCUSED
fun sendAccessibilityEvent(
context: Context,
diff --git a/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/BuildVersionProvider.kt b/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/BuildVersionProvider.kt
deleted file mode 100644
index dd196686a..000000000
--- a/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/BuildVersionProvider.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.common
-
-interface BuildVersionProvider {
- fun getSDKInt(): Int
-}
diff --git a/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/BuildVersionProviderImpl.kt b/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/BuildVersionProviderImpl.kt
deleted file mode 100644
index 62f399d04..000000000
--- a/commons-lib/src/main/kotlin/ee/ria/DigiDoc/common/BuildVersionProviderImpl.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.common
-
-import android.os.Build
-
-class BuildVersionProviderImpl : BuildVersionProvider {
- override fun getSDKInt(): Int = Build.VERSION.SDK_INT
-}
diff --git a/config-lib/src/test/kotlin/ee/ria/DigiDoc/configuration/service/CentralConfigurationServiceImplTest.kt b/config-lib/src/test/kotlin/ee/ria/DigiDoc/configuration/service/CentralConfigurationServiceImplTest.kt
index 35f05149f..cf9a8b6d9 100644
--- a/config-lib/src/test/kotlin/ee/ria/DigiDoc/configuration/service/CentralConfigurationServiceImplTest.kt
+++ b/config-lib/src/test/kotlin/ee/ria/DigiDoc/configuration/service/CentralConfigurationServiceImplTest.kt
@@ -44,10 +44,13 @@ import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.Test
-import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.anyLong
import org.mockito.ArgumentMatchers.anyString
+import org.mockito.MockedStatic
import org.mockito.Mockito.mock
+import org.mockito.Mockito.mockStatic
import org.mockito.Mockito.`when`
+import org.mockito.kotlin.any
@ExperimentalCoroutinesApi
class CentralConfigurationServiceImplTest {
@@ -62,6 +65,8 @@ class CentralConfigurationServiceImplTest {
private lateinit var context: Context
private lateinit var property: ConfigurationProperty
+ private lateinit var packageInfoFlags: MockedStatic
+
@Before
fun setup() {
val packageManager = mock(PackageManager::class.java)
@@ -70,7 +75,12 @@ class CentralConfigurationServiceImplTest {
`when`(context.packageName).thenReturn("test")
val packageInfo = mock(PackageInfo::class.java)
`when`(packageInfo.longVersionCode).thenReturn(0L)
- `when`(packageManager.getPackageInfo(anyString(), anyInt())).thenReturn(packageInfo)
+ packageInfoFlags = mockStatic(PackageManager.PackageInfoFlags::class.java)
+ packageInfoFlags
+ .`when` { PackageManager.PackageInfoFlags.of(anyLong()) }
+ .thenReturn(mock(PackageManager.PackageInfoFlags::class.java))
+ `when`(packageManager.getPackageInfo(anyString(), any()))
+ .thenReturn(packageInfo)
Dispatchers.setMain(testDispatcher)
@@ -123,6 +133,7 @@ class CentralConfigurationServiceImplTest {
@After
fun tearDown() {
+ packageInfoFlags.close()
Dispatchers.resetMain()
mockWebServer.shutdown()
}
diff --git a/crypto-lib/src/main/kotlin/ee/ria/DigiDoc/cryptolib/CryptoContainer.kt b/crypto-lib/src/main/kotlin/ee/ria/DigiDoc/cryptolib/CryptoContainer.kt
index 250cb0b11..5ac8dbd71 100644
--- a/crypto-lib/src/main/kotlin/ee/ria/DigiDoc/cryptolib/CryptoContainer.kt
+++ b/crypto-lib/src/main/kotlin/ee/ria/DigiDoc/cryptolib/CryptoContainer.kt
@@ -55,7 +55,6 @@ import ee.ria.cdoc.ILogger
import ee.ria.cdoc.Lock
import ee.ria.cdoc.NetworkBackend
import ee.ria.cdoc.Recipient
-import ee.ria.cdoc.Recipient.parseLabel
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.withContext
import org.apache.commons.io.FilenameUtils
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 4ba8db4c0..159dfe871 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,6 +1,6 @@
[versions]
compileSdkVersion = "37"
-minSdkVersion = "33"
+minSdkVersion = "34"
targetSdkVersion = "37"
versionCode = "1" # Updated via CodeMagic pipeline.
versionName = "3.1.0"
diff --git a/networking-lib/src/main/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtil.kt b/networking-lib/src/main/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtil.kt
index 0014ec90d..1ca25ba03 100644
--- a/networking-lib/src/main/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtil.kt
+++ b/networking-lib/src/main/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtil.kt
@@ -27,8 +27,6 @@ import android.content.pm.PackageManager
import android.hardware.usb.UsbDevice
import android.hardware.usb.UsbManager
import android.os.Build
-import ee.ria.DigiDoc.common.BuildVersionProvider
-import ee.ria.DigiDoc.common.BuildVersionProviderImpl
import ee.ria.DigiDoc.utilsLib.logging.LoggingUtil.Companion.errorLog
import java.util.Locale
import java.util.stream.Collectors
@@ -55,11 +53,10 @@ object UserAgentUtil {
fun getAppInfo(
context: Context,
sendDiagnostics: SendDiagnostics = SendDiagnostics.None,
- buildVersionProvider: BuildVersionProvider = BuildVersionProviderImpl(),
): String {
val sb = StringBuilder()
- sb.append("riadigidoc/").append(getAppVersion(context, buildVersionProvider))
+ sb.append("riadigidoc/").append(getAppVersion(context))
sb.append(" (schema=1")
sb.append("; os=Android ").append(Build.VERSION.RELEASE)
@@ -95,7 +92,6 @@ object UserAgentUtil {
fun getUserAgent(
context: Context,
sendDiagnostics: SendDiagnostics = SendDiagnostics.None,
- buildVersionProvider: BuildVersionProvider = BuildVersionProviderImpl(),
): String {
val sb = StringBuilder()
@@ -105,7 +101,7 @@ object UserAgentUtil {
sb.append(" (").append(arch).append(") ")
}
- sb.append("APP ").append(getAppInfo(context, sendDiagnostics, buildVersionProvider))
+ sb.append("APP ").append(getAppInfo(context, sendDiagnostics))
return sb.toString()
}
@@ -161,12 +157,9 @@ object UserAgentUtil {
return ArrayList(smartDevices.values)
}
- private fun getAppVersion(
- context: Context,
- buildVersionProvider: BuildVersionProvider,
- ): String =
+ private fun getAppVersion(context: Context): String =
try {
- val info = getPackageInfo(context, buildVersionProvider)
+ val info = getPackageInfo(context)
"${info.versionName}.${info.longVersionCode}"
} catch (e: PackageManager.NameNotFoundException) {
errorLog(LOG_TAG, "Failed getting app version from package info", e)
@@ -174,15 +167,7 @@ object UserAgentUtil {
}
@Throws(PackageManager.NameNotFoundException::class)
- private fun getPackageInfo(
- context: Context,
- buildVersionProvider: BuildVersionProvider,
- ): PackageInfo =
- if (buildVersionProvider.getSDKInt() >= Build.VERSION_CODES.TIRAMISU) {
- context.packageManager
- .getPackageInfo(context.packageName, PackageManager.PackageInfoFlags.of(0))
- } else {
- context.packageManager
- .getPackageInfo(context.packageName, 0)
- }
+ private fun getPackageInfo(context: Context): PackageInfo =
+ context.packageManager
+ .getPackageInfo(context.packageName, PackageManager.PackageInfoFlags.of(0))
}
diff --git a/networking-lib/src/test/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtilTest.kt b/networking-lib/src/test/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtilTest.kt
index 6ddfb7a8d..910e908b3 100644
--- a/networking-lib/src/test/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtilTest.kt
+++ b/networking-lib/src/test/kotlin/ee/ria/DigiDoc/network/utils/UserAgentUtilTest.kt
@@ -29,7 +29,6 @@ import android.content.res.Resources
import android.hardware.usb.UsbDevice
import android.hardware.usb.UsbManager
import android.os.Build
-import ee.ria.DigiDoc.common.BuildVersionProvider
import ee.ria.DigiDoc.network.utils.UserAgentUtil.getAppInfo
import ee.ria.DigiDoc.network.utils.UserAgentUtil.getUserAgent
import junit.framework.TestCase.assertEquals
@@ -38,10 +37,13 @@ import junit.framework.TestCase.assertTrue
import org.junit.After
import org.junit.Before
import org.junit.Test
-import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.anyLong
import org.mockito.ArgumentMatchers.anyString
+import org.mockito.MockedStatic
import org.mockito.Mockito.mock
+import org.mockito.Mockito.mockStatic
import org.mockito.Mockito.`when`
+import org.mockito.kotlin.any
import java.util.Locale
class UserAgentUtilTest {
@@ -50,7 +52,8 @@ class UserAgentUtilTest {
private lateinit var usbDevice: UsbDevice
private lateinit var packageManager: PackageManager
private lateinit var packageInfo: PackageInfo
- private lateinit var buildVersionProvider: BuildVersionProvider
+
+ private lateinit var packageInfoFlags: MockedStatic
private val expectedDeviceModel =
Build.MODEL
@@ -73,11 +76,15 @@ class UserAgentUtilTest {
packageInfo.versionName = "1.2.3"
`when`(packageInfo.longVersionCode).thenReturn(1234L)
- buildVersionProvider = mock(BuildVersionProvider::class.java)
+ packageInfoFlags = mockStatic(PackageManager.PackageInfoFlags::class.java)
+ packageInfoFlags
+ .`when` { PackageManager.PackageInfoFlags.of(anyLong()) }
+ .thenReturn(mock(PackageManager.PackageInfoFlags::class.java))
}
@After
fun tearDown() {
+ packageInfoFlags.close()
Locale.setDefault(originalLocale)
}
@@ -86,7 +93,7 @@ class UserAgentUtilTest {
mockPackageManagerHandling()
mockUsbManagerHandling()
- val result = getUserAgent(context, buildVersionProvider = buildVersionProvider)
+ val result = getUserAgent(context)
assertEquals(
"APP riadigidoc/1.2.3.1234 (schema=1; os=Android ${Build.VERSION.RELEASE}; lang=en; devicetype=mobile/$expectedDeviceModel)",
@@ -99,7 +106,7 @@ class UserAgentUtilTest {
mockPackageManagerHandling()
mockUsbManagerHandling()
- val result = getUserAgent(context, SendDiagnostics.None, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.None)
assertFalse(result.contains("devices="))
}
@@ -121,7 +128,7 @@ class UserAgentUtilTest {
}
} ?: "unknown"
- val result = getUserAgent(context, buildVersionProvider = buildVersionProvider)
+ val result = getUserAgent(context)
assertEquals(
"LIB libdigidocpp/4.5.6.40 ($expectedArch) APP riadigidoc/1.2.3.1234 (schema=1; os=Android ${Build.VERSION.RELEASE}; lang=en; devicetype=mobile/$expectedDeviceModel)",
@@ -140,7 +147,7 @@ class UserAgentUtilTest {
`when`(resources.configuration).thenReturn(configuration)
`when`(context.resources).thenReturn(resources)
- val result = getUserAgent(context, buildVersionProvider = buildVersionProvider)
+ val result = getUserAgent(context)
assertTrue(result.contains("devicetype=tablet/"))
}
@@ -149,12 +156,11 @@ class UserAgentUtilTest {
fun userAgentUtil_getUserAgent_returnUnknownAppVersionOnPackageNotFound() {
`when`(context.packageManager).thenReturn(packageManager)
`when`(context.packageName).thenReturn("App")
- `when`(packageManager.getPackageInfo(anyString(), anyInt()))
+ `when`(packageManager.getPackageInfo(anyString(), any()))
.thenThrow(PackageManager.NameNotFoundException())
mockUsbManagerHandling()
- `when`(buildVersionProvider.getSDKInt()).thenReturn(Build.VERSION.SDK_INT)
- val result = getUserAgent(context, buildVersionProvider = buildVersionProvider)
+ val result = getUserAgent(context)
assertTrue(result.contains("APP riadigidoc/unknown "))
}
@@ -167,7 +173,7 @@ class UserAgentUtilTest {
mockUsbManagerHandling(devices)
`when`(usbDevice.productName).thenReturn("Smart Card Reader 1")
- val result = getUserAgent(context, SendDiagnostics.Devices, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.Devices)
assertEquals(
"APP riadigidoc/1.2.3.1234 (schema=1; os=Android ${Build.VERSION.RELEASE}; lang=en; devicetype=mobile/$expectedDeviceModel; devices=Smart Card Reader 1)",
@@ -180,7 +186,7 @@ class UserAgentUtilTest {
mockPackageManagerHandling()
mockUsbManagerHandling()
- val result = getUserAgent(context, SendDiagnostics.Devices, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.Devices)
assertFalse(result.contains("devices="))
}
@@ -194,7 +200,7 @@ class UserAgentUtilTest {
`when`(usbDevice.productName).thenReturn("Keyboard")
`when`(usbDevice.deviceName).thenReturn("/dev/bus/usb/001/001")
- val result = getUserAgent(context, SendDiagnostics.Devices, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.Devices)
assertFalse(result.contains("devices="))
}
@@ -207,7 +213,7 @@ class UserAgentUtilTest {
mockUsbManagerHandling(devices)
`when`(usbDevice.productName).thenReturn("Smart;Card(Reader)\r\n1")
- val result = getUserAgent(context, SendDiagnostics.Devices, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.Devices)
assertTrue(result.contains("devices=SmartCardReader1)"))
assertFalse(result.contains("\r"))
@@ -222,7 +228,7 @@ class UserAgentUtilTest {
mockUsbManagerHandling(devices)
`when`(usbDevice.deviceName).thenReturn("/dev/bus/usb/001/Card-Reader")
- val result = getUserAgent(context, SendDiagnostics.Devices, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.Devices)
assertTrue(result.contains("devices="))
}
@@ -240,7 +246,7 @@ class UserAgentUtilTest {
`when`(usbDevice2.productName).thenReturn("Smart Card Reader 2")
`when`(usbDevice2.deviceName).thenReturn("/dev/bus/usb/001/002")
- val result = getUserAgent(context, SendDiagnostics.Devices, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.Devices)
assertTrue(result.contains("Some Card Reader"))
assertTrue(result.contains("Smart Card Reader 2"))
@@ -251,7 +257,7 @@ class UserAgentUtilTest {
mockPackageManagerHandling()
mockUsbManagerHandling()
- val result = getUserAgent(context, SendDiagnostics.NFC, buildVersionProvider)
+ val result = getUserAgent(context, SendDiagnostics.NFC)
assertEquals(
"APP riadigidoc/1.2.3.1234 (schema=1; os=Android ${Build.VERSION.RELEASE}; lang=en; devicetype=mobile/$expectedDeviceModel; nfc=true)",
@@ -264,7 +270,7 @@ class UserAgentUtilTest {
mockPackageManagerHandling()
mockUsbManagerHandling()
- val result = getAppInfo(context, buildVersionProvider = buildVersionProvider)
+ val result = getAppInfo(context)
assertEquals(
"riadigidoc/1.2.3.1234 (schema=1; os=Android ${Build.VERSION.RELEASE}; lang=en; devicetype=mobile/$expectedDeviceModel)",
@@ -278,7 +284,7 @@ class UserAgentUtilTest {
mockUsbManagerHandling()
UserAgentUtil.setLibdigidocppVersion("4.5.6.40")
- val result = getAppInfo(context, buildVersionProvider = buildVersionProvider)
+ val result = getAppInfo(context)
// "LIB" and "APP" prefixes must not appear — libdigidocpp adds it itself
assertFalse(result.contains("LIB "))
@@ -293,7 +299,7 @@ class UserAgentUtilTest {
mockUsbManagerHandling(devices)
`when`(usbDevice.productName).thenReturn("Smart Card Reader 1")
- val result = getAppInfo(context, SendDiagnostics.Devices, buildVersionProvider)
+ val result = getAppInfo(context, SendDiagnostics.Devices)
assertEquals(
"riadigidoc/1.2.3.1234 (schema=1; os=Android ${Build.VERSION.RELEASE}; lang=en; devicetype=mobile/$expectedDeviceModel; devices=Smart Card Reader 1)",
@@ -306,7 +312,7 @@ class UserAgentUtilTest {
mockPackageManagerHandling()
mockUsbManagerHandling()
- val result = getAppInfo(context, SendDiagnostics.NFC, buildVersionProvider)
+ val result = getAppInfo(context, SendDiagnostics.NFC)
assertEquals(
"riadigidoc/1.2.3.1234 (schema=1; os=Android ${Build.VERSION.RELEASE}; lang=en; devicetype=mobile/$expectedDeviceModel; nfc=true)",
@@ -314,11 +320,11 @@ class UserAgentUtilTest {
)
}
- private fun mockPackageManagerHandling(sdkInt: Int = Build.VERSION.SDK_INT) {
+ private fun mockPackageManagerHandling() {
`when`(context.packageManager).thenReturn(packageManager)
`when`(context.packageName).thenReturn("App")
- `when`(packageManager.getPackageInfo(anyString(), anyInt())).thenReturn(packageInfo)
- `when`(buildVersionProvider.getSDKInt()).thenReturn(sdkInt)
+ `when`(packageManager.getPackageInfo(anyString(), any()))
+ .thenReturn(packageInfo)
}
private fun mockUsbManagerHandling(devices: HashMap = hashMapOf()) {
diff --git a/smart-id-lib/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/smart-id-lib/src/main/res/mipmap-anydpi/ic_launcher.xml
similarity index 100%
rename from smart-id-lib/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
rename to smart-id-lib/src/main/res/mipmap-anydpi/ic_launcher.xml
diff --git a/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/container/ContainerUtil.kt b/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/container/ContainerUtil.kt
index 367912c27..224324582 100644
--- a/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/container/ContainerUtil.kt
+++ b/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/container/ContainerUtil.kt
@@ -351,7 +351,8 @@ object ContainerUtil {
// Remove app from "Share" and "Open with" menu
val excludedExtraComponents = ArrayList()
val packageManager: PackageManager = context.packageManager
- val resolveInfos: List = packageManager.queryIntentActivities(shareIntent, 0)
+ val resolveInfos: List =
+ packageManager.queryIntentActivities(shareIntent, PackageManager.ResolveInfoFlags.of(0L))
val appPackageName = context.packageName
resolveInfos.forEach { resolveInfo ->
diff --git a/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/extensions/FileExtensions.kt b/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/extensions/FileExtensions.kt
index 414f7c03c..a260c97a1 100644
--- a/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/extensions/FileExtensions.kt
+++ b/utils-lib/src/main/kotlin/ee/ria/DigiDoc/utilsLib/extensions/FileExtensions.kt
@@ -22,7 +22,6 @@
package ee.ria.DigiDoc.utilsLib.extensions
import android.content.Context
-import android.util.Log
import android.webkit.MimeTypeMap
import com.tom_roush.pdfbox.android.PDFBoxResourceLoader
import com.tom_roush.pdfbox.pdmodel.PDDocument
@@ -171,4 +170,4 @@ private fun checkIsZipFile(file: File) {
.Builder()
.setFile(file)
.get()
-}
\ No newline at end of file
+}