Replacing callback by a SharedFlow to notify of roomIds updates
This commit is contained in:
parent
33714b850f
commit
ecbd2d48a7
@ -29,6 +29,8 @@ import im.vector.app.features.notifications.NotificationUtils
|
|||||||
import im.vector.app.features.session.coroutineScope
|
import im.vector.app.features.session.coroutineScope
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
|
import kotlinx.coroutines.flow.asSharedFlow
|
||||||
import kotlinx.coroutines.flow.distinctUntilChangedBy
|
import kotlinx.coroutines.flow.distinctUntilChangedBy
|
||||||
import kotlinx.coroutines.flow.filter
|
import kotlinx.coroutines.flow.filter
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@ -66,6 +68,9 @@ class LocationSharingAndroidService : VectorAndroidService(), LocationTracker.Ca
|
|||||||
private val jobs = mutableListOf<Job>()
|
private val jobs = mutableListOf<Job>()
|
||||||
private var startInProgress = false
|
private var startInProgress = false
|
||||||
|
|
||||||
|
private val _roomIdsOfActiveLives = MutableSharedFlow<Set<String>>(replay = 1)
|
||||||
|
val roomIdsOfActiveLives = _roomIdsOfActiveLives.asSharedFlow()
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
Timber.i("onCreate")
|
Timber.i("onCreate")
|
||||||
@ -193,13 +198,13 @@ class LocationSharingAndroidService : VectorAndroidService(), LocationTracker.Ca
|
|||||||
private fun addRoomArgs(beaconEventId: String, roomArgs: RoomArgs) {
|
private fun addRoomArgs(beaconEventId: String, roomArgs: RoomArgs) {
|
||||||
Timber.i("adding roomArgs for beaconEventId: $beaconEventId")
|
Timber.i("adding roomArgs for beaconEventId: $beaconEventId")
|
||||||
roomArgsMap[beaconEventId] = roomArgs
|
roomArgsMap[beaconEventId] = roomArgs
|
||||||
callback?.onRoomIdsUpdate(getRoomIdsOfActiveLives())
|
launchWithActiveSession { _roomIdsOfActiveLives.emit(getRoomIdsOfActiveLives()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun removeRoomArgs(beaconEventId: String) {
|
private fun removeRoomArgs(beaconEventId: String) {
|
||||||
Timber.i("removing roomArgs for beaconEventId: $beaconEventId")
|
Timber.i("removing roomArgs for beaconEventId: $beaconEventId")
|
||||||
roomArgsMap.remove(beaconEventId)
|
roomArgsMap.remove(beaconEventId)
|
||||||
callback?.onRoomIdsUpdate(getRoomIdsOfActiveLives())
|
launchWithActiveSession { _roomIdsOfActiveLives.emit(getRoomIdsOfActiveLives()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun listenForLiveSummaryChanges(roomId: String, beaconEventId: String) {
|
private fun listenForLiveSummaryChanges(roomId: String, beaconEventId: String) {
|
||||||
@ -235,7 +240,6 @@ class LocationSharingAndroidService : VectorAndroidService(), LocationTracker.Ca
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Callback {
|
interface Callback {
|
||||||
fun onRoomIdsUpdate(roomIds: Set<String>)
|
|
||||||
fun onServiceError(error: Throwable)
|
fun onServiceError(error: Throwable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,14 +21,19 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.ServiceConnection
|
import android.content.ServiceConnection
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
|
import im.vector.app.core.di.ActiveSessionHolder
|
||||||
|
import im.vector.app.features.session.coroutineScope
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.flow.launchIn
|
||||||
|
import kotlinx.coroutines.flow.onEach
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class LocationSharingServiceConnection @Inject constructor(
|
class LocationSharingServiceConnection @Inject constructor(
|
||||||
private val context: Context
|
private val context: Context,
|
||||||
) : ServiceConnection,
|
private val activeSessionHolder: ActiveSessionHolder
|
||||||
LocationSharingAndroidService.Callback {
|
) : ServiceConnection, LocationSharingAndroidService.Callback {
|
||||||
|
|
||||||
interface Callback {
|
interface Callback {
|
||||||
fun onLocationServiceRunning(roomIds: Set<String>)
|
fun onLocationServiceRunning(roomIds: Set<String>)
|
||||||
@ -61,12 +66,21 @@ class LocationSharingServiceConnection @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onServiceConnected(className: ComponentName, binder: IBinder) {
|
override fun onServiceConnected(className: ComponentName, binder: IBinder) {
|
||||||
locationSharingAndroidService = (binder as LocationSharingAndroidService.LocalBinder).getService().also {
|
locationSharingAndroidService = (binder as LocationSharingAndroidService.LocalBinder).getService().also { service ->
|
||||||
it.callback = this
|
service.callback = this
|
||||||
|
getActiveSessionCoroutineScope()?.let { scope ->
|
||||||
|
service.roomIdsOfActiveLives
|
||||||
|
.onEach(::onRoomIdsUpdate)
|
||||||
|
.launchIn(scope)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
isBound = true
|
isBound = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getActiveSessionCoroutineScope(): CoroutineScope? {
|
||||||
|
return activeSessionHolder.getSafeActiveSession()?.coroutineScope
|
||||||
|
}
|
||||||
|
|
||||||
override fun onServiceDisconnected(className: ComponentName) {
|
override fun onServiceDisconnected(className: ComponentName) {
|
||||||
isBound = false
|
isBound = false
|
||||||
locationSharingAndroidService?.callback = null
|
locationSharingAndroidService?.callback = null
|
||||||
@ -74,7 +88,7 @@ class LocationSharingServiceConnection @Inject constructor(
|
|||||||
onCallbackActionNoArg(Callback::onLocationServiceStopped)
|
onCallbackActionNoArg(Callback::onLocationServiceStopped)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onRoomIdsUpdate(roomIds: Set<String>) {
|
private fun onRoomIdsUpdate(roomIds: Set<String>) {
|
||||||
forwardRoomIdsToCallbacks(roomIds)
|
forwardRoomIdsToCallbacks(roomIds)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user