diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 8d57683..d4f30f4 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -22,7 +22,7 @@ val keystoreProperties = Properties().apply {
android {
namespace = "pl.firmatpp.kierowca"
- compileSdk = 35
+ compileSdk = 36
fun configValue(name: String, default: String): String =
providers.gradleProperty(name)
@@ -33,7 +33,7 @@ android {
defaultConfig {
applicationId = "pl.firmatpp.kierowca"
minSdk = 26
- targetSdk = 35
+ targetSdk = 36
versionCode = 120
versionName = "1.0.67"
setProperty("archivesBaseName", "pl.firmatpp.kierowca")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c0f6007..3454b6a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,6 +9,10 @@
+
+
diff --git a/app/src/main/java/pl/firmatpp/kierowca/data/DeviceInfoProvider.kt b/app/src/main/java/pl/firmatpp/kierowca/data/DeviceInfoProvider.kt
index 1214543..2411092 100644
--- a/app/src/main/java/pl/firmatpp/kierowca/data/DeviceInfoProvider.kt
+++ b/app/src/main/java/pl/firmatpp/kierowca/data/DeviceInfoProvider.kt
@@ -22,17 +22,6 @@ class DeviceInfoProvider(
androidVersion = Build.VERSION.RELEASE,
sdkInt = Build.VERSION.SDK_INT,
appVersion = BuildConfig.VERSION_NAME,
- serialNumber = readSerialNumber(),
+ serialNumber = null,
)
-
- private fun readSerialNumber(): String? =
- runCatching {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- Build.getSerial()
- } else {
- @Suppress("DEPRECATION")
- Build.SERIAL
- }
- }.getOrNull()
- ?.takeUnless { it.isBlank() || it.equals(Build.UNKNOWN, ignoreCase = true) }
}
diff --git a/app/src/main/java/pl/firmatpp/kierowca/diagnostics/DiagnosticSnapshotProvider.kt b/app/src/main/java/pl/firmatpp/kierowca/diagnostics/DiagnosticSnapshotProvider.kt
index 6c88b58..42a0988 100644
--- a/app/src/main/java/pl/firmatpp/kierowca/diagnostics/DiagnosticSnapshotProvider.kt
+++ b/app/src/main/java/pl/firmatpp/kierowca/diagnostics/DiagnosticSnapshotProvider.kt
@@ -229,18 +229,28 @@ class DiagnosticSnapshotProvider(private val context: Context) {
val validated = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
val links = activeNetwork?.let(manager::getLinkProperties)
+ val roaming = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ yesNo(!capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING))
+ } else {
+ "niedostępne"
+ }
+ val mtu = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ links?.mtu?.toString() ?: "brak"
+ } else {
+ "niedostępne"
+ }
return listOf(
DiagnosticEntry("Transport", transports.joinToString()),
DiagnosticEntry("Internet zweryfikowany", yesNo(validated), if (validated) DiagnosticSeverity.Good else DiagnosticSeverity.Error),
DiagnosticEntry("NET_CAPABILITY_INTERNET", yesNo(capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))),
DiagnosticEntry("NET_CAPABILITY_VALIDATED", yesNo(capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED))),
DiagnosticEntry("Sieć mierzona", yesNo(!capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED))),
- DiagnosticEntry("Roaming", yesNo(!capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING))),
+ DiagnosticEntry("Roaming", roaming),
DiagnosticEntry("Pasmo downstream / upstream", "${capabilities.linkDownstreamBandwidthKbps} / ${capabilities.linkUpstreamBandwidthKbps} kb/s"),
DiagnosticEntry("Interfejs", links?.interfaceName ?: "brak"),
DiagnosticEntry("Adresy IP", links?.linkAddresses?.joinToString { it.toString() }?.ifBlank { "brak" } ?: "brak"),
DiagnosticEntry("DNS", links?.dnsServers?.joinToString { it.hostAddress ?: it.toString() }?.ifBlank { "brak" } ?: "brak"),
- DiagnosticEntry("MTU", links?.mtu?.toString() ?: "brak"),
+ DiagnosticEntry("MTU", mtu),
DiagnosticEntry("Proxy", links?.httpProxy?.toString() ?: "brak"),
)
}
diff --git a/app/src/main/java/pl/firmatpp/kierowca/sync/LeaveRequestDecisionNotificationWorker.kt b/app/src/main/java/pl/firmatpp/kierowca/sync/LeaveRequestDecisionNotificationWorker.kt
index 9384f34..3912d36 100644
--- a/app/src/main/java/pl/firmatpp/kierowca/sync/LeaveRequestDecisionNotificationWorker.kt
+++ b/app/src/main/java/pl/firmatpp/kierowca/sync/LeaveRequestDecisionNotificationWorker.kt
@@ -57,7 +57,11 @@ class LeaveRequestDecisionNotificationWorker(
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.build()
- NotificationManagerCompat.from(applicationContext).notify(leaveRequestId.hashCode(), notification)
+ try {
+ NotificationManagerCompat.from(applicationContext).notify(leaveRequestId.hashCode(), notification)
+ } catch (_: SecurityException) {
+ return Result.success()
+ }
return Result.success()
}
diff --git a/app/src/main/java/pl/firmatpp/kierowca/sync/NewRouteNotificationWorker.kt b/app/src/main/java/pl/firmatpp/kierowca/sync/NewRouteNotificationWorker.kt
index 9ce923c..65c49a0 100644
--- a/app/src/main/java/pl/firmatpp/kierowca/sync/NewRouteNotificationWorker.kt
+++ b/app/src/main/java/pl/firmatpp/kierowca/sync/NewRouteNotificationWorker.kt
@@ -73,7 +73,11 @@ class NewRouteNotificationWorker(
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.build()
- NotificationManagerCompat.from(applicationContext).notify(route.id.hashCode(), notification)
+ try {
+ NotificationManagerCompat.from(applicationContext).notify(route.id.hashCode(), notification)
+ } catch (_: SecurityException) {
+ return@runCatching Result.success()
+ }
Result.success()
}.getOrElse { throwable ->
throwable.rethrowIfCancellation()
diff --git a/app/src/main/java/pl/firmatpp/kierowca/tracking/ActiveRouteTrackingService.kt b/app/src/main/java/pl/firmatpp/kierowca/tracking/ActiveRouteTrackingService.kt
index fcf92a6..d986d82 100644
--- a/app/src/main/java/pl/firmatpp/kierowca/tracking/ActiveRouteTrackingService.kt
+++ b/app/src/main/java/pl/firmatpp/kierowca/tracking/ActiveRouteTrackingService.kt
@@ -1,6 +1,7 @@
package pl.firmatpp.kierowca.tracking
import android.Manifest
+import android.annotation.SuppressLint
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
@@ -160,6 +161,7 @@ class ActiveRouteTrackingService : Service(), LocationListener {
super.onDestroy()
}
+ @SuppressLint("MissingPermission")
private fun requestLocationUpdates() {
if (!hasLocationPermission() || routeId.isNullOrBlank() || driverId.isNullOrBlank()) {
return
diff --git a/app/src/main/java/pl/firmatpp/kierowca/ui/PhotoLocationProvider.kt b/app/src/main/java/pl/firmatpp/kierowca/ui/PhotoLocationProvider.kt
index d1311c3..19d3b9b 100644
--- a/app/src/main/java/pl/firmatpp/kierowca/ui/PhotoLocationProvider.kt
+++ b/app/src/main/java/pl/firmatpp/kierowca/ui/PhotoLocationProvider.kt
@@ -1,6 +1,7 @@
package pl.firmatpp.kierowca.ui
import android.Manifest
+import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import android.location.Location
@@ -39,6 +40,7 @@ internal suspend fun currentPhotoLocation(context: Context): Location? {
return bestLastKnownLocation(manager)
}
+@SuppressLint("MissingPermission")
private suspend fun LocationManager.awaitSingleLocation(
context: Context,
provider: String,
@@ -75,6 +77,7 @@ private fun hasAnyLocationPermission(context: Context): Boolean =
ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
+@SuppressLint("MissingPermission")
private fun bestLastKnownLocation(manager: LocationManager): Location? {
val providers = listOf(
LocationManager.GPS_PROVIDER,
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 3d951fb..8e188b6 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.7.3"
+agp = "8.10.1"
kotlin = "2.1.10"
composeBom = "2026.03.00"
activityCompose = "1.9.3"