Use AccountManager

This commit is contained in:
Kirill Kamakin
2022-04-03 16:11:24 +05:00
parent 608aec525b
commit 096b5389bd
15 changed files with 475 additions and 20 deletions

View File

@@ -1,15 +1,18 @@
package gq.kirmanak.mealient.data.auth.impl
import androidx.datastore.preferences.core.Preferences
import dagger.hilt.android.scopes.ActivityScoped
import gq.kirmanak.mealient.data.auth.AuthStorage
import gq.kirmanak.mealient.data.storage.PreferencesStorage
import gq.kirmanak.mealient.service.auth.AccountManagerInteractor
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
@ActivityScoped
class AuthStorageImpl @Inject constructor(
private val accountManagerInteractorImpl: AccountManagerInteractor,
private val preferencesStorage: PreferencesStorage,
) : AuthStorage {
@@ -30,6 +33,18 @@ class AuthStorageImpl @Inject constructor(
return token
}
override fun authHeaderObservable(): Flow<String?> {
Timber.v("authHeaderObservable() called")
return accountManagerInteractorImpl.accountUpdatesFlow()
.map { it.firstOrNull() }
.map { account ->
account ?: return@map null
runCatching { accountManagerInteractorImpl.getAuthToken(account) }
.onFailure { Timber.e(it, "authHeaderObservable: can't get token") }
.getOrNull()
}
}
override suspend fun clearAuthData() {
Timber.v("clearAuthData() called")
preferencesStorage.removeValues(authHeaderKey)