Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit afaf3af

Browse files
authored
Merge pull request #1519 from RocketChat/fix/fix-temporary-status-on-reconnection
[FIX] fix temporary status on reconnection
2 parents 33adccb + ec005ba commit afaf3af

3 files changed

Lines changed: 24 additions & 11 deletions

File tree

app/src/main/java/chat/rocket/android/app/AppLifecycleObserver.kt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.lifecycle.LifecycleObserver
55
import androidx.lifecycle.OnLifecycleEvent
66
import chat.rocket.android.server.domain.GetAccountInteractor
77
import chat.rocket.android.server.domain.GetCurrentServerInteractor
8+
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
89
import chat.rocket.android.server.infraestructure.RocketChatClientFactory
910
import chat.rocket.common.RocketChatException
1011
import chat.rocket.common.model.UserStatus
@@ -15,8 +16,7 @@ import javax.inject.Inject
1516

1617
class AppLifecycleObserver @Inject constructor(
1718
private val serverInteractor: GetCurrentServerInteractor,
18-
private val factory: RocketChatClientFactory,
19-
private val getAccountInteractor: GetAccountInteractor
19+
private val factory: ConnectionManagerFactory
2020
) : LifecycleObserver {
2121

2222
@OnLifecycleEvent(Lifecycle.Event.ON_START)
@@ -31,14 +31,8 @@ class AppLifecycleObserver @Inject constructor(
3131

3232
private fun changeTemporaryStatus(userStatus: UserStatus) {
3333
launch {
34-
val currentServer = serverInteractor.get()
35-
val account = currentServer?.let { getAccountInteractor.get(currentServer) }
36-
val client = account?.let { factory.create(currentServer) }
37-
38-
try {
39-
client?.setTemporaryStatus(userStatus)
40-
} catch (exception: RocketChatException) {
41-
Timber.e(exception)
34+
serverInteractor.get()?.let { currentServer ->
35+
factory.create(currentServer).setTemporaryStatus(userStatus)
4236
}
4337
}
4438
}

app/src/main/java/chat/rocket/android/main/presentation/MainPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class MainPresenter @Inject constructor(
176176
fun changeDefaultStatus(userStatus: UserStatus) {
177177
launchUI(strategy) {
178178
try {
179-
client.setDefaultStatus(userStatus)
179+
manager.setDefaultStatus(userStatus)
180180
view.showUserStatus(userStatus)
181181
} catch (ex: RocketChatException) {
182182
ex.message?.let {

app/src/main/java/chat/rocket/android/server/infraestructure/ConnectionManager.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import chat.rocket.android.db.DatabaseManager
55
import chat.rocket.android.infrastructure.LocalRepository
66
import chat.rocket.common.model.BaseRoom
77
import chat.rocket.common.model.User
8+
import chat.rocket.common.model.UserStatus
89
import chat.rocket.core.RocketChatClient
10+
import chat.rocket.core.internal.realtime.setDefaultStatus
11+
import chat.rocket.core.internal.realtime.setTemporaryStatus
912
import chat.rocket.core.internal.realtime.socket.connect
1013
import chat.rocket.core.internal.realtime.socket.disconnect
1114
import chat.rocket.core.internal.realtime.socket.model.State
@@ -49,6 +52,7 @@ class ConnectionManager(
4952
private var roomsId: String? = null
5053
private var userDataId: String? = null
5154
private var activeUserId: String? = null
55+
private var temporaryStatus: UserStatus? = null
5256

5357
private val activeUsersContext = newSingleThreadContext("activeUsersContext")
5458
private val roomsContext = newSingleThreadContext("roomsContext")
@@ -90,6 +94,10 @@ class ConnectionManager(
9094
}
9195

9296
resubscribeRooms()
97+
98+
temporaryStatus?.let { status ->
99+
client.setTemporaryStatus(status)
100+
}
93101
}
94102
is State.Waiting -> {
95103
Timber.d("Connection in: ${status.seconds}")
@@ -176,6 +184,16 @@ class ConnectionManager(
176184
}
177185
}
178186

187+
fun setDefaultStatus(userStatus: UserStatus) {
188+
temporaryStatus = null
189+
client.setDefaultStatus(userStatus)
190+
}
191+
192+
fun setTemporaryStatus(userStatus: UserStatus) {
193+
temporaryStatus = userStatus
194+
client.setTemporaryStatus(userStatus)
195+
}
196+
179197
private fun resubscribeRooms() {
180198
roomMessagesChannels.toList().map { (roomId, channel) ->
181199
client.subscribeRoomMessages(roomId) { _, id ->
@@ -190,6 +208,7 @@ class ConnectionManager(
190208
client.removeStateChannel(statusChannel)
191209
client.disconnect()
192210
connectJob?.cancel()
211+
temporaryStatus = null
193212
}
194213

195214
fun addStatusChannel(channel: Channel<State>) = statusChannelList.add(channel)

0 commit comments

Comments
 (0)