Replace Shared Preferences with Data Store

This commit is contained in:
Kirill Kamakin
2022-04-03 19:55:31 +05:00
parent fd9f7e5aa1
commit b3e25db4df
17 changed files with 244 additions and 144 deletions

View File

@@ -15,5 +15,5 @@ interface AuthRepo {
fun authenticationStatuses(): Flow<Boolean>
fun logout()
suspend fun logout()
}

View File

@@ -3,7 +3,7 @@ package gq.kirmanak.mealient.data.auth
import kotlinx.coroutines.flow.Flow
interface AuthStorage {
fun storeAuthData(authHeader: String, baseUrl: String)
suspend fun storeAuthData(authHeader: String, baseUrl: String)
suspend fun getBaseUrl(): String?
@@ -11,5 +11,5 @@ interface AuthStorage {
fun authHeaderObservable(): Flow<String?>
fun clearAuthData()
suspend fun clearAuthData()
}

View File

@@ -46,7 +46,7 @@ class AuthRepoImpl @Inject constructor(
return storage.authHeaderObservable().map { it != null }
}
override fun logout() {
override suspend fun logout() {
Timber.v("logout() called")
storage.clearAuthData()
}

View File

@@ -1,55 +1,48 @@
package gq.kirmanak.mealient.data.auth.impl
import android.content.SharedPreferences
import androidx.core.content.edit
import gq.kirmanak.mealient.data.auth.AuthStorage
import gq.kirmanak.mealient.extensions.changesFlow
import gq.kirmanak.mealient.extensions.getStringOrNull
import gq.kirmanak.mealient.data.storage.PreferencesStorage
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
private const val AUTH_HEADER_KEY = "AUTH_TOKEN"
private const val BASE_URL_KEY = "BASE_URL"
@Singleton
class AuthStorageImpl @Inject constructor(
private val sharedPreferences: SharedPreferences
private val preferencesStorage: PreferencesStorage,
) : AuthStorage {
override fun storeAuthData(authHeader: String, baseUrl: String) {
private val authHeaderKey by preferencesStorage::authHeaderKey
private val baseUrlKey by preferencesStorage::baseUrlKey
override suspend fun storeAuthData(authHeader: String, baseUrl: String) {
Timber.v("storeAuthData() called with: authHeader = $authHeader, baseUrl = $baseUrl")
sharedPreferences.edit {
putString(AUTH_HEADER_KEY, authHeader)
putString(BASE_URL_KEY, baseUrl)
}
preferencesStorage.storeValues(
Pair(authHeaderKey, authHeader),
Pair(baseUrlKey, baseUrl),
)
}
override suspend fun getBaseUrl(): String? {
val baseUrl = sharedPreferences.getStringOrNull(BASE_URL_KEY)
val baseUrl = preferencesStorage.getValue(baseUrlKey)
Timber.d("getBaseUrl: base url is $baseUrl")
return baseUrl
}
override suspend fun getAuthHeader(): String? {
Timber.v("getAuthHeader() called")
val token = sharedPreferences.getStringOrNull(AUTH_HEADER_KEY)
val token = preferencesStorage.getValue(authHeaderKey)
Timber.d("getAuthHeader: header is \"$token\"")
return token
}
override fun authHeaderObservable(): Flow<String?> {
Timber.v("authHeaderObservable() called")
return sharedPreferences.changesFlow().map { it.first.getStringOrNull(AUTH_HEADER_KEY) }
return preferencesStorage.valueUpdates(authHeaderKey)
}
override fun clearAuthData() {
override suspend fun clearAuthData() {
Timber.v("clearAuthData() called")
sharedPreferences.edit {
remove(AUTH_HEADER_KEY)
remove(BASE_URL_KEY)
}
preferencesStorage.removeValues(authHeaderKey, baseUrlKey)
}
}