diff --git a/app/src/google/kotlin/org/meshtastic/app/analytics/GooglePlatformAnalytics.kt b/app/src/google/kotlin/org/meshtastic/app/analytics/GooglePlatformAnalytics.kt index 691874782..bf42494e5 100644 --- a/app/src/google/kotlin/org/meshtastic/app/analytics/GooglePlatformAnalytics.kt +++ b/app/src/google/kotlin/org/meshtastic/app/analytics/GooglePlatformAnalytics.kt @@ -38,7 +38,7 @@ import com.datadog.android.rum.RumActionType import com.datadog.android.rum.RumConfiguration import com.datadog.android.sessionreplay.SessionReplay import com.datadog.android.sessionreplay.SessionReplayConfiguration -import com.datadog.android.sessionreplay.SessionReplayPrivacy +import com.datadog.android.sessionreplay.TextAndInputPrivacy import com.datadog.android.trace.Trace import com.datadog.android.trace.TraceConfiguration import com.datadog.android.trace.opentelemetry.DatadogOpenTelemetry @@ -175,7 +175,9 @@ class GooglePlatformAnalytics(private val context: Context, private val analytic // Masks all text inputs to protect message content. if (BuildConfig.DEBUG) { val sessionReplayConfig = - SessionReplayConfiguration.Builder(sampleRate).setPrivacy(SessionReplayPrivacy.MASK_USER_INPUT).build() + SessionReplayConfiguration.Builder(sampleRate) + .setTextAndInputPrivacy(TextAndInputPrivacy.MASK_ALL_INPUTS) + .build() SessionReplay.enable(sessionReplayConfig) } diff --git a/app/src/google/kotlin/org/meshtastic/app/map/component/EditWaypointDialog.kt b/app/src/google/kotlin/org/meshtastic/app/map/component/EditWaypointDialog.kt index 856124e08..18eb0ac83 100644 --- a/app/src/google/kotlin/org/meshtastic/app/map/component/EditWaypointDialog.kt +++ b/app/src/google/kotlin/org/meshtastic/app/map/component/EditWaypointDialog.kt @@ -57,7 +57,6 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import kotlinx.datetime.Instant import kotlinx.datetime.LocalDate import kotlinx.datetime.Month import kotlinx.datetime.atTime @@ -120,12 +119,12 @@ fun EditWaypointDialog( val expireValue = waypointInput.expire ?: 0 if (isExpiryEnabled) { if (expireValue != 0 && expireValue != Int.MAX_VALUE) { - val instant = Instant.fromEpochSeconds(expireValue.toLong()) + val instant = kotlin.time.Instant.fromEpochSeconds(expireValue.toLong()) val date = java.util.Date(instant.toEpochMilliseconds()) selectedDateString = dateFormat.format(date) selectedTimeString = timeFormat.format(date) } else { // If enabled but not set, default to 8 hours from now - val futureInstant = kotlinx.datetime.Clock.System.now() + 8.hours + val futureInstant = kotlin.time.Clock.System.now() + 8.hours val date = java.util.Date(futureInstant.toEpochMilliseconds()) selectedDateString = dateFormat.format(date) selectedTimeString = timeFormat.format(date) @@ -223,7 +222,7 @@ fun EditWaypointDialog( val expireValue = waypointInput.expire ?: 0 // Default to 8 hours from now if not already set if (expireValue == 0 || expireValue == Int.MAX_VALUE) { - val futureInstant = kotlinx.datetime.Clock.System.now() + 8.hours + val futureInstant = kotlin.time.Clock.System.now() + 8.hours waypointInput = waypointInput.copy(expire = futureInstant.epochSeconds.toInt()) } } else { @@ -237,9 +236,9 @@ fun EditWaypointDialog( val currentInstant = (waypointInput.expire ?: 0).let { if (it != 0 && it != Int.MAX_VALUE) { - Instant.fromEpochSeconds(it.toLong()) + kotlin.time.Instant.fromEpochSeconds(it.toLong()) } else { - kotlinx.datetime.Clock.System.now() + 8.hours + kotlin.time.Clock.System.now() + 8.hours } } val ldt = currentInstant.toLocalDateTime(tz) @@ -252,9 +251,9 @@ fun EditWaypointDialog( (waypointInput.expire ?: 0) .let { if (it != 0 && it != Int.MAX_VALUE) { - Instant.fromEpochSeconds(it.toLong()) + kotlin.time.Instant.fromEpochSeconds(it.toLong()) } else { - kotlinx.datetime.Clock.System.now() + 8.hours + kotlin.time.Clock.System.now() + 8.hours } } .toLocalDateTime(tz) @@ -287,9 +286,9 @@ fun EditWaypointDialog( (waypointInput.expire ?: 0) .let { if (it != 0 && it != Int.MAX_VALUE) { - Instant.fromEpochSeconds(it.toLong()) + kotlin.time.Instant.fromEpochSeconds(it.toLong()) } else { - kotlinx.datetime.Clock.System.now() + 8.hours + kotlin.time.Clock.System.now() + 8.hours } } .toLocalDateTime(tz) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f3bea85f7..43468c69d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,8 +44,8 @@ - - + + diff --git a/core/api/build.gradle.kts b/core/api/build.gradle.kts index 94d10fdd9..dd3f65acf 100644 --- a/core/api/build.gradle.kts +++ b/core/api/build.gradle.kts @@ -33,6 +33,10 @@ configure { publishing { singleVariant("release") { withSourcesJar() } } } +// Suppress dep-ann warnings from AIDL-generated code where Javadoc @deprecated +// doesn't produce @Deprecated annotations on Stub/Proxy override methods. +tasks.withType().configureEach { options.compilerArgs.add("-Xlint:-dep-ann") } + // Map the Android component to a Maven publication afterEvaluate { publishing { diff --git a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/AndroidServiceRepository.kt b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/AndroidServiceRepository.kt index ec569e27f..cf1eaff25 100644 --- a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/AndroidServiceRepository.kt +++ b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/AndroidServiceRepository.kt @@ -27,6 +27,7 @@ import org.meshtastic.core.repository.ServiceRepository * in `MeshService`. */ @Single(binds = [ServiceRepository::class, AndroidServiceRepository::class]) +@Suppress("DEPRECATION") // IMeshService is deprecated but still required for AIDL binding class AndroidServiceRepository : ServiceRepositoryImpl() { var meshService: IMeshService? = null private set diff --git a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshService.kt b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshService.kt index 7bcc8c815..701ca2d69 100644 --- a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshService.kt +++ b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshService.kt @@ -49,7 +49,8 @@ import org.meshtastic.core.repository.ServiceBroadcasts import org.meshtastic.core.repository.ServiceRepository import org.meshtastic.proto.PortNum -@Suppress("TooManyFunctions", "LargeClass") +// IMeshService is deprecated but still required for AIDL binding +@Suppress("TooManyFunctions", "LargeClass", "DEPRECATION") class MeshService : Service() { private val radioInterfaceService: RadioInterfaceService by inject() @@ -88,7 +89,6 @@ class MeshService : Service() { fun createIntent(context: Context) = Intent(context, MeshService::class.java) fun changeDeviceAddress(context: Context, service: IMeshService, address: String?) { - @Suppress("DEPRECATION") // Internal use: routes address change through AIDL binder service.setDeviceAddress(address) startService(context) } diff --git a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshServiceClient.kt b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshServiceClient.kt index 2114ae784..5933d85b0 100644 --- a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshServiceClient.kt +++ b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/MeshServiceClient.kt @@ -29,6 +29,7 @@ import org.meshtastic.core.common.util.SequentialJob /** A Activity-lifecycle-aware [ServiceClient] that binds [MeshService] once the Activity is started. */ @Factory +@Suppress("DEPRECATION") // IMeshService is deprecated but still required for AIDL binding class MeshServiceClient( private val context: Context, private val serviceRepository: AndroidServiceRepository, diff --git a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/testing/FakeIMeshService.kt b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/testing/FakeIMeshService.kt index 6d518f698..720f975d7 100644 --- a/core/service/src/androidMain/kotlin/org/meshtastic/core/service/testing/FakeIMeshService.kt +++ b/core/service/src/androidMain/kotlin/org/meshtastic/core/service/testing/FakeIMeshService.kt @@ -14,6 +14,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +@file:Suppress("DEPRECATION") // IMeshService is deprecated but still required for AIDL binding + package org.meshtastic.core.service.testing import org.meshtastic.core.model.DataPacket diff --git a/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MainScreen.kt b/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MainScreen.kt index 8e19bcd72..408a37d25 100644 --- a/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MainScreen.kt +++ b/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MainScreen.kt @@ -483,7 +483,13 @@ private fun NodeItemActions(isOnline: Boolean, onAction: (String) -> Unit) { Icon(Icons.Rounded.Route, "Traceroute", Modifier.size(20.dp), MaterialTheme.colorScheme.primary) } IconButton(onClick = { onAction("telemetry") }, modifier = Modifier.size(40.dp)) { - Icon(Icons.Rounded.BatteryUnknown, "Telemetry", Modifier.size(20.dp), MaterialTheme.colorScheme.secondary) + Icon( + @Suppress("DEPRECATION") // AutoMirrored variant not available in current icons version + Icons.Rounded.BatteryUnknown, + "Telemetry", + Modifier.size(20.dp), + MaterialTheme.colorScheme.secondary, + ) } IconButton(onClick = { onAction("position") }, modifier = Modifier.size(40.dp)) { Icon(Icons.Rounded.MyLocation, "Position", Modifier.size(20.dp), MaterialTheme.colorScheme.tertiary) diff --git a/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MeshServiceViewModel.kt b/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MeshServiceViewModel.kt index 09fb9fe0f..7c72516bf 100644 --- a/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MeshServiceViewModel.kt +++ b/mesh_service_example/src/main/kotlin/com/meshtastic/android/meshserviceexample/MeshServiceViewModel.kt @@ -14,6 +14,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +@file:Suppress("DEPRECATION") // IMeshService is deprecated but still required for AIDL binding + package com.meshtastic.android.meshserviceexample import android.content.Intent