AppLifecycleObserver.kt
package chat.rocket.android.app
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import chat.rocket.android.server.infrastructure.ConnectionManagerFactory
import chat.rocket.android.server.infrastructure.RocketChatClientFactory
import chat.rocket.common.model.UserStatus
import chat.rocket.core.internal.realtime.setTemporaryStatus
import javax.inject.Inject
import javax.inject.Named
class AppLifecycleObserver @Inject constructor(
@Named("currentServer") private val currentServer: String?,
private val rocketChatClientFactory: RocketChatClientFactory,
private val connectionManagerFactory: ConnectionManagerFactory
) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onEnterForeground() {
changeTemporaryStatus(UserStatus.Online())
currentServer?.let {
connectionManagerFactory.create(it)?.resetReconnectionTimer()
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onEnterBackground() =
changeTemporaryStatus(UserStatus.Away())
private fun changeTemporaryStatus(userStatus: UserStatus) = currentServer?.let {
rocketChatClientFactory.get(it).setTemporaryStatus(userStatus)
}
}