Removing listening on background sync preference
This commit is contained in:
parent
3f5147ddce
commit
06681fd115
@ -16,11 +16,7 @@
|
|||||||
|
|
||||||
package im.vector.app.core.notification
|
package im.vector.app.core.notification
|
||||||
|
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
|
||||||
import im.vector.app.features.session.coroutineScope
|
import im.vector.app.features.session.coroutineScope
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
|
||||||
import im.vector.app.features.settings.VectorPreferences.Companion.SETTINGS_FDROID_BACKGROUND_SYNC_MODE
|
|
||||||
import im.vector.app.features.settings.devices.v2.notification.UpdateNotificationSettingsAccountDataUseCase
|
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
@ -29,21 +25,16 @@ import javax.inject.Singleton
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Listen changes in Pusher or Account Data to update the local setting for notification toggle.
|
* Listen changes in Pusher or Account Data to update the local setting for notification toggle.
|
||||||
* Listen changes on background sync mode preference to update the corresponding Account Data event.
|
|
||||||
*/
|
*/
|
||||||
@Singleton
|
@Singleton
|
||||||
class NotificationsSettingUpdater @Inject constructor(
|
class NotificationsSettingUpdater @Inject constructor(
|
||||||
private val updateEnableNotificationsSettingOnChangeUseCase: UpdateEnableNotificationsSettingOnChangeUseCase,
|
private val updateEnableNotificationsSettingOnChangeUseCase: UpdateEnableNotificationsSettingOnChangeUseCase,
|
||||||
private val vectorPreferences: VectorPreferences,
|
|
||||||
private val updateNotificationSettingsAccountDataUseCase: UpdateNotificationSettingsAccountDataUseCase,
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private var job: Job? = null
|
private var job: Job? = null
|
||||||
private var prefChangeListener: OnSharedPreferenceChangeListener? = null
|
|
||||||
|
|
||||||
fun onSessionStarted(session: Session) {
|
fun onSessionStarted(session: Session) {
|
||||||
updateEnableNotificationsSettingOnChange(session)
|
updateEnableNotificationsSettingOnChange(session)
|
||||||
updateAccountDataOnBackgroundSyncChange(session)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateEnableNotificationsSettingOnChange(session: Session) {
|
private fun updateEnableNotificationsSettingOnChange(session: Session) {
|
||||||
@ -52,22 +43,4 @@ class NotificationsSettingUpdater @Inject constructor(
|
|||||||
updateEnableNotificationsSettingOnChangeUseCase.execute(session)
|
updateEnableNotificationsSettingOnChangeUseCase.execute(session)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateAccountDataOnBackgroundSyncChange(session: Session) {
|
|
||||||
prefChangeListener?.let { vectorPreferences.unsubscribeToChanges(it) }
|
|
||||||
prefChangeListener = null
|
|
||||||
prefChangeListener = createPrefListener(session).also {
|
|
||||||
vectorPreferences.subscribeToChanges(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun createPrefListener(session: Session): OnSharedPreferenceChangeListener {
|
|
||||||
return OnSharedPreferenceChangeListener { _, key ->
|
|
||||||
session.coroutineScope.launch {
|
|
||||||
if (key == SETTINGS_FDROID_BACKGROUND_SYNC_MODE) {
|
|
||||||
updateNotificationSettingsAccountDataUseCase.execute(session)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,7 @@
|
|||||||
package im.vector.app.core.notification
|
package im.vector.app.core.notification
|
||||||
|
|
||||||
import im.vector.app.features.session.coroutineScope
|
import im.vector.app.features.session.coroutineScope
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
|
||||||
import im.vector.app.features.settings.devices.v2.notification.UpdateNotificationSettingsAccountDataUseCase
|
|
||||||
import im.vector.app.test.fakes.FakeSession
|
import im.vector.app.test.fakes.FakeSession
|
||||||
import im.vector.app.test.fakes.FakeVectorPreferences
|
|
||||||
import io.mockk.coJustRun
|
import io.mockk.coJustRun
|
||||||
import io.mockk.coVerify
|
import io.mockk.coVerify
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
@ -36,13 +33,9 @@ import org.junit.Test
|
|||||||
class NotificationsSettingUpdaterTest {
|
class NotificationsSettingUpdaterTest {
|
||||||
|
|
||||||
private val fakeUpdateEnableNotificationsSettingOnChangeUseCase = mockk<UpdateEnableNotificationsSettingOnChangeUseCase>()
|
private val fakeUpdateEnableNotificationsSettingOnChangeUseCase = mockk<UpdateEnableNotificationsSettingOnChangeUseCase>()
|
||||||
private val fakeVectorPreferences = FakeVectorPreferences()
|
|
||||||
private val fakeUpdateNotificationSettingsAccountDataUseCase = mockk<UpdateNotificationSettingsAccountDataUseCase>()
|
|
||||||
|
|
||||||
private val notificationsSettingUpdater = NotificationsSettingUpdater(
|
private val notificationsSettingUpdater = NotificationsSettingUpdater(
|
||||||
updateEnableNotificationsSettingOnChangeUseCase = fakeUpdateEnableNotificationsSettingOnChangeUseCase,
|
updateEnableNotificationsSettingOnChangeUseCase = fakeUpdateEnableNotificationsSettingOnChangeUseCase,
|
||||||
vectorPreferences = fakeVectorPreferences.instance,
|
|
||||||
updateNotificationSettingsAccountDataUseCase = fakeUpdateNotificationSettingsAccountDataUseCase,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@ -69,38 +62,4 @@ class NotificationsSettingUpdaterTest {
|
|||||||
// Then
|
// Then
|
||||||
coVerify { fakeUpdateEnableNotificationsSettingOnChangeUseCase.execute(aSession) }
|
coVerify { fakeUpdateEnableNotificationsSettingOnChangeUseCase.execute(aSession) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `given a session when calling onSessionStarted then update account data on background sync preference change`() = runTest {
|
|
||||||
// Given
|
|
||||||
val aSession = FakeSession()
|
|
||||||
every { aSession.coroutineScope } returns this
|
|
||||||
coJustRun { fakeUpdateEnableNotificationsSettingOnChangeUseCase.execute(any()) }
|
|
||||||
coJustRun { fakeUpdateNotificationSettingsAccountDataUseCase.execute(any()) }
|
|
||||||
fakeVectorPreferences.givenChangeOnPreference(VectorPreferences.SETTINGS_FDROID_BACKGROUND_SYNC_MODE)
|
|
||||||
|
|
||||||
// When
|
|
||||||
notificationsSettingUpdater.onSessionStarted(aSession)
|
|
||||||
advanceUntilIdle()
|
|
||||||
|
|
||||||
// Then
|
|
||||||
coVerify { fakeUpdateNotificationSettingsAccountDataUseCase.execute(aSession) }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `given a session when calling onSessionStarted then account data is not updated on other preference change`() = runTest {
|
|
||||||
// Given
|
|
||||||
val aSession = FakeSession()
|
|
||||||
every { aSession.coroutineScope } returns this
|
|
||||||
coJustRun { fakeUpdateEnableNotificationsSettingOnChangeUseCase.execute(any()) }
|
|
||||||
coJustRun { fakeUpdateNotificationSettingsAccountDataUseCase.execute(any()) }
|
|
||||||
fakeVectorPreferences.givenChangeOnPreference("key")
|
|
||||||
|
|
||||||
// When
|
|
||||||
notificationsSettingUpdater.onSessionStarted(aSession)
|
|
||||||
advanceUntilIdle()
|
|
||||||
|
|
||||||
// Then
|
|
||||||
coVerify(inverse = true) { fakeUpdateNotificationSettingsAccountDataUseCase.execute(aSession) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user