diff --git a/app/src/main/java/ru/forbion/f7cloud/mobile/ui/MainViewModel.kt b/app/src/main/java/ru/forbion/f7cloud/mobile/ui/MainViewModel.kt index 2aa2208..048159c 100644 --- a/app/src/main/java/ru/forbion/f7cloud/mobile/ui/MainViewModel.kt +++ b/app/src/main/java/ru/forbion/f7cloud/mobile/ui/MainViewModel.kt @@ -5,11 +5,14 @@ import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import ru.forbion.f7cloud.core.auth.AppPasswordRevoker import ru.forbion.f7cloud.core.auth.AuthSession import ru.forbion.f7cloud.core.auth.AuthStore +import ru.forbion.f7cloud.core.push.F7PushRegistrar import ru.forbion.f7cloud.feature.files.OfficeWarmup import ru.forbion.f7cloud.mobile.OfficeWebViewPool @@ -29,9 +32,16 @@ class MainViewModel(app: Application) : AndroidViewModel(app) { } fun logout() { - // Best-effort ревокация app password на сервере ДО очистки локальной сессии. + // Best-effort ревокация app password + снятие устройства с push ДО очистки локальной сессии. _session.value?.let { current -> viewModelScope.launch { runCatching { AppPasswordRevoker.revoke(current) } } + viewModelScope.launch { + runCatching { + withContext(Dispatchers.IO) { + F7PushRegistrar.unregisterBlocking(getApplication(), current) + } + } + } } OfficeWarmup.clear() OfficeWebViewPool.dispose()