Fix missing unregister of pusher when notifications are disabled
This commit is contained in:
parent
e09b9a2ce0
commit
635f975b6c
@ -29,6 +29,7 @@ import im.vector.app.core.platform.VectorViewModel
|
|||||||
import im.vector.app.core.pushers.EnsureFcmTokenIsRetrievedUseCase
|
import im.vector.app.core.pushers.EnsureFcmTokenIsRetrievedUseCase
|
||||||
import im.vector.app.core.pushers.PushersManager
|
import im.vector.app.core.pushers.PushersManager
|
||||||
import im.vector.app.core.pushers.RegisterUnifiedPushUseCase
|
import im.vector.app.core.pushers.RegisterUnifiedPushUseCase
|
||||||
|
import im.vector.app.core.pushers.UnregisterUnifiedPushUseCase
|
||||||
import im.vector.app.features.analytics.AnalyticsConfig
|
import im.vector.app.features.analytics.AnalyticsConfig
|
||||||
import im.vector.app.features.analytics.AnalyticsTracker
|
import im.vector.app.features.analytics.AnalyticsTracker
|
||||||
import im.vector.app.features.analytics.extensions.toAnalyticsType
|
import im.vector.app.features.analytics.extensions.toAnalyticsType
|
||||||
@ -92,6 +93,7 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||||||
private val stopOngoingVoiceBroadcastUseCase: StopOngoingVoiceBroadcastUseCase,
|
private val stopOngoingVoiceBroadcastUseCase: StopOngoingVoiceBroadcastUseCase,
|
||||||
private val pushersManager: PushersManager,
|
private val pushersManager: PushersManager,
|
||||||
private val registerUnifiedPushUseCase: RegisterUnifiedPushUseCase,
|
private val registerUnifiedPushUseCase: RegisterUnifiedPushUseCase,
|
||||||
|
private val unregisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase,
|
||||||
private val ensureFcmTokenIsRetrievedUseCase: EnsureFcmTokenIsRetrievedUseCase,
|
private val ensureFcmTokenIsRetrievedUseCase: EnsureFcmTokenIsRetrievedUseCase,
|
||||||
) : VectorViewModel<HomeActivityViewState, HomeActivityViewActions, HomeActivityViewEvents>(initialState) {
|
) : VectorViewModel<HomeActivityViewState, HomeActivityViewActions, HomeActivityViewEvents>(initialState) {
|
||||||
|
|
||||||
@ -130,6 +132,8 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||||||
private fun registerUnifiedPushIfNeeded() {
|
private fun registerUnifiedPushIfNeeded() {
|
||||||
if (vectorPreferences.areNotificationEnabledForDevice()) {
|
if (vectorPreferences.areNotificationEnabledForDevice()) {
|
||||||
registerUnifiedPush(distributor = "")
|
registerUnifiedPush(distributor = "")
|
||||||
|
} else {
|
||||||
|
unregisterUnifiedPush()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,6 +150,12 @@ class HomeActivityViewModel @AssistedInject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun unregisterUnifiedPush() {
|
||||||
|
viewModelScope.launch {
|
||||||
|
unregisterUnifiedPushUseCase.execute(pushersManager)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun observeReleaseNotes() = withState { state ->
|
private fun observeReleaseNotes() = withState { state ->
|
||||||
if (vectorPreferences.isNewAppLayoutEnabled()) {
|
if (vectorPreferences.isNewAppLayoutEnabled()) {
|
||||||
// we don't want to show release notes for new users or after relogin
|
// we don't want to show release notes for new users or after relogin
|
||||||
|
@ -16,27 +16,18 @@
|
|||||||
|
|
||||||
package im.vector.app.features.settings.notifications
|
package im.vector.app.features.settings.notifications
|
||||||
|
|
||||||
import im.vector.app.core.di.ActiveSessionHolder
|
|
||||||
import im.vector.app.core.pushers.PushersManager
|
import im.vector.app.core.pushers.PushersManager
|
||||||
import im.vector.app.core.pushers.UnregisterUnifiedPushUseCase
|
import im.vector.app.core.pushers.UnregisterUnifiedPushUseCase
|
||||||
import im.vector.app.features.settings.devices.v2.notification.CheckIfCanToggleNotificationsViaPusherUseCase
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class DisableNotificationsForCurrentSessionUseCase @Inject constructor(
|
class DisableNotificationsForCurrentSessionUseCase @Inject constructor(
|
||||||
private val activeSessionHolder: ActiveSessionHolder,
|
|
||||||
private val pushersManager: PushersManager,
|
private val pushersManager: PushersManager,
|
||||||
private val checkIfCanToggleNotificationsViaPusherUseCase: CheckIfCanToggleNotificationsViaPusherUseCase,
|
|
||||||
private val toggleNotificationsForCurrentSessionUseCase: ToggleNotificationsForCurrentSessionUseCase,
|
private val toggleNotificationsForCurrentSessionUseCase: ToggleNotificationsForCurrentSessionUseCase,
|
||||||
private val unregisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase,
|
private val unregisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
suspend fun execute() {
|
suspend fun execute() {
|
||||||
val session = activeSessionHolder.getSafeActiveSession() ?: return
|
|
||||||
toggleNotificationsForCurrentSessionUseCase.execute(enabled = false)
|
toggleNotificationsForCurrentSessionUseCase.execute(enabled = false)
|
||||||
|
unregisterUnifiedPushUseCase.execute(pushersManager)
|
||||||
// handle case when server does not support toggle of pusher
|
|
||||||
if (!checkIfCanToggleNotificationsViaPusherUseCase.execute(session)) {
|
|
||||||
unregisterUnifiedPushUseCase.execute(pushersManager)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,54 +17,28 @@
|
|||||||
package im.vector.app.features.settings.notifications
|
package im.vector.app.features.settings.notifications
|
||||||
|
|
||||||
import im.vector.app.core.pushers.UnregisterUnifiedPushUseCase
|
import im.vector.app.core.pushers.UnregisterUnifiedPushUseCase
|
||||||
import im.vector.app.features.settings.devices.v2.notification.CheckIfCanToggleNotificationsViaPusherUseCase
|
|
||||||
import im.vector.app.test.fakes.FakeActiveSessionHolder
|
|
||||||
import im.vector.app.test.fakes.FakePushersManager
|
import im.vector.app.test.fakes.FakePushersManager
|
||||||
import io.mockk.coJustRun
|
import io.mockk.coJustRun
|
||||||
import io.mockk.coVerify
|
import io.mockk.coVerify
|
||||||
import io.mockk.every
|
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class DisableNotificationsForCurrentSessionUseCaseTest {
|
class DisableNotificationsForCurrentSessionUseCaseTest {
|
||||||
|
|
||||||
private val fakeActiveSessionHolder = FakeActiveSessionHolder()
|
|
||||||
private val fakePushersManager = FakePushersManager()
|
private val fakePushersManager = FakePushersManager()
|
||||||
private val fakeCheckIfCanToggleNotificationsViaPusherUseCase = mockk<CheckIfCanToggleNotificationsViaPusherUseCase>()
|
|
||||||
private val fakeToggleNotificationsForCurrentSessionUseCase = mockk<ToggleNotificationsForCurrentSessionUseCase>()
|
private val fakeToggleNotificationsForCurrentSessionUseCase = mockk<ToggleNotificationsForCurrentSessionUseCase>()
|
||||||
private val fakeUnregisterUnifiedPushUseCase = mockk<UnregisterUnifiedPushUseCase>()
|
private val fakeUnregisterUnifiedPushUseCase = mockk<UnregisterUnifiedPushUseCase>()
|
||||||
|
|
||||||
private val disableNotificationsForCurrentSessionUseCase = DisableNotificationsForCurrentSessionUseCase(
|
private val disableNotificationsForCurrentSessionUseCase = DisableNotificationsForCurrentSessionUseCase(
|
||||||
activeSessionHolder = fakeActiveSessionHolder.instance,
|
|
||||||
pushersManager = fakePushersManager.instance,
|
pushersManager = fakePushersManager.instance,
|
||||||
checkIfCanToggleNotificationsViaPusherUseCase = fakeCheckIfCanToggleNotificationsViaPusherUseCase,
|
|
||||||
toggleNotificationsForCurrentSessionUseCase = fakeToggleNotificationsForCurrentSessionUseCase,
|
toggleNotificationsForCurrentSessionUseCase = fakeToggleNotificationsForCurrentSessionUseCase,
|
||||||
unregisterUnifiedPushUseCase = fakeUnregisterUnifiedPushUseCase,
|
unregisterUnifiedPushUseCase = fakeUnregisterUnifiedPushUseCase,
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `given toggle via pusher is possible when execute then disable notification via toggle of existing pusher`() = runTest {
|
fun `when execute then disable notifications and unregister the pusher`() = runTest {
|
||||||
// Given
|
// Given
|
||||||
val fakeSession = fakeActiveSessionHolder.fakeSession
|
|
||||||
every { fakeCheckIfCanToggleNotificationsViaPusherUseCase.execute(fakeSession) } returns true
|
|
||||||
coJustRun { fakeToggleNotificationsForCurrentSessionUseCase.execute(any()) }
|
|
||||||
|
|
||||||
// When
|
|
||||||
disableNotificationsForCurrentSessionUseCase.execute()
|
|
||||||
|
|
||||||
// Then
|
|
||||||
coVerify { fakeToggleNotificationsForCurrentSessionUseCase.execute(false) }
|
|
||||||
coVerify(inverse = true) {
|
|
||||||
fakeUnregisterUnifiedPushUseCase.execute(any())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `given toggle via pusher is NOT possible when execute then disable notification by unregistering the pusher`() = runTest {
|
|
||||||
// Given
|
|
||||||
val fakeSession = fakeActiveSessionHolder.fakeSession
|
|
||||||
every { fakeCheckIfCanToggleNotificationsViaPusherUseCase.execute(fakeSession) } returns false
|
|
||||||
coJustRun { fakeToggleNotificationsForCurrentSessionUseCase.execute(any()) }
|
coJustRun { fakeToggleNotificationsForCurrentSessionUseCase.execute(any()) }
|
||||||
coJustRun { fakeUnregisterUnifiedPushUseCase.execute(any()) }
|
coJustRun { fakeUnregisterUnifiedPushUseCase.execute(any()) }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user