diff --git a/app/src/main/java/com/geeksville/mesh/ApplicationModule.kt b/app/src/main/java/com/geeksville/mesh/ApplicationModule.kt index 3aa71c8d3..8c9ebfb51 100644 --- a/app/src/main/java/com/geeksville/mesh/ApplicationModule.kt +++ b/app/src/main/java/com/geeksville/mesh/ApplicationModule.kt @@ -23,6 +23,7 @@ import android.content.SharedPreferences import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner +import com.geeksville.mesh.service.MeshServiceNotifications import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -45,4 +46,9 @@ object ApplicationModule { fun provideProcessLifecycle(processLifecycleOwner: LifecycleOwner): Lifecycle { return processLifecycleOwner.lifecycle } + + @Provides + fun providesMeshServiceNotifications(application: Application): MeshServiceNotifications { + return MeshServiceNotifications(application) + } } \ No newline at end of file diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt index 7dd34bf91..6703e26f1 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -61,6 +61,7 @@ import com.geeksville.mesh.repository.datastore.RadioConfigRepository import com.geeksville.mesh.repository.location.LocationRepository import com.geeksville.mesh.repository.radio.RadioInterfaceService import com.geeksville.mesh.service.MeshService +import com.geeksville.mesh.service.MeshServiceNotifications import com.geeksville.mesh.service.ServiceAction import com.geeksville.mesh.ui.map.MAP_STYLE_ID import com.geeksville.mesh.ui.node.components.NodeMenuAction @@ -190,7 +191,8 @@ class UIViewModel @Inject constructor( private val quickChatActionRepository: QuickChatActionRepository, private val locationRepository: LocationRepository, firmwareReleaseRepository: FirmwareReleaseRepository, - private val preferences: SharedPreferences + private val preferences: SharedPreferences, + private val meshServiceNotifications: MeshServiceNotifications ) : ViewModel(), Logging { private val _theme = @@ -573,6 +575,8 @@ class UIViewModel @Inject constructor( fun clearUnreadCount(contact: String, timestamp: Long) = viewModelScope.launch(Dispatchers.IO) { packetRepository.clearUnreadCount(contact, timestamp) + val unreadCount = packetRepository.getUnreadCount(contact) + if (unreadCount == 0) meshServiceNotifications.cancelMessageNotification(contact) } companion object { diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index d68c5a704..dfe4ae9eb 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -150,6 +150,9 @@ class MeshService : Service(), Logging { @Inject lateinit var mqttRepository: MQTTRepository + @Inject + lateinit var serviceNotifications: MeshServiceNotifications + companion object : Logging { // Intents broadcast by MeshService @@ -212,7 +215,6 @@ class MeshService : Service(), Logging { // A mapping of receiver class name to package name - used for explicit broadcasts private val clientPackages = mutableMapOf() - private val serviceNotifications = MeshServiceNotifications(this) private val serviceBroadcasts = MeshServiceBroadcasts(this, clientPackages) { connectionState.also { radioConfigRepository.setConnectionState(it) } } diff --git a/app/src/main/java/com/geeksville/mesh/service/ReplyReceiver.kt b/app/src/main/java/com/geeksville/mesh/service/ReplyReceiver.kt index 25e887007..a4e70c50b 100644 --- a/app/src/main/java/com/geeksville/mesh/service/ReplyReceiver.kt +++ b/app/src/main/java/com/geeksville/mesh/service/ReplyReceiver.kt @@ -35,6 +35,9 @@ class ReplyReceiver : BroadcastReceiver() { @Inject lateinit var serviceRepository: ServiceRepository + @Inject + lateinit var meshServiceNotifications: MeshServiceNotifications + companion object { const val REPLY_ACTION = "com.geeksville.mesh.REPLY_ACTION" const val CONTACT_KEY = "contactKey"